DAY09 字符串

DAY09 字符串

一. 字符串相关函数

1.1 len()

len(数据) - 字符串长度

1.2 str()

str(数据) - 所有的数据都可以转换成字符串;转换的时候是在数据的打印值外面加引号

num = 123
print(num)  # 123
str(num)   # '123'

list1 = [10,20,30]
print(list1)   # [10, 20, 30]  打印列表数据间逗号后加空格,双引号变单引号
print(str(list1),type(str(list1)))  # [10, 20, 30] <class 'str'>,打印后str的''不显示,并且数据间逗号后加空格,在字符串中,下标标准化
# 打印str会先将原数据类型写法标准化,再变成字符串
1.3 eval()

获取指定字符串引号中的内容(去掉字符串的引号)

注意:这里的字符串去掉引号后必须是合法的表达式

  1. 去掉引号后必须是合法的数据 - str的反向操作
result = eval('100')   # 100
print(result, type(result))   # 100 <class 'int'>

# result = eval('abc')   # 报错

result = eval('"abc"') # "abc"
# 原字符串长度5,eval后长度3

result = eval('[10, 20, 30]')  # [10, 20, 30],普通列表

# result = eval('[abc, 20, 30]')  # 报错,去引号后列表中abc不合法
  1. 去掉引号后是合法的表达式
result = eval('100 + 200')
print(result)   # 300

abc = 10
result = eval('abc')
print(result)    # 10   合法

nums = [10, 20, 30]
eval('nums.append(100)')
print(nums)    # [10, 20, 30, 100]

二. 字符串相关方法

字符串.方法()

2.1 join

字符串.join(序列) - 将序列中的元素用指定字符串连接成一个新的字符串

list1 = ['hello', 'world!', '你好', '世界']
result = ''.join(list1)
print(result)    # 'helloworld!你好世界'

result = ','.join(list1)
print(result)     # hello,world!,你好,世界

result = '123'.join(list1)
print(result)     # hello123world!123你好123世界


str1 = 'hello'
# 'h e l l o'
result = ' '.join(str1)
print(result)

# 练习:将nums中元素拼接成一个数字,102030452
nums = [10, 20, 30, 4, 52]
result = ''.join([str(x) for x in nums])
print(result)

# 练习:将nums中所有的个位数拼接成一个数字字符串, '09042'
nums = [10, 29, 30, 4, 52]
result = ''.join([str(x % 10) for x in nums])
print(result)

# 练习:将list1中所有的数字用'+'连接,并且计算他们的和: '9+1.23+8+22.2=50.43'
list1 = [19, 'abc', True, 1.23, 8, 22.2, '环境']
result = '+'.join([str(x) for x in list1 if type(x) in (int, float)])
# print(result,'=',eval(result))
print(result,eval(result), sep='=')
2.2 split
  1. 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割,返回一个包含多个字符串的列表
  2. 字符串1.split(字符串2, N) - 将字符串1中前N个字符串2作为切割点对字符串进行切割,返回一个包含多个字符串的列表
str1 = 'abc123hello123你好123python'
result = str1.split('123')
print(result)     # ['abc', 'hello', '你好', 'python']

# 注意:如果切割点在字符串开头,或者字符串结尾,或者连续出现多个切割点都会产生空串
# n个切割点,一定产生n + 1个分段
str1 = '123abc123hello123你好123python'
print(str1.split('123'))  # ['', 'abc', 'hello', '你好', 'python']

str1 = 'abc123hello123你好123python'
result = str1.split('123', 2)
print(result)   # ['abc', 'hello', '你好123python']
2.3 replace - 替换
  1. 字符串1.replace(字符串2,字符串3) - 将字符串1中所有的字符串2都替换成字符串3
  2. 字符串1.replace(字符串2,字符串3, N) - 将字符串1中前N个字符串2都替换成字符串3
str1 = 'how are you! Im fine, Thank you!'
# you -> me
result = str1.replace('you', 'me')
print(result)    # how are me! Im fine, Thank me!
2.4 strip
  • 字符串.strip() - 去掉字符串前后的空白字符串
  • 字符串.strip(字符)
print('--------------------优雅转场,华丽分割-------------------')
str1 = '       \t   \n       good good study     \n  '
print(str1)
print('--------------------优雅转场,华丽分割-------------------')
result = str1.strip()
print(result)
print('--------------------优雅转场,华丽分割-------------------')
str2 = '//good good study'
result = str2.strip('/')
print(result)    # good good study
2.5 count

字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数

str1 = 'how are you! Im fine, Thank you!'
print(str1.count('you'))   # 2
print(str1.count('a'))     # 2

2.6 maketrans, translate
  • str.maketrans(字符串1, 字符串2) - 通过字符串1和字符串2创建替换对应关系表

  • 字符串.translate(对应关系表) - 按照对应关系表将字符串中字符进行替换

