基本类型:字符串

2020-07-02  本文已影响0人  大象信步走来

基本类型:字符串

文本的表示

字符串就是把一个个文字的字符“串 起来”的数据
表示字符串
# 空串
str1 = ''
str2 = ""
str3 = ''''''
str4 = """"""
print(type(str1), type(str2), type(str3), type(str4))

# 非空字符串
str5 = 'abc'
str6 = "你好"
str7 = '''你好,hello'''
str8 = """123,hi"""


特殊字符用转义符号“\”表示
转义字符 描述
(在行尾时) 续行符
\\ 反斜杠符
\' 单引号
\" 双引号
\a 响铃
\b 退格(backspace)
\e 转义
\000
\n 换行
\r 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\0yy 八进制yy的代表的字符,例如\012代表换行,数值参见ASCII码
\xyy 十六进制yy的代表的字符,例如\x0a代表换行,数值参见ASCII码
\uyyyy 十六进制yyyy代表的字符,例如\u4e00代表中文字符‘一’,参见Unicode编码
\other 其他字符以普通格式输出
str1 = r'\tyytc\n3123\u4e00'
print(str1)

字符编码

编码表
ASCII表:用一个字节来对字符进行编码(编码范围:0~127)
Unicode编码表
str1 = '\u0f00你好!'
print(str1)

字符串和名字的区别

字符串是数据本身
名字是数据的标签
名字和字符串是“名”和“值”之间 的关系

字符串是一种序列

序列(sequence)
序列的内部结构:

字符串操作

获取字符串中的元素(获取字符)
  1. 下标操作获取单个元素
  2. 切片(slice)操作获取多个元素 s[start​ :end :step]
  3. 遍历
str1 = 'how are you!'

# 获取单个元素

print(str1[2])
print(str1[-1])

# 切片

print(str1[1:5])    # 'ow a'
print(str1[-3::-1])  # 'oy era woh'

# 遍历

for x in str1:
    print(x)

for index in range(len(str1)):
    print(str1[index])

字符串相关运算符
  1. “加法”和“乘法”
str1 = 'app'
str2 = 'le'
print(str1 + str2)     # apple
print(str2 * 2)        # lele
  1. 判断字符串内容是否相同(==,!=)
str3 = 'app'
print(str3 == 'app')     # True
print(str3 == 'pap')     # False
  1. 判断两个个字符串的大小
str3 = 'aXYZ'
str4 = 'Ax12'
print(str3 > str4)     # True
# 练习1:输入一个字符串,统计字符串中字母和中文的个数
str6 = 'hello, 你好吗?'
count1 = 0
count2 = 0
for x in str6:
    if 'a' <= x <= 'z' or 'A' <= x <= 'Z':
        count1 += 1
    elif '\u4e00' <= x <= '\u9fa5':
        count2 += 1
print('字母的个数:', count1, '中文的个数:', count2)

# 练习2:判断输入的字符串是否是纯数字字符串
str7 = '728373'
for x in str7:
    if not '0' <= x <= '9':
        print('不是纯数字字符串')
        break
else:
    print('是纯数字字符串')
  1. 判断字符串中是否包含某个字符串(in/not in)
print('yyz' in 'zyy')   # False # 顺序不一致
print('yyz' in 'yyzab')   # True
print('a' in 'yyzab')     # True
字符串相关函数
  1. 获取字符串的长度 len函数

  2. max/min/sorted/reversed等,这些函数都适用于字符串

  3. str(数据) - 将自定数据转换成字符串

    • 所有的数据都能转换成字符串
    • 将数据的打印值作为字符串的内容
    a ='absjfh'
    print(sorted(a)) # ['a', 'b', 'f', 'h', 'j', 's']
    print(a)  # absjfh
    
    str1 = r'\tabc'
    print(len(str1))    # 5
    
    num = 100
    str(num)        # '100'
    str([1, 2, 3])   # '[1, 2, 3]'
    

字符串方法

  1. split:分割
# 字符串1.split(字符串2)  - 字符串1将字符串2为切割点
# 字符串1.split(字符串2,N)  - 字符串1将字符串2为切割点,切N次
# 字符串1.rsplit(字符串2,N)  - 字符串1将字符串2为切割点,从右往左切N次

str1 = 'how are you? --- I am fine. thank you! and you?'
str2 = str1.split(' ') 
str3 = str1.split(' ',2)
str4 = str1.rsplit(' ',2)
print(str2) # ['how', 'are', 'you?', '---', 'I', 'am', 'fine.', 'thank', 'you!', 'and', 'you?'] 
print(str3) # ['how', 'are', 'you? --- I am fine. thank you! and you?']
print(str4) # ['how are you? --- I am fine. thank you!', 'and', 'you?']
  1. join:合并
