字符串

字符串

计算机基础

进制 : 2进制、 8进制、 10进制、 16进制

# 1) 10进制
"""
基数:0、1、2、3、4、5、6、7、8、9
进位:逢10进1
位权:10**(N-1) 123 = 1*100 + 2*10 + 3*1
表示方式:直接写
"""

# 2) 2进制
"""
基数:0、1
进位:逢2进1
位权:2**(N-1)  110 = 0*2**0 + 1*2**1 + 1*2**2 = 6
表示方式:0b、0B
"""

# 3) 8进制
"""
基数:0、1、2、3、4、5、6、7
进位:逢8进1
位权:8**(N-1)
表示方式:前缀0o、0O
"""

# 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)  1f -> f*16**0 + 1*16**1 = f + 16 = 31
表示方式:前缀0x、0X
"""

字符串和字符

# 1.什么是字符串(str)
"""
字符串是容器型数据类型(序列),将'' 或者"" 或者'''''' 或者"""""" 作为容器标志
里面每一个独立的符号就是字符串的一个元素
字符串不可变,字符串有序的(支持下标操作)
字符串的元素: 引号里面的每个符号都是字符串的元素,字符串的元素又叫字符
字符分为两种: 普通字符、 转义字符
"""

# 1) 空串(引号里说明什么都没有,空格也不行)
empty1 = ''
empty2 = ""
empty3 = ''''''
empty4 = """"""
# print(type(empty1), len(empty1))  # <class 'str'> 0
# print(type(empty2), len(empty2))  # <class 'str'> 0
# print(type(empty3), len(empty3))  # <class 'str'> 0
# print(type(empty4), len(empty4))  # <class 'str'> 0

# 2) 字符串的容器标志
# ''和"" 没有区别,''''''和""""""没有区别
# ''和"" 里面的内容不能通过直接回车换行,只能通过转义字符换行
# ''''''和"""""" 里面的内容可以直接通过回城换行
str1 = '床前明月光, \n疑是地上霜'  # 通过\n换行
str2 = '''床前明月光,
疑是地上霜
'''
# print(str1)
# print(str2)

# 2.字符串的元素 - 字符
"""
字符分为普通字符和转义字符两种
1)普通字符  -  在字符串中表示符号本身的字符
2)转义字符  -  使用\和其他符合一起来表示特殊功能和意义的字符
\n - (换行)
\t - 水平制表符(相当于tab键)
\' - 表示一个普通的单引号
\" - 表示一个普通的双引号
\\ - 表示一个普通的反斜杠
3)阻止转义 - 让字符串中的所有转义字符功能消失(让一个字符串中的每一个符号都是表示符号)
在字符串前加r/R: r'' 、 R''

4)转义字符 - 编码字符

"""
# str8 = r'\tabc\n123\'mn\"nn\\00'   # 阻止转义
# print(len(str8))  # 22
# print(str8)  # \tabc\n123\'mn\"nn\\00

# \u4位的16进制数 - 16进制数的编码值对应的字符  4e00 到 9fa5
# str9 = 'abc\u4e60123'
# print(str9)  # abc习123

# 3.编码值 - 字符编码
# 1)编码值 - 计算机在存储符号的时候其实存的是这个符号对应的固定数字,这个数字就是符号对应的编码值
# 2)编码表 - 将字符和数字一一对应的表
"""
ASCII码表 - 总共有128个符号,只有美国常用的符号,不包括中文
           数字在字母的前面,大写字母在小写字母前面(A-65,a-97),
           大写字母和小写字母之间有间隙

Unicode编码表(python) - Unicode编码表中包含ASCII码
                        包含了目前世界上所有国家、所有民族的所有语言符号(万国码);
                    中文编码范围: 4e00 - 9fa5
                    
