day8-字符串

01字符串和字符

  • 什么是字符串

    • 字符串是容器型数据类型(序列)、将‘’ 或者 ”“ 或者’’’ ‘’’ 或者”“” “”“作为容器标志
    • 里面每一个独立的符号就是字符串的一个元素
    • 字符串是不可变的 不支持增删改
    • 字符串是有序的 (支持下标操作)
    • 字符串的元素:引号里面的每个符号都是字符串的元素,字符串的元素又叫字符
    • 字符分为两种:普通字符和转义字符
    • 1)空串 (引号里什么也没有,空格也不行)
    empty1 = ''
    empty2 = ""
    empty3 = ''''''
    empty4 = """"""
    print(type(empty1),len(empty1))  # <class 'str'> 0
    
      1. 字符串的容器标志
    # ''和“”没有区别;’‘’‘’‘和“”“”“”没有区别
    # ’‘和""里面的内容不能通过直接回车换行,只能通过转义字符换行;
    # ‘’‘’‘’ 和“”“”“”里面得到内容可以直接通过回车换行
    # str1 = 'abc
    #        123'
    str2 = '''abc  
    123'''
    print(str2)
    # abc
    # 123
    
    str3 = 'abc,\n123'
    print(str3)
    # abc,
    # 123
    
  • 字符串的元素 - 字符

    • 字符分为普通字符和转义字符两种

    • 1)普通字符 - 在字符串中表示符号本身的字符

    • 2)转义字符 - 使用\和其他符号一起来表示特殊功能和意义的字符

      • \n - 换行
      • \t - 水平制表符(相当于tab)
      • \’ - 一个普通的‘
      • \" - 一个普通的“
      • \ - 一个普通的\
      1. 阻止转义 - 让字符串中所有的转义字符功能消失(让一个字符串中的每一个符号都表示符号本身)

      在字符串前加r/R : r’’, R’’ 例如:正则表达式

      1. 转义字符 - 编码字符
    str1 = '\tabc\n123'
    print(str1)
    # abc
    # 123
    #  abc
    # 123
    
    str2 = 'abc\'12'
    print(str2)  # abc'12
    
    str3 = "abc'12"
    print(str3)  # abc'12
    
    
    str4 = 'C:users\\name\\xiaoming\\next.txt'
    print(str4)
    str5 ='http://www.baidu.com'
    print(str5)
    
    str6 = r'C:users\name\xiaoming\next.txt'   # C:users\name\xiaoming\next.txt
    print(str6)
    
    
    # \u4位的16进制数  -  16进制的编码值对应的字符
    str7 = 'abc\u4e60123'  # abc习123
    print(str7)
    
  • 编码值 - 字符编码

    • 1)编码值 - 计算机在存储符号的时候七十存的是这个符号对应的固定数字。这个数字就是符号对应的编码值

    • 2)编码表 - 将字符和数字一一对应的表

    • ASCII码表 - 总共有128个符号,只有没有常用符号,不包括中文
      数字–大写字母(65)–小写字母(97),大小写字母有间隙

    • Unicode编码表(python) -Unicode编码表中包含ASCII码
      包含目前世界所有国家所有民族的所有语言符号(万国码)

    • 中文编码范围 - 4e00~9fa5

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

    • 2)ord(字符) - 获取指定字符的编码值(凡是需要字符的地方,都给长度是1的字符)

    • 3)编码字符 - \u4e00 (16进制)

    print(chr(97))   # a
    print(chr(0x4e00))  # 一
    print(chr(0x9fa5))  # 龥
    
  • 进制 - 计算机中数字常见进制有4种:2进制 8进制 10进制 16进制

    • 1)10进制

      • 基数:0 1 2 3 4 5 6 7 8 9
      • 进位:逢10进1
      • 位权:10**(n-1)
      • 表示方式:直接写
    • 2)2进制

      • 基数:0 1

      • 进位:逢2进1

      • 位权:2**(n-1)

      • 表示方式:0b / 0B

        print(0b110)   # 6
        
    • 3)8进制

      • 基数:0 1 2 3 4 5 6 7

      • 进位:逢8进1

      • 位权:8**(n-1)

      • 表示方式:0o /0O开头

        print(0o26)  # 22
        
    • 4)16进制

    • 基数:0 1 2 3 4 5 6 7 8 9 a/A b/B c/C d/D e/E f/F

    • 进位:逢16进1

    • 位权:16**(n-1)

    • 表示方式:0x / 0X开头

      print(0x1f)   # 31
      
      print(0x9fa5 - 0x4e00)
      # num = 0
      # for x in range(0x4e00,0x9fa5+1):
      #     num += 1
      #     print(chr(x),end=' ')
      #     if num % 30 ==0:
      #         print()
      
      
      print(ord('王'),ord('志'),ord('萍'))
      # hex()  把其他进制的数据转换为16进制
      print(hex(29579),hex(24535),hex(33805))  # 0x738b 0x5fd7 0x840d
      
      
      print('a123')
      print('\u0061123')   # a123  a--97 --61(16进制)--0061
      
      

