day 10 字符串

day 10 字符串

字符编码
1. 字符编码

为了你能够让计算机存储文字符号,每个符号对应了一个固定的数字,每次在需要存储这个符号时,就去存储这个固定的数字。
每个对应的那个数字就是这个符号的编码值。

2. 编码表

1)ASCII码表
美国信息码(只保存了美国人常用的符号,总共128个)
数字字符
大写字母(A 为 65)
小写字母(a 为 97)
英文输入法下的特殊符号
码:48 — > 57 65 ----> 90 97 ----> 122
代表:0 ----> 9 A -----> Z a ----> z

2)Unicode编码表(Python) — 现阶段普遍使用的
又叫统一码、万国码,
a. 是在包含ASCII码的情况下扩展的,故A、a、0~9的编码值都没有变,和ASCII码相同
即是前128个字符就是ASCII码表中的内容。
它包含了世界上所有国家所有民族的所有语言符号

b. 其中中文编码范围:4e00 ~ 9fa5 (十六进制)

3. 编码表的使用
1). chr(编码值) — 获取编码值对应的字符
print(chr(97))
# a
  • 获取中文字符(python中十六进制需要在编码值前 加 0x)

    中文字符的编码值是十六进制的,4e00 ~ 9fa5

    # 中文字符第一个:
    print(chr(0x4e00))  # 一
    
    # 最后一个中文字符
    print(chr(0x9fa5)) # 龥
    

    可以导入pypinyin库,对中文字符注音

    from pypinyin import pinyin
    print(pinyin('龥'))  # [['yù']]
    

获取所有的中文字符

for i in range(0x4e00, 0x9fa5+1):
    print(chr(i),pinyin(chr(i)),end=' ')
2). ord(字符) — 获取字符的编码值

注意:字符指的是长度为1的字符串,返回的编码值为十进制的

应用

m ----> M : 把小写字母变成大写

char=chr(ord('m')-32)
print(char)  # M

大写字母变为小写字母 +32即可

char3 = chr(ord('H')+32)
print(char3)
3). 编码字符:\u4位16进制的编码值

在字符串中提供字符的方式有两种:a.直接提供字符 b. 使用编码字符
hex(10进制数字) — 将10进制数字转换为16进制,不满四位的在前面补0

str1 = 'a'

str2 = '\u0061\u9fa5'
print(str2)
# 如果知道字符编码值是多少,但不知道字符是什么的时候,就可以使用编码字符来表示这个字符

char = '块'
if '\u4e00' <= char <= '\u9fa5':
    print(char, '是中文字符')
else:
    print(char, '不是中文字符')
4. 字符查

字符串获取字符的方法和列表获取元素的方法一样

  1. 获取单个元素

    字符串[下标]

    **注意:字符串中转义字符的长度是1,例如\t、\n、\u9fa5长度都是1

    str1 = '\thello \nworld\u9fa5!'
    print(str1[-2])   # 龥
    print(str1[1])   # h
    
  2. 字符串切片

    和列表切片相同

    str2 = 'good good study'
    print(str2[1:-2:2])  # odgo t
    
  3. 遍历字符串

    # 依次取到每个字符
    for i in str2:
        print(i)
    
    for index in range(len(str1)):
        print(index, str1[index])
    
    str3 = '竹杖芒鞋轻声马,归去,也无风雨也无晴🌤!'
    for index, item in enumerate(str3):
        printpython    
     print(index*item)
    
