Day 10 字符串综合用法

本文介绍了字符编码的ASCII和Unicode标准,以及Python中对字符和字符串的操作,包括获取字符编码、拼接字符串、查找子串、比较字符串、处理字符串方法等,并提供了相关示例代码。同时,文章包含了字符串格式化和相关编程作业,涉及字符串的奇数位提取、合法性检查、数字提取、大小写转换、学号生成等实践问题。
摘要由CSDN通过智能技术生成

Day 字符串综合用法

字符编码

  • 二极管,导通来控制电路,只有0和1两种状态,计算机存储数据只能存储数字的二进制补码

  • 计算机存储非数字数据时,将其数字化后再进行存储,每个字符对应一个数字,对应数字编码

  • ASCLL编码表就是128个字符,A - 65 ,a - 97 ,0 - 48,采用10进制进行标记,包括数字,字母和常见的英文输入法下的符号

  • Unicode编码表是对ASCLL编码表的拓展,包含了世界上所有的国家,所有的民族的语言符号,前128个字符和ASCLL表一样.中文编码范围是:4e00~9fa5(20000多个),一般采用十六进制进行标记,一般范围为 0000 - ffff,或者 0000 - FFFF

  • chr(编码值) - 获取编码值对应的字符

    print(chr(0x4e00))  # "一"
    print(chr(0x9fa5))  #"龥"
    print(chr(0x0045))   #"E"
    
  • ord(字符) - 获取指定字符对应的编码值,返回的是十进制

    print(ord("龥")) # '40869'
    print(ord("一")) # '19968'
    
  • hex(字符十进制) - 将字符十进制转换成十六进制

    print(hex(40869))  #0x9fa5
    print(hex(19968))  #0x4e00
    
  • 在ASCLL码中大小写差值为32,编码字符:\ u 4位的16进制编码值

    str2 = "\u0061,u0x6797"  #在字符串中,可以用\n加4位数的16进制编码值,来打印的是对应字符
    print(str2)
    

字符串查寻

  • 转义字符的长度为1

    str1 = "\thello \nworld! \u9fa5"
    print(len(str1))   # 16
    
  • 字符串获取字符的方法和列表获取元素的方法一样

字符串相关操作

  • 加法即拼接

    str1 = "hello"
    str2 = "你好"
    print(str1 + "   " + str2)  #hello   你好
    
  • 字符串乘法

    str4 = "a"
    print(str4 * 4) #aaaa
    
  • 字符串比较

    print("abc" == "bca")  # False
    # 比较第一个不相等的元素的大小,比较的是编码值大小
    # 数字  <  大写 < 小写 < 中文
    #是否是汉字: " \u4e00"   和  "\u9fa5"
    
  • in 和 not in 判断字符串1是否是字符串2的子串

    print("a" in 'abc')
    print("ab" in "abc")
    print("ac" in "abc")
    print(10 in [10, 20, 30])
    print([10, 20] in [10, 20, 30])   # 列表中的元素
    """
    True
    True
    False
    True
    False
    """
    
  • max() min() sorted() 对字符串进行操作时,都和编码值有关

  • len() 统计字符串长度 , str() 强制转换

  • eval() ,评估函数,可以去掉字符串的引号,变成实际元素数据类型

    a = eval("100")
    b = eval("abc") # 去掉之后还是字符串,所以评估不合格,会报错,除非前面存在abc的变量
    b1 = eval("10+20")
    print(b1)
    

字符串相关方法

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

    list1 = ["小明","账单"]
    result = "+".join(list1)
    print(result)  #小明+账单
    result = "and".join(list1)   #返回的是一个新字符串
    print(result)  #小明and账单
    
  • 字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数

  • 字符串1.split(字符串2,N) - 将字符串1以字符串2为切割点切割,N可以表示切割多少次

    msg = " how are you , i an fine ,thank you!  and you"
    result = msg.split("you")  # 返回值是列表,切割点会消失
    print(result)
    
  • 字符串1.replace(字符串2,字符串3,N) - 将字符串1中的字符串2,替换成字符串3,N表示替换次数

    msg = " how are you , i an fine ,thank you!  and you"
    result = msg.replace("you","him")
    print(result)   # how are him , i an fine ,thank him!  and him
    
  • 字符串.strip() 去点字符串前后的空白,中间加入参数,或者字符串,可以去掉前后重复出现的字符串

  • isupper(),islower(),isdigit(),分别判断字符串是否全部是纯大写,小写和数字,必须是全部

    char = "s"
    if char.isupper() or char.islower():   #判断是否是字母
        print("True")
    else:
        print("False")
    
  • upper(),将字符串中的小写字母全部转换成大写字母

  • lower(),将字符串中的大写字母全部转换成小写字母