02计算机基础

# 1.内存单位
# 位 (bit)   -  计算机内存最小单位
# 字节(byte)  1字节 = 8位   - 程序申请内存的最小单位
# 1Kb = 1024字节 2^10
# 1Mb = 1024Kb
# 1G = 1024Mb
# 1T = 1024G
# ...

03字符串相关操作

  • 1.查 - 字符串获取字符和列表获取元素的语法一样

    message = 'you see see one day day!'
    print(message[2],message[-1])
    
    # 一个空格是一个字符
    str1 = 'abc 123'
    print(str1[4])  # 1
    
    # 一个转义字符是一个字符,长度是1
    str2 = '\tabc\u4fa9 123'
    print(str2[6])  # 1
    
    # 切片
    print(message[1:5])  # ou s
    
    print(message[:-5:-1])  # !yad
    
    # 遍历
    for x in 'ab\u67afc':
        print(x)
    
  • 2.运算符

    • 字符串1 + 字符串2 - 将两个字符串拼接产生一个新字符串
    • 字符串 *N - 将字符串重复N次
    print('abc'+'123')  # abc123
    # 字符串 *N  - 将字符串重复N次
    print('abc' * 3)  # abcabcabc
    
    print('abc' == 'acb')  # False
    print('a' == '\u0061')  # True
    
    • 比较大小:> < >= <=

      两个字符串比较大小比较的是第一对不相等的字符的编码值的大小

      print('abc' > 'cd')   # False
      
      """
      判断数字: '0' <= char <= '9'
      判断小写字母:'a' <= char <= 'z'
      判断大写字母:'A' <= char <= 'Z'
      判断字母:'a' <= char <= 'z' or 'A' <= char <= 'Z'
      判断中文:'\u4e00' <= char <= '\u9fa5'
      """
      
      
      # 练习:提取一个字符串中所有的数字字符
      # 'sh函数78sk--2o'  -> '782'
      
      str3 = ''
      for x in 'sh函数78sk--2o':
          if '0' <= x <= '9':
              str3 += x
      
      print(str3)
      print(ord('9'))
      # 提取中文
      # 'sh函数78sk--好2o'  -> '函数好'
      str4 =''
      for x in 'sh函数78sk--好2o':
          if '\u4e00' <= x <= '\u9fa5':
              str4 += x
      print(str4)
      
      str5 = 'sh函数78sk--好2o'
      result = ''.join([x for x in str5 if '\u4e00' <= x <= '\u9fa5'])
      print(result)
      
  • 3.in 和 not in

    字符串1 in 字符串2 - 判断字符串2中是否包含字符串1 判断字符串是否是字符串2的子串

    print('abc' in 'a1b2c3')  # False
    print('abc' in 'abc123')  # True
    print('1' in 'abc123')  # True
    
  • 4.相关函数 len str

    str(数据) - 将数据转换成字符串(任何类型都可以转换成字符串)

    转换的时候直接在数据的打印值外加引号

    print(str(100))  # '100'
    list1 = [1,2,3]
    print(str(list1))   # '[1, 2, 3]'   ->  9个元素
    
    dict1 = {'name':'小明','age':18}
    print(str(dict1))  #  "{'name': '小明', 'age': 18}"
    
    dict2 = {"name":'小明'}
    print(dict2)  #  {'name': '小明'}  打印值是单引号
    print(str(dict2))  #   "{'name': '小明'}"
    
    
    func1 = lambda x: x*2
    print(func1)  # <function <lambda> at 0x00000292EDCC4168>
    print(str(func1))  # '<function <lambda> at 0x00000292EDCC4168>'
    

04 字符串相关方法

  • 1.字符串.join(序列) - 将序列中的元素使用指导字符串连接

    ​ 序列中的元素必须是字符串一个新的字符串

    names = ['小明', '张三', '李四']
    result = ''.join(names)
    print(result)   # 小明张三李四
    
    result = '+'.join(names)
    print(result)  # 小明+张三+李四
    
    message = 'abc'
    print('.'.join(message))   # a.b.c
    
    dict1 = {'name': 'hh', 'age': 12}
    print('.'.join(dict1))   # name.age
    
    num = [10,9,78,67]
    # print(''.join(num))  # TypeError: sequence item 0: expected str instance, int found
    result = ''.join([str(x) for x in num])
    print(result)   # 1097867
    
    
    list1 = ['name', 23, True, '你好', '哈哈']
    result = '+'.join([x for x in list1 if type(x) == str])
    print(result)  # name+你好+哈哈
    
  • 2.spilt - 切割

    • 字符串.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串1进行切割

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

      str1 = 'how are you? i am fine,thank you. and you?!'
      result = str1.split(' ')
      print(result)  # ['how', 'are', 'you?', 'i', 'am', 'fine,thank', 'you.', 'and', 'you?']
      
      result = str1.split('you')
      print(result)  # ['how are ', '? i am fine,thank ', '. and ', '?']
      
      # 最后一个是空串
      result = str1.split('!')
      print(result)  # ['how are you? i am fine,thank you. and you?', '']
      
      #
      str2 ='abc12mn12xy12==12++'
      print(str2.split('12',2))  # ['abc', 'mn', 'xy12==12++']
      
  • 3.replace

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

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

    str3 = 'how are you? i am fine,thank you. and you?!'
    result = str3.replace('you','me')
    print(result)  # how are me? i am fine,thank me. and me?!
    result = str3.replace('you','me',2)
    print(result)  # how are me? i am fine,thank me. and you?!
    

作业

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

    例如: 输入**'abcd1234 ’ ** 输出**‘bd24’**

    str1 = input('请输入字符串:')
    str2 = str1[1::2]
    print(str2)
    
  2. 输入用户名,判断用户名是否合法(用户名长度6~10位)

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

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

    str4 = input('请输入用户名:')
    flag = 0
    for i in range(len(str4)):
        if 'a' <= str4[i] <= 'z' or '0' <= str4[i] <= '9':
            flag = 1
        else:
            flag = 0
            break
    if flag:
        print('合法')
    else:
        print('不合法')
    
  4. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

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

    str4 = input('请输入用户名:')
    for i in range(1,len(str4)):
        if 'A' <=str4[0] <='Z' and ('a' <= str4[i] <= 'z' or '0' <= str4[i] <= '9'):
            continue
        else:
            print('不合法')
            break
    else:
        print('合法')
    
  5. 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串

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

    str5 = input('请输入一个字符串:')
    result = ''.join([x for x in str5 if '0' <= x <= '9'])
    print(result)
    
  6. 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)

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

    #F1
    str6 = input('请输入一个字符串:')
    print (str6.upper())
    
    
    #F2
    for i in str6:
        if 97 <= ord(i) <= 122:
            x = ord(i) - 32
            print(chr(x), end="")
        else:
            print(i, end="")
    print()
    
  7. 输入一个小于1000的数字,产生对应的学号

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

    nums = input('请输入小于1000的数字:')
    new_num = ''
    for i in range(3 - len(nums)):
        new_num += '0'
    print('python1'+new_num+nums)
    
  8. 输入一个字符串,统计字符串中非数字字母的字符的个数

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

    str7 = input('请输入字符串:')
    count = 0
    for i in range(1,len(str7)):
        if not 'a' <= str7[i] <= 'z' or '0' <= str7[i] <= '9':
            count += 1
    print(count)
    
  9. 输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串

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

    str8 = input('请输入字符串:')
    print('+'+str8[1:-1]+'+')
    
  10. 输入字符串,获取字符串的中间字符

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

str9 = input('请输入字符串:')
l = len(str9)
if l % 2:
    print(str9[len(str9) // 2])
else:
    print(str9[len(str9) // 2 -1: len(str9) // 2 + 1 ])
  1. 写程序实现字符串函数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'
#print(str1.find(str2))
#print(str1.index(str2))
result = str1.split(str2,1)
print(len(result[0]))

#index()方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
  1. 获取两个字符串中公共的字符

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

str1 = 'abc123'
str2 = 'huak3'

new_str = ''
for x in str1:
    if x in str2:
        new_str += x
print(new_str)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值