5. 字符串相关操作
  1. 加法运算 — 将两个字符串合并为一个字符串

    字符串1+字符串2

    应用:提取指定类字符、插入指定字符、删改某些字符

    # 案例1:提取字符串中所有的数字字符
    str1 = '世界上788睡觉觉啊098kkk'
    str2 = ''
    for i in str1:
        if '0' <= i <= '9':
            str2 += i
    print(str2)
    
    # 案例2:在字符串每一个数字后面插入一个百分号
    str1 = '世界上788睡觉觉啊098kkk'
    str2 = ''
    for i in str1:
        if '0' <= i <= '9':
            str2 += i + '%'
        else:
            str2 += i
    print(str2)
    
    # 练习:将字符串中所有数字字符改成‘+’
    str1 = '世界上788睡觉觉啊098kkk'
    str2 = ''
    for i in str1:
        if '0' <= i <= '9':
            str2 += '+'
        else:
            str2 += i
    print(str2)
    
  2. 乘法运算

    # 字符串 * N、N* 字符串  --- 让字符串中元素重复产生一个新的字符串
    str1 = 'a'*3
    print(str1)
    
  3. 字符串比较运算

    • 比较是否相等: == 、!=(顺序影响结果)

      print('abc' == 'bac')  # False
      
    • 比较大小

      两个字符串比较大小,比较的是第一对不相等的元素的大小

      判断字符的性质:
      判断是否是数字字符:‘0’ <= x <= ‘9’
      判断是否是小写字母:‘a’ <= x <= ‘z’
      判断是否是大写字母:‘A’ <= x <= ‘Z’
      判断是否是字母:‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
      判断是否是中文:‘一’ <= x <= ‘\u9fa5’ (‘一’也可以换为’\u4e00’)

      两个字符比较大小是比较两个字符的编码值的大小
      数字 < 大写字母 < 小写字母 < 中文

      print('abc' > 'bcc')
      
  4. in 和 not in

    # 字符串1 in 字符串2  --- 字符串1是否是字符串2的子串(字符串2是否包含字符串1)
    print('a' in 'abc')    # True
    print('ab' in 'abc')   # True
    print('ac' in 'abc')   # False
    
  5. 相关函数

    • sum 求和函数不支持

    • max 、 min 、 sorted支持

    • len(字符串)

    • 转换类型为字符串

      str(数据) — 任何数据类型都可以转换为字符串

      转换时在数据打印值外面加引号

      list1 = [10, 20, 30]  # '[10, 20, 30]'
      print(str(list1))
      
      # 对于不标准的数据(没有空格、用的单引号),转换时即是在打印值外加引号
      list1 = [10,20,30]  # '[10, 20, 30]'  打印时会有空格
      print(str(list1))
      
      list1 = ["天线宝宝",3]
      print(str(list1))    # "['天线宝宝', 3]"  # 打印时会有空格,双引号会变为单引号
      
    • eval(字符串)

      去掉字符串的引号,获取引号中表达式的结果

      a = eval('100')
      print(a, type(a))    # 100 <class 'int'>
      
      # b = eval('abc')   # 若去掉引号后字符不合法如abc 则会报错
      # 此时需要在其前面加一条语句:abc = 100 就不会报错
      abc = 100
      b = eval('abc')
      

      可以得到代码,也可以执行代码

      m = int(input('请输入数据m:'))
      n = int(input('请输入数据n:'))
      value = input('请选择运算符:(+、-、*、/)')
      result = eval(f'm{value}n')   # 此处也可以用拼接:result = eval('m' + value + 'n')
      print(result)
      