格式字符串

  • 以%为标志额格式字符串
"""
语法: 包含格式占位符的字符串 %(数据1,数据2,数据3,,,,,,)
后面括号中的数据必须和前面字符串中的占位符一一对应
最核心的是,格式占位符有哪些
常见的格式占位符
%s    -   可以给任何类型的数据占位
%d   -    任何数字占位 ,浮点数会自动转换成整数,再拼接字符串
%f    -    可以给任何数字占位,浮点数占位符,默认保存6位小数
%.Nf  -   可以控制浮点数小数点后的位数,保留多少位小数,有一个小数点
原来是多少位,就拼多少位,用%s可以实现
"""
  • 以f+字符串的格式字符串
# f - string
"""
在引号的前面加f,就可以用大括号中加入变量,来传入数据
"""
msg = f"{name}今年{age}岁了!"
print(msg)
  • 控制数字显示形式
a = 10.23
b = 3254.215
print(f"{a:.2f} + {b :.2f} = {a + b :.0f}")
# { 表达式 :.2f}  控制保留多少位小数
# { 表达式 :.N%}  显示百分号,N控制需小数位数
c = 0.98
print(f"及格率:{c:.0%}") #表示98%
# 标准的金额拼接,无法控制逗号的隔开位置
d = 10000000
print(f"${d:,.2f}")  # $10,000,000.00  ,2表示小数点控制位数