# 字符串.join(序列) 序列中的字符元素会用字符串连接

list1 = ['ap','p','le']
new_str1 = ''.join(list1)
new_str2 = '+'.join(list1)
print(new_str1) # apple
print(new_str1) # ap+p+le

list2 = [1,2,3]
new_str = '+'.join(list2)
print(new_str) # TypeError: sequence item 0: expected str instance, int found
  1. upper/lower/swapcase:大小写相关
str1 = 'abc'
print(str1.upper())
print(str2) # ABC
  1. ljust/center/rjust/zfill:排版相关 左中右对齐
str1 = 'how are you?'
new_str0 = str1.center(20)
new_str1 = str1.center(20,"*")
new_str2 = str1.ljust(20,"*")
new_str3 = str1.rjust(20,"8")
new_str4 = str1.zfill(20) # zfill() takes exactly one argument
new_str5 = str1.rjust(20)

print(new_str0) #     how are you?    
print(new_str1) # ****how are you?****
print(new_str2) # how are you?********
print(new_str3) # ********how are you?
print(new_str4) # 00000000how are you?
print(new_str5) #         how are you?
# 练习1: 给任意一个商品的数字编号值,转换成固定格式的商品编码: GDXXXX  -> GD0001, GD0012,....
num = 2  
num_str = 'GD'+str(num).zfill(4) # GD0002
  1. replace:替换子串
str1 = 'how are you? i am fine, Thank you!'
new_str = str1.replace('o', '*')
print(new_str)     # h*w are y*u? i am fine, Thank y*u!

new_str = str1.replace('o', '+', 2)
print(new_str)     # h+w are y+u? i am fine, Thank you!

new_str = str1.replace('you', 'me')
print(new_str)     # how are me? i am fine, Thank me!

  1. find: 获取字符串2第一次在字符串1中出现的位置(用正的下标值表示),找不到返回 -1
str1 = 'How are you? - I am fine. Thank you!'
print(str1.find('you')) # 8
  1. count:统计字符串1出现字符串2的次数
str1 = 'how are you?'
print(str1.count('you')) # 1
print(str1.count('you',0,5)) # 0
  1. expandtab:
str2 = '\tabc\t123'
new_str2 = str2.expandtabs()
print(str2,len(str2))
print(new_str2,len(new_str2))
new_str3 = str2.expandtabs(2)
new_str4 = str2.expandtabs(3)
new_str5 = str2.expandtabs(4)
new_str6 = str2.expandtabs(5)
new_str7 = str2.expandtabs(6)
print(new_str3)
print(new_str4)
print(new_str5)
print(new_str6)
print(new_str7)
  1. strip 删除空白(空白包括空格 换行等)
astr = '    How are you? - I am fine. Thank you!    )
astr1 = astr.strip()
astr2 = astr.lstrip()
astr3 = astr.rstrip()
print(astr1)
print(astr2)
print(astr3)
  1. 判断字母数字

格式化输出

格式占位符

字符串中某一个或多个部分不确定就可以用格式字符串来实现功能

name = input('姓名:')
age = int(input('年龄:'))
salary = float(input('年薪:'))
message = '%s今年%d岁。年薪:%f元' % (name,age,salary)
message1 = '%s今年%5d岁。' % (name,age)
message2 = '%s今年%-5d岁。' % (name,age)
format
字符

在字符串中通过{}来占位表示字符串中变化的部分

name = input('姓名:')
age = int(input('年龄:'))

# {}的个数和数据项数量保持一致
message = '{}今年{}岁。'.format(name,age)
print(message)
#列表形式的format
message1 = '你好,我是{0}。你多大了?--嗨,{0}你好,我{1}'.format(name,age)
print(message1)
# key形式的format:{key}
message2 = '我叫{name},今年{age}。'.format(name= 'ALLEN',age=18)
print(message2)
# key形式format的变形
message3 = f'那个{name},已经{age}了。'
print(message3)
数字格式化
print('数字:{:.2f}'.format(1.23785648))
print('数字:{:x>5d}'.format(32))
print('数字:{:0<5d}'.format(32))
num = 1000000
print('数字:{:,}'.format(num))
num = 0.45
print(f'{num:.2%}')
上一篇下一篇

猜你喜欢

热点阅读