table = str.maketrans('abc', '123')   # a-1, b-2, c-3
str1 = 'ajkfbbkfjdccab'
print(str1.translate(table))    # 1jkf22kfjd3312
2.7 center,ljust,rjust, zfill
  • 字符串.center(长度,字符) - 将指定字符串变成指定长度,不够的用指定字符填充;原字符串放中间
  • 字符串.ljust(长度,字符) - 将指定字符串变成指定长度,不够的用指定字符填充;原字符串放左边
  • 字符串.rjust(长度,字符) - 将指定字符串变成指定长度,不够的用指定字符填充;原字符串放右边
  • 字符串.zfill(长度) == 字符串.rjust(长度, ‘0’)
str1= 'abc'
print(str1.center(7, 'x'))     # 'xxabcxx'
print(str1.ljust(7, 'x'))      # 'abcxxxx'
print(str1.rjust(7, 'x'))      # 'xxxxabc'

print(str1.center(2, 'x'))      # 'abc'

num = '123'
print(num.zfill(6))    # 000123
2.8 find, index
  • 字符串1.find(字符串2) - 获取字符串2在字符串1中第一次出现的位置,如果字符串2不存在返回-1
  • 字符串1.index(字符串2) - 获取字符串2在字符串1中第一次出现的位置,如果字符串2不存在报错
  • 字符串1.rfind(字符串2)
  • 字符串1.rindex(字符串2)
str1 = 'how are you! Im fine, Thank you!'
print(str1.find('you'))   # 8
print(str1.index('you'))   # 8

print(str1.find('youu'))   # -1
# print(str1.index('youu'))   # 报错

print(str1.rfind('you'))    # 28,从后往前找,输出位置是从前往后数
2.9 isdigit,isnumeric - 判断是否是纯数字字符串
  • 字符串.isdigit() - 判断字符串中是否全是数字字符(0-9)
  • 字符串.isnumeric() - 判断字符串中是否是具有数字意义的字符
tr1 = '2342'
print(str1.isdigit())  # True
print(str1.isnumeric())  # True

str1 = '2345一四千百'
print(str1.isdigit())  # False,只能是0-9数字
print(str1.isnumeric())  # True,可以是表示数字的一个字符,多个字符表示的不行


print('k'.islower())   # 判断字符是否是小写
print('A'.isupper())

三. 格式字符串

# name = input('请输入姓名:')
# age = int(input('请输入年龄:'))
name = 'li'
age = 23
# 问题:写代码的时候可能会出现一个字符串中的部分内容无法确定
# xxx今年xxx岁

# 方法1:字符串拼接
str1 = name + '今年' + str(age) + '岁!'
print(str1)
3.1 格式占位符创建字符串
  • 语法:包含格式占位符的字符串%(数据1, 数据2, 数据3,…)

  • 注意:后面括号中的数据必须和前面字符串中的占位符一一对应

  • 常用的格式占位符:

    %s - 字符串占位符,可以对应任何类型的数据

    %d - 整数占位符,可以对应任何数字

    %f - 浮点数占位符,可以对应任何数字

    %.Nf - 保留N位小数

# 方法2:格式占位符
str1 = '%s今年%d岁!' % (name, age)
print(str1)

str1 = '%s今年%d岁,月薪:%.2f元!' % (name, age,10000)
print(str1)

price = 34.5445
str2 = '价格:%s' % price
print(str2)    # 价格:34.5445
str2 = '价格:%d' % price
print(str2)    # 价格:34
str2 = '价格:%f' % price
print(str2)    # 价格:34.544500
3.2 f-string
  • 语法:在字符串最前面加f,就可以在字符串中通过’{数据}'来提供字符串中变化的部分
# 方法3:使用f-string
str1 = f'{name}今年{age}岁!'
print(str1)

name = '小明'
str1 = '{name}'
print(str1)  # {name}

str1 = f'{name}'
print(str1)  # 小明

str1 = f'{name * 2}'
print(str1)  # 小明小明

str1 = f'{name[1] * 2}'
print(str1)   # 明明

str1 = f'{name} == {age + 10}'
print(str1)  # 小明 == 33

score = [90, 89, 67]
str1 = f'{name}三门学科的分数:{str(score)[1:-1]}'
print(str1)   # 小明三门学科的分数:90, 89, 67

加参数:{表达式:参数}

a.控制小数位数的参数:{表达式:.Nf}

money = 17283
str1 = f'年薪:{money * 13:.2f}'
print(str1)   # 年薪:224679.00

b.显示百分比:{表达式:.N%}

rate = 0.87
str1 = f'班级及格率:{rate}'
print(str1) # 0.87
str1 = f'班级及格率:{rate:%}'
print(str1)  # 班级及格率:87.000000%
str1 = f'班级及格率:{rate:.2%}'
print(str1)  # 班级及格率:87.00%

c.逗号显示金额

eg:1,000 18,234,243,344

money = 143444
str1 = f'年薪:{money * 13:,}元'
print(str1)   # 年薪:1,864,772元

money = 143444
str1 = f'年薪:{money * 13:,.2f}元'
print(str1)   # 年薪:1,864,772.00元

d.修改填充内容的长度:{表达式:字符>长度},{表达式:字符<长度},{表达式:字符^长度},字符不用加’’

num = 23
str1 = f'python2202{num:0>4}'
print(str1)  # python22020023

str1 = f'python2202{num:x<4}'
print(str1)   # python220223xx

str1 = f'python2202{num:a^4}'
print(str1)    #python2202a23a
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值