字符串
一 :字符串相关函数
# 1.len
#2.str
'''
str(数据) - 所有的数据都可以转换成字符串;转换的时候是在数据的打印值外面加引号
'''
num = 123
# str(num) - '123'
list1 = [10, 20, 30]
print(str(list1)) #[10, 20, 30] 本质上已经变了会把引号省略其实有
# 3.eval(字符串) - 获取指定字符串引号中的内容(去取字符串的引号)
#注意: 这儿的字符串去掉引号以后必须是一个合法的表达式
# 1) 去掉引号以后是合法的数据
result = eval('100') # 100
print(result,result*2,result+10) # 100 200 110
# result = eval('abc') #报错
result =eval('"abc"')
print(result) # abc
# result = eval('[abc , 1]') #报错 abc
# 合法表达式
result = eval('100+200') # 100 +200
print(result) #300
abc = 10
result = eval('abc + 100')
print(result) #110
nums =[10,20]
eval('nums.append(100)')
print(nums) #[10, 20, 100]
# funcname =input('shuru:')
# eval (funcname + 'sdf')
nums = 'sdsa56812ad'
print(nums.title()) #Sdsa56812Ad
二 :字符串相关方法
# 1. join
# 字符串.join(序列) - 将序列中的元素用指定的字符串连接成一个新的字符串(序列中的元素必须全部都是字符串)
list1 = ['hello', 'world!','你好']
result = ''.join(list1)
print(result) #helloworld!你好
str1 = 'hello'
result = ' '.join(str1)
print(result) #h e l l o
# 练习: 将Nums中的数字拼接成一个数字
nums = [10, 30, 2, 48]
result = ''.join([str(x) for x in nums])
print(int(result)) #1030248
# 练习: 将nums中所有的个位数拼接成一个数字字符串,'09042'
nums = [10, 29, 30, 4, 52]
result = ''.join([str(x%10) for x in nums])
print(result) #09042
#练习:将List1 所有数字+连接,并计算他们的和
list1 = [19,'abc', 1.23, 8, 22.2,'环境']
result = '+'.join([str(x) for x in list1 if type(x) in (int, float)])
print(result,eval(result),sep="=") #19+1.23+8+22.2=50.43
# 2.split - 切割
# 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割
#2)字符串1 .split(字符串2,N) - N是切割次数
str1 = 'abc123hello123你好123python'
result = str1.split('123') #
print(result) #['abc', 'hello', '你好', 'python']
#注意:
str1 = '123abc123hello123你好'
print(str1.split('123')) #['', 'abc', 'hello', '你好']
# 开头,结尾,连续切割,会出现空串
print(str1.split('123',2)) #['', 'abc', 'hello123你好']
# 3.replace - 替换
# 字符串1.replace(字符串2 , 字符串3) 1中字符串2 替换成 字符串3
# 字符串1.replace(字符串2 , 字符串3, N) N是次数
str1 = 'how are you? Im fine , Thank you!'
result = str1.replace('you', 'me')
print(result) #how are me? Im fine , Thank me!
# 4. strip - 去掉字符串前后的空白字符
# 字符串.strip 还有单独去一边rstrip lstrip
# 字符串.strip(字符) 去掉前后这个字符
str1 = ' \t \n good good study \n'
print(str1)
result = str1.strip()
print(result)
str2 = 'god sdsf ///'
result = str2.strip('/')
print(result) #god sdsf
# 5.count
# 字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
# 6.maketrans translate
# str.maketrans(字符串1, 字符串2) - 通过字符串1和字符串2创建替换对应关系表
# 字符串.translate(对应关系表) - 按照对应关系表将字符串中字符进行替换
table = str.maketrans('abc','123') #a=1 b-2
print(table) #{97: 49, 98: 50, 99: 51}
str1 = 'hdkfsa34545sfabcasds'
result = str1.translate(table)
print(result) #hdkfs134545sf1231sds
#------------------------------------------------------------------------
# 1.center . ljust .rjust . zfill
'''
字符串.center(长度 , 字符) - 将字符串指定长度,其余用指定字符填充;元字符放中间
字符串.ljust(长度 , 字符) - 将字符串指定长度,其余用指定字符填充;元字符放左边
字符串.rjust(长度 , 字符) - 将字符串指定长度,其余用指定字符填充;元字符放右边
字符串.zfill(长度) == '字符串.rjust(长度, '0')
'''
# abcxxxx xxxxabc xxabcxx
str1 ='abc'
print(str1.center(7,'x')) #xxabcxx
print(str1.ljust(7, 'x')) #abcxxxx
print(str1.rjust(7, 'x')) #xxxxabc
# 不能变短,不会动
num = '123'
print(num.zfill(6)) #000123
#2. find index
'''
字符串1.find(字符串2) - 获取字符串2第一次出现的位置,不存在会返回-1
字符串1.index(字符串2) - 获取字符串2第一次出现的位置,不存在报错
字符串1.rfind(字符串2) -从右边开始数,下标是正常下标
字符串1.rindex(字符串2) - 从右边开始数
'''
str1 = 'how are you? Im fine ,you see see ,one day day'
print(str1.find('you')) #8
print(str1.index('you')) # 8
print(str1.find('youu')) #-1
#print(str1.index('youu')) #baocuo
print(str1.rfind('you')) #22
#string.isalnum() -#如果 string 至少有一个字符并且所有字符都是字母或数字huo中文则返
#回 True,否则返回 False
# 3. string.isdigit() string.isnumeric() - 判断是否为纯数字字符串
#string.isdigit() - 0-9纯数字
#string.isnumeric() - 数字意义的字符
str1 = '2342'
print(str1.isdigit()) #True
print(str1.isnumeric()) #True
str1 = '2342一壹百万ⅤⅣ'
print(str1.isdigit()) #False
print(str1.isnumeric()) # True
#string.lower() -转换 string 中所有大写字符为小写.
#string.upper() - 转换 string 中的小写字母为大写
三 :格式字符串
name =input('请输入姓名:')
# age = int(input('请输入年龄:'))
# 问题: 写代码的时候可能会出现一个字符串中的部分内容无法确定
# xxx今年xx岁!
# str1 = ' '
#
# # 方法一: 字符串拼接
# str1 = name + '今年' + str(age) + '岁!'
# print(str1)
#
# # 方法2: 格式占位符
# str1 = '%s今年%d岁!'%(name, age)
# print(str1)
#
# # 方法3:使用f-string
# str1 = f'{name}今年{age}岁!'
# print(str1)
# 1. 格式站位符创建字符串
'''
语法: 包含格式占位符的字符串%(数据1,数据2,数3 ....)
注意: 后面括号中的数据必须和前面字符串的占位符一一对应
常用的格式占位符:
%s - 字符串占位符,可以对应任何类型的数据
%d - 整型,可以对应任何数字,去掉小数
%f - 浮点数,可以对应任何数字,默认6位小数
'''
# xxx今年xx岁,月薪xxxx元!
# str1 = '%s今年%d岁,月薪: %.2f 元!'%(name,age,10558)
# print(str1) #wuxukui今年55岁,月薪: 10558.00 元!
num = 34.8
str2 = '价格: %s' % num
print(str2) #价格: 34.8
# 2. f- string
'''
语法:在字符串最前面加f,就可以在字符串中通过'{}'来提供字符串中变化的部分
'''
name = '小明'
age = 40
str1 = '{name}'
print(str1) #{name}
str1 = f'{name}'
print(str1) #小明
str1 = f'{name*2}'
print(str1) #小明小明
str1 = f'{name[1]*3}'
print(str1) #明明明
str1 = f'{name} =abc= {age + 10}'
print(str1) #小明 =abc= 50
score = [10,20,30]
str1 = f'{name}三门学科分数:{str(score)[1:-1]}'
print(str1) #小明三门学科分数:10, 20, 30
# 1)加参数: {表达式:参数}
# a.控制小数位数的参数: {表达式:.Nf}
money = 17283
str1 =f'年薪:{money * 13}'
print(str1) #年薪:224679
# b. 显示百分比{表达式:.N%}
rate =0.87
str1 = f'班级及格率:{rate: .2%}'
print(str1) #班级及格率:87.00%
# c. 逗号显示金额:
# 1,000
# 18,293,020,200
money = 172830
str1 = f'年薪:{money * 13:,.2f}元'
print(str1) #年薪:2,246,790元 #年薪:2,246,790.00元
# d.修改填充内容长度:
num = 3
str1 = f'py2022{num:0>4}'
print(str1) # py20220003
str1 = f'py2022{num:0^5}'
print(str1) #py202200300
str1=f'py2022{num:1<5}'
print(str1) #py202231111
str1=f'py2022{num:x<5}'
print(str1) #py20223xxxx