6. 字符串相关方法
  1. 连接字符串的符号.join(序列) ---- 将序列中元素用指定的字符串连接成一个新的字符串(序列中元素必须都是字符串)

    list1 = ['花花', '小马', '小明']
    result = ' and '.join(list1)
    print(result)    # 花花 and 小马 and 小明
    
    result = '**'.join('abc')
    print(result)    # a**b**c
    

    案例:

    nums = [90, 78, 67, 45, 23]
    # 需求: 想要得到:'90 + 78 + 67 + 45 + 23'
    nums_s = []
    for i in nums:
        nums_s.append(str(i))
    result = ' + '.join(nums_s)
    print(result)
    
    # 法2: 列表推导式
    result = ' + '.join([str(i) for i in nums])
    print(result, end=' = ')
    print(eval(result))
    
    1. 字符串.count(字符串2) — 统计字符串1中字符串2的个数

      msg = 'how are you? i am fine! thank you, and you?'
      result = msg.count('a')
      print(result)  # 4
      
    2. 字符串.split()

      • 字符串1.split(字符串2) — 将字符串1中所有字符串2作为切割点对字符串1进行切割,而切割点字符串消失,不会保留在切割后的结果中

      • 字符串1.split(字符串2,N) — 将字符串1中前N个字符串2作为切割点对字符串1进行切割

        msg = 'how are you? i am fine! thank you, and you?'
        result = msg.split('you')
        print(result)  # ['how are ', '? i am fine! thank ', ', and ', '?']
        # 切割点会消失,不会保留在切割后的结果中
        
        date = '2020/6/5'
        result = date.split('/')
        print(result)  # ['2020', '6', '5']
        
        msg = 'how are you? i am fine! thank you, and you?'
        result = msg.split('you', 1)
        print(result)  # ['how are ', '? i am fine! thank you, and you?']
        
    3. 字符串1.replace(字符串2,字符串3)

      1)字符串1.replace(字符串2,字符串3) – 将字符串1中所有的字符串2都替换成字符串3
      2) 字符串1.replace(字符串2,字符串3,N) – 将字符串1中前N个字符串2都替换成字符串3

      msg = 'how are you? i am fine! thank you, and you?'
      result = msg.replace('you', '')
      print(result)   # how are ? i am fine! thank , and ?
      # 替换为空串效果即是删除了'you'
      
    4. 字符串.strip() — 将字符串前后两边的空白去掉。空白包括空格、换行、缩进

      str1 = '   "how are you?"   '
      result = str1.strip()
      print(result)   # "how are you?"
      
      str2 = '//小明/'
      print(str2.strip('/'))   # 小明
      
  2. 字符串.isupper() – 判断字符串是否是纯大写字母字符串
    字符.isupper() – 判断字符是否是大写字母

  3. 字符串.islower() — 判断字符串(或字符)是否是纯大写字母字符串

  4. 字符串.isdigit() — 判断字符或字符串是否是全是数字字符

  5. 字符串.upper() — 将字符串中所有小写字母转换为大写字母
    字符.upper()

  6. 字符串.lower — 将字符串中所有大写字母转换为小写字母
    字符.lower()

    # 判断char是否是字母
    char = '2'
    if char.islower() or char.isupper():
        print('是字母')
    else:
        print('不是字母')
    
    if 'a' <= char <= 'z' or 'A' <= char <='Z':
        print('是字母')
    else:
        print('不是字母')
    
7. 格式字符串
str1 = 'hello world!'
# 解决的问题:字符串内容不确定

name = input('请输入学生的名字:')
age = int(input('请输入学生的年龄:'))
money = float(input('请输入薪资:'))
# 输出:xxx今年XXX岁!薪资XXX元!
  1. 字符串拼接:
msg = name + '今年' + str(age) + '岁!' + '薪资' + str(money) + '元!'
print(msg)
  1. 格式字符串 – 包含格式占位符的字符串

    1)语法:包含格式占位符的字符串% (数据1,数据2, 数据3,……)

    2)注意:()中的数据必须和前面字符串中的占位符一一对应

    3)常见的格式占位符:
    %s — 可以给任何类型的数据占位,列表、字符串、数字……都可以
    %d —(整数占位符) 可以给任何数字也只能给数字占位,但如果给的是小数会自动转换为整型
    %f —(浮点占位符) 可以给任何数字也只能给数字占位,若给的是整数,会转换为小数,且不论给什么数字都会保存六位小数
    %.Nf – 控制保留N位小数,默认是保留六位小数

msg = '%s今年%s岁,月薪:%s元!' % (name, age, money)
print(msg)
msg2 = '%s今年%d岁,月薪%.2f元!' % (name, age, money)
print(msg2)
  1. f-string

    在字符串的最前面(引号的前面)加f,就可以在字符串中通过{表达式}中表达式的结果来给字符串提供内容

    msg = f'{name}今年{age}岁!月薪:{money}元!'
    print(msg)
    
    a = 12.347
    b = 2.798
    print(f'{a} + {b} = {a+b}')  # 100 + 20 = 120
    
    # {表达式:.Nf} --- 控制保留N位小数。整数则是:.0f
    print(f'{a:.2f} + {b:.2f} = {a+b:.0f}')
    
    # {表达式:.N%} --- 控制数字显示为百分比,N为百分比数字的小数位数,若不写N,则默认六位小数。
    c = 0.98
    print(f'及格率:{c:.0%}')  # 及格率:98%
    
    # {表达式:,.Nf} --- 标准的金额拼接,逗号表将数字三位三位的隔开
    # 银行显示:357800 --> ¥357,800,00
    d = 357800
    print(f'¥{d:,.2f}')  # ¥357,800.00
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值