chr(编码值)  -  获取编码值对应的字符
ord(字符)  -  获取指定字符的编码值 (凡是需要字符的地方,都给长度是1的字符串)
编码字符  -  \u4e00
"""
# print(chr(97))  # 'a'
# print(chr(0x4e18))  # 丘
# 获取所有的中文
# num = 0
# print(0x9fa5 - 0x4e00)
# for x in range(0x4e00, 0x9fa6):
#     num += 1
#     print(chr(x), end=' ')
#     if num % 30 == 0:
#         print()

# for x in range(0x1b00, 0x1b7f+1):
#     print(chr(x), end=' ')
# print()

# for x in range(0x2800, 0x28FF+1):
#     print(chr(x), end=' ')

# print(ord('陈'), ord('星'))  # ord() 获取编码值
# print(hex(38472))  # 将其他进制的数转换成十六进制数据
# print(bin(38472))  # 将其他进制的数转换成二进制数据

字符串的相关操作

  1. 查 - 字符串获取字符和列表获取元素的语法一样
message = 'you see see one day day!'
print(message[2])  # u
print(message[1:5])  # ou s
print(message[:-5:-1])  # !yad
# 一个空格是一个字符
str1 = 'abc 123'
print(str1[4])  # 1

一个转义字符是一个字符,长度是1

str2 = '\tabc\u4fa9 123'
print(str2[6])  # 1

for x in 'ab\u67afc':
    print(x)   # a、b、枯、c
  1. 运算符

字符串1 + 字符串2 - 将两个字符串拼接产生一个新的字符串

字符串 * N - 将字符串重复N此,产生一个新的字符串

print('abc'+'123')  # 'abc123'
print('abc' * 3)  # 'abcabcabc'
print('abc' == 'acb')  # False
print('a' == '\u0061')  # True

比较大小: > < >= <=

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

"""
是否是数字字符:'0' <= char <= '9'
是否是小写字母:'a' <= char <= 'z'
是否是大写字母:'A' <= char <= 'Z'
是否是字母: 'a' <= char <= 'z' or 'A' <= char <= 'Z'
是否是中文: '\u4e00' <= char <= '\u9fa5'
"""
print('abc' > 'cd')  # False

# 练习:提取一个字符串中所有的数字字符
# # 'sh函数78sk--好2o' -> '782'
str1 = 'sh函数78sk--好2o'
str2 = ''
for x in str1:
    if '0' <= x <= '9':
        str2 += x
print(str2)  # 782

str3 = ''
for y in str1:
    if '\u4e00' <= y <= '\u9fa5':
        str3 += y
print(str3)  # 函数好

result = ''.join([x for x in str1 if '\u4e00' <= x <= '\u9fa5'])
print(result)  # # 函数好
  1. in 和 not in

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

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

str(数据) - 将数据转换成字符串(任何类型的数据都可以转换成字符串,转换时,直接在数据的打印值外加引号)

print(str(100))  # '100'
print(str(12.5))  # '12.5'
list1 = [1, 2, 3]
print(str(list1))  # '[1, 2, 3]'

dict1 = {'name': '小明', 'age': 18}
print(str(dict1))  # "{'name': '小明', 'age': 18}"

dict2 = {"name": '小明'}
print(str(dict2))  # "{'name': '小明'}"

字符串的相关方法

字符串.join(序列) - 将序列中的元素使用指定字符串连接,产生一个新的字符串(序列中的元素必须是字符串)

names = ['小明', '张三', '李四']

result = ''.join(names)
print(result)  # 小明张三李四

result = ' '.join(names)
print(result)  # 小明 张三 李四

result = '和'.join(names)
print(result)  # 小明和张三和李四

message = 'abc'
print('.'.join(message))  # a.b.c

num = [10, 9, 78, 67]
str1 = ''.join([str(x) for x in num])
print(str1)  # 1097867

list1 = ['name', 23, True, '你好', '哈哈']
str2 = '+'.join([x for x in list1 if type(x) == str])
print(str2)  # name+你好+哈哈

split

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

字符串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 ', '?']

print('abca123aamna'.split('a'))  # ['', 'bc', '123', '', 'mn', '']

str2 = 'abc12mn12xy12==12++'
print(str2.split('12', 2))  # ['abc', 'mn', 'xy12==12++']

replace

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

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

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

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

作业

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

str1 = input('输入一个字符串:')
str2 = str1[1::2]
print(str2)

2输入用户名,判断用户名是否合法(用户名长度6~10位)

str1 = input('输入用户名:')
if 6 <= len(str1) <= 10:
    print('用户名合法')
else:
    print('用户名不合法')

3输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)

str1 = input('输入用户名:')
for x in str1:
    if ('0' <= x <= '9') or ('a' <= x <= 'z' or 'A' <= x <= 'Z'):
        continue
    else:
        print('用户名不合法')
        break
else:
    print('用户名合法')

4输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

str1 = input('请输入用户名:')
if 'A' <= str1[0] <= 'Z':
    for x in str1:
        if ('0' <= x <= '9') or ('a' <= x <= 'z' or 'A' <= x <= 'Z'):
            continue
        else:
            print('用户名不合法')
            break
    else:
        print('用户名合法!')
else:
    print('用户名不合法!')

5.输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串

str1 = input('输入一个字符串:')
print(''.join(x for x in str1 if '0' <= x <= '9'))

6输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出

# 一:
str1 = input('输入一个字符串:')
print(str1.upper())
# 二:
str1 = input('输入一个字符串:')
print(''.join(chr(ord(x) - 32) if 'a' <= x <= 'z' else x for x in str1))

7输入一个小于1000的数字,产生对应的学号

str1 = input('输入一个小于1000的数字:')
if len(str1) == 1:
    print('学号为:', 'py190100' + str1)
elif len(str1) == 2:
    print('学号为:', 'py19010' + str1)
else:
    print('学号为:', 'py1901' + str1)

8输入一个字符串,统计字符串中非数字字母的字符的个数

str1 = input('输入一个字符串:')
print(len(str1)-len([x for x in str1 if '0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z']))

9输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串

str1 = input('输入一个字符串:')
len1 = len(str1)
print(''.join(['+' if index == 0 or index == len1 - 1 else str1[index] for index in range(len1)]))

10输入字符串,获取字符串的中间字符

11写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)

str1 = 'how are you? Im fine,Thank you!'
str2 = 'are'
len1 = len(str2)
for index in range(len(str1)):
    if str1[index: index + len1] == str2:
        print(index)
        break

12获取两个字符串中公共的字符

str1 = 'how are you? Im fine,Thank you!'
str2 = 'are'
str3 = ''
for x in str1:
    if x in str2 and x not in str3:
        str3 += x
print(str3)
上一篇:KMP算法(字符串匹配问题)


下一篇:B1029/A1048 旧键盘损坏了,在输入一段文字时坏了的键不可以正常使用,现给出应输入的一段文字,和实际输出的文字,找出坏掉的键。