作业 一

  1. 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)

    例如: 输入’abcd1234 ’ 输出’bd24’

    str1 = "输入一个字符串,打印所有奇数位上的字符"
    print([str1[i] for i in range(len(str1)) if i % 2 != 0])
    
  2. 输入用户名,判断用户名是否合法(用户名长度6~10位)

    usr_name = input("请输入你的用户名:")
    print(["合法" if 6 <= len(usr_name) <= 10 else "不合法"])
    
  3. 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)

    例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法

    usr_name = input("请输入你的用户名:")
    print(["合法" if ("a" <= usr_name <= "z" or "0" <= usr_name <= "9") else "不合法"])
    
  4. 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串

    例如:输入**‘abc1shj23kls99+2kkk’** 输出:‘123992’

    str1 = input("请输入一个字符串:")
    new_str= ""
    for i in str1:
        if "0" <= i <= "9":
            new_str += i
    print(new_str)
    
  5. 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)

    例如: 输入**‘a2h2klm12+’ ** 输出 ‘A2H2KLM12+’

    str1 = input("请输入一个字符串:")
    new_str = str1.upper()
    print(new_str)
    
    str1 = input("请输入一个字符串:")
    # new_str = str1.upper()
    # print(new_str)
    new_str =""
    for i in str1:
        if "a" <= i <= "z":
            i = i.upper()
        new_str += i
    print(new_str)
    
  6. 输入一个小于1000的数字,产生对应的学号

    例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**

    str1 = input("请输入您的代号(1000以内):")
    str2 = "py1901000"
    while True:
        if 0 <= int(str1) <= 9:
            result = str2[:-1] + str1
            print("您的学号是:", result)
            break
        elif 9 <= int(str1) <= 1000:
            result = str2[:-len(str1)] +str1
            print("您的学号是:", result)
            break
        else:
            str1 = input("输入错误,请重新输入您的代号(1000以内):")
    
  7. 输入一个字符串,统计字符串中非数字字母的字符的个数

    例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**‘===’** 输出:3

    str1 = input("请输入一个字符串:")
    # isdigit()  判断是否全是数字字符
    count = 0
    for i in str1:
        if not (i.isdigit() or i.isupper() or i.islower()):
            count += 1
    print(f"不是数字字母字符一共有:{count}个")
    
  8. 输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串

    例如: 输入字符串**‘abc123’, 输出’+bc12+'**

    str1 = input("请输入一个字符串:")
    str2 = str1[1:-1]
    result = "+" + str2 + "+"
    print(result)
    
  9. 输入字符串,获取字符串的中间字符

    例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**

    str1 = input("请输入一个字符串:")
    if len(str1) % 2 == 0:
        result = str1[len(str1) // 2 - 1] + str1[len(str1) // 2]
        print(f"中间字符为:{result}")
    else:
        result = str1[(len(str1) - 1) // 2]
        print(f"中间字符为:{result}")
    
  10. 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)

    例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8

    str1 = "how are you? Im fine, Thank you!"
    str2 = "you"
    if str2 in str1:
        for i in range(len(str1)):
            if str1[i] == str2[0] and str1[i+1] == str2[1] and str1[i+2] == str2[2]:
                print(i)
                break
    else:
        print("字符串1不包含字符串2")
    
  11. 获取两个字符串中公共的字符

    例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3

    str1 = "abc123"
    str2 = "huak3"
    str3 =""
    for i in str1:
        if i in str2:
            str3 += i
    print(f"公共字符是:{str3}")
    
  12. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

    例如: ‘abc’ — 不合法 ‘Mabc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法

    usr_name = input("请输入你的用户名:")
    for i in range(10):
        # print(i)
        if str(i) in usr_name:
            result = True
            break
        else:
            result =False
    # print(result)
    print(["合法" if ((usr_name.isupper or usr_name.islower()) and  result and usr_name[0].isupper()) else "不合法"])
    

    作业 二

    1. 编写一个程序,交换指定字典的key和value。

      #例如:dict1={'a':1, 'b':2, 'c':3}  -->  dict1={1:'a', 2:'b', 3:'c'}  
      dict1 = {'a': 1, 'b': 2, 'c': 3}
      list1 = list(dict1.keys())
      list2 =list(dict1.values())
      print(list1)
      print(list2)
      dict1.clear()
      for i in range(len(list1)):
          dict1[list2[i]] = list1[i]
      print(dict1)
      
    2. 编写一个程序,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串

      #例如: 传入'12a&bc12d-+'   -->  'abcd'     
      str1 = '12a&bc12d-+'
      str2 = ""
      for i in str1:
          if i.isupper() or i.islower() :
              str2 += i
      print(str2)
      
    3. 写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母

      #例如: 'abc' -> 'Abc'   '12asd'  --> '12asd'
      str1 = "1cn"
      print(str[str1[0].upper() + str1[1:] if str1[0].isupper() or str1[0].islower() else str1 ])
      
    4. 写程序实现endswith的功能,判断一个字符串是否已指定的字符串结束

      """
         例如: 字符串1:'abc231ab' 字符串2:'ab' 函数结果为: True
              字符串1:'abc231ab' 字符串2:'ab1' 函数结果为: False
      """
      str1 = 'abc231ab'
      str2 = 'aCb'
      print([True if str2 == str1[-len(str2):] else False])        
      
    5. 写程序实现isdigit的功能,判断一个字符串是否是纯数字字符串

      """
         例如: '1234921'  结果: True
               '23函数'   结果: False
               'a2390'    结果: False
      """
      str1 = '1234a921'
      flag = True
      for i in str1:
          if not ("0" <= i <= "9"):
              flag = False
              break
      print([True if flag else False])
      
    6. 写程序实现upper的功能,将一个字符串中所有的小写字母变成大写字母

      """
          例如: 'abH23好rp1'   结果: 'ABH23好RP1'   
      """
      str1 = 'abH23好rp1'
      str2 = ""
      for i in str1:
          if i.islower():
              result = i.upper()
              str2 += result
          else:
              str2 += i
      print(str2)
      
    7. 写程序获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值

      """
         例如: 序列:[-7, -12, -1, -9]    结果: -1   
              序列:'abcdpzasdz'    结果: 'z'  
              序列:{'小明':90, '张三': 76, '路飞':30, '小花': 98}   结果: 98
      """
      st =[-7, -12, -1, -9]
      if type(st) == dict:
          print("序列最大值为:",max(st.values()))
      else:
          print("序列最大值为:",max(st))
      
    8. 写程序实现replace函数的功能,将指定字符串中指定的旧字符串转换成指定的新字符串

      """
          例如: 原字符串: 'how are you? and you?'   旧字符串: 'you'  新字符串:'me'  
          结果: 'how are me? and me?'
      """
      str1 = 'how are you? and you?'
      str2 = 'you'
      str3 = 'me'
      str4 = ""
      count = 0
      while True:
          if str1[count] == str2[0] and str1[count + 1] == str2[1] and str1[count + 2] == str2[2]:
              str4 += str3
              count += 3
          else:
              str4 += str1[count]
              count += 1
          if count == len(str1):
              break
      print(str4)
      
    9. 写程序实现split的功能,将字符串中指定子串作为切割点对字符串进行切割

      """
      例如:原字符串: 'how are you? and you?'   
      切割点: 'you'  结果: ['how are ', '? and ', '?']
      """
      list1 = []
      str1 = 'how are you? and you?'
      str2 = 'you'
      str3 = ""
      count = 0
      while True:
          if str1[count] == str2[0] and str1[count + 1] == str2[1] and str1[count + 2] == str2[2]:
              list1.append(str3)
              count += 3
              str3 = ""
          else:
              str3 += str1[count]
              print(str3)
              count += 1
          if count == len(str1):
              list1.append(str3)
              break
      print(list1)
      
    10. 用思维导图(xmind)总结四大容器:列表、字典、元组、集合
      在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值