210129
一,前情回顾
1.元组(tuple)
不可变的列表
语法:(元素1, 元素2,)
不可变;有序
元素:任何类型的数据
t1 = (78,)
t2 = 10, 89, 78, 34
t3 = (80, 100)
x, y = t3
x, *y = t2
2.集合
可变、无序
s1 = {1, 23, 4}
s2 = set()
交集(&)、并集(|)、差集(-)、对称差集(^)
子集(>=、<=)、真子集(>、<)
s1 = {100, 200, 300, 400}
s2 = {1, 2}
print(s1 > s2) # False (>不是在判断大小)
s1 = {100, 200, 300, 1, 2}
s2 = {1, 2}
print(s1 > s2) # True
print(s1 >= s2) # True
s1 = {100, 200, 300, 1, 2}
s2 = {1, 2, 3}
print(s1 > s2) # False
s1 = {1, 2, 3}
s2 = {1, 2, 3}
print(s1 > s2) # False
print(s1 >= s2) # True
3.字符串
‘’、""、’’’’’’、""""""
不可变;有序
普通字符和转义字符
\n、\t、"、’、\ (任何转义字符的长度都是1)
\u4位的16进制编码值 - 编码字符
4.字符编码
ASCII和Unicode
4e00 ~ 9fa5
print('\u4eff')
print(chr(89))
print(ord('二')) # 20108
print('azzzz' > 'b') # False
获取字符
二,作业解析
1.输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
# 例如: 输入'abcd1234 ’ 输出‘bd24’
str1 = 'abcd1234'
print(str1[1::2]) # bd24
2.输入用户名,判断用户名是否合法(用户名长度6~10位)
user_name = 'hs234s42js'
if 6 <= len(user_name) <= 10:
print('合法')
else:
print('不合法')
3.输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
user_name = 'hs234s42js'
for x in user_name:
if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):
print('不合法')
break
else:
print('合法')
4.输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: 'abc' — 不合法 '123' — 不合法 'abc123' — 不合法 'Abc123ahs' — 合法
user_name = 'hs234s42js'
if 'A' <= user_name[0] <= 'Z':
num_count = 0
for x in user_name[1:]:
if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):
print('不合法')
break
else:
if '0' <= x <= '9':
num_count += 1
else:
if num_count > 0:
print('合法')
else:
print('不合法')
else:
print('不合法')
5.输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
str1 = 'abc1shj23kls99+2kkk'
new_str1 = ''
for x in str1:
if '0' <= x <= '9':
new_str1 += x
print(new_str1) # '123992'
6.输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
# 方法一
str1 = 'a2h2klm12+'
new_str1 = str1.upper()
print(new_str1) # A2H2KLM12+
# 方法二
A: 65 a: 97 32
B: 66 b: 98 32
C: 67 c: 99 32
# 小写字母的编码值 - 32 == 对应的大写字母的编码值
str1 = 'a2h2klm12+'
new_str1 = ''
for x in str1:
if 'a' <= x <= 'z':
u_code = ord(x) - 32
u = chr(u_code)
new_str1 += u
else:
new_str1 += x
print(new_str1) # A2H2KLM12+
7.输入一个小于1000的数字,产生对应的学号
例如: 输入'23',输出'py1901023' 输入'9', 输出**'py1901009' 输入'123',输出'py1901123'
23 -> 023; 9->009; 123->123
45 -> 045; 1->001; 234->234
方法一:
print('abc'*3) # abcabcabc
print('0'*3) # 000
num = input('请输入1000以内的数字:')
num = '1'
result = 'py1901' + (3 - len(num)) * '0' + num
print(result)
方法二:
result = 'py1901' + num.zfill(3)
print(result) # py1901023
8.输入一个字符串,统计字符串中非数字字母的字符的个数
str1 = 'anc2+93-sj胡说'
count = 0
for x in str1:
if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):
count += 1
print(count)
9.输入字符串,将字符串的开头和结尾变成’+’,产生一个新的字符串
'abc123' -> '+bc12+'
str1 = 'abc123'
result = '+'+str1[1:-1]+'+'
print(result) # +bc12+
10.输入字符串,获取字符串的中间字符
# 偶数个: N//2-1, N//2
# 奇数个: N//2
str1 = 'abc123'
l = len(str1)
if l & 1:
print(str1[l//2])
else:
print(str1[l//2-1: l//2+1])
11.写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
print('abbcd'.find('b')) # 1
print('abbcd'.find('bc')) # 2
print('abbcd'.index('bd')) # 报错
print('abbcd'.find('bd')) # -1
str1 = 'how are you? i am fine! and you?'
str2 = 'you'
n = len(str2)
for x in range(len(str1) - n + 1):
if str1[x:x+n] == str2:
print(x)
break
else:
print('没有!')
12.获取两个字符串中公共的字符
str1 = 'aabc123'
str2 = 'huak3'
str3 = ''
for x in str1:
if x in str2 and x not in str3:
str3 += x
print(str3) # 'a3'
print('a' in 'abc') # True
print('ab' in 'abc') # True
print('ac' in 'abc') # False
三,字符串格式化
语法:包含格式占位符的字符串 % (数据1,数据2,数据3,…)
注意:a.数据必须和占位保持一致 b.当只需要一个数据的时候,()可以省略的
%s - 字符串(任何类型的数据都可以使用%s占位)
%d - 整数
%f - 浮点数
%.Nf
name = input('请输入姓名:')
name = '小明'
age = int(input('请输入年龄:'))
age = 18
message = 'xxx今年xx岁'
# 方法一: 字符串拼接
message = name+'今年'+str(age)+'岁'
print(message)
# 方法二:字符串格式占位符
money = 165263.9878
message = '%s今年%d岁, 月薪:%.2f' % (name, age, money)
print(message)
# 方法三:f-string
message = f'{name}今年{age}岁,月薪:{money}'
print(message)
num = 10
message = f'{num * 10}abc'
print(message)
# 格式1: :.nf - 控制浮点数保留n位小数
message = f'月薪:{money:.2f}'
print(message)
# 格式2: :字符>长度 - 将数据通过前面加指定字符填充到指定长度
num = 19
message = f'学号:{num:0>4}'
print(message) # 学号:0019
message = f'{num:a>5}'
print(message) # aaa19
message = f'{num:a<5}'
print(message) # 19aaa
message = f'{num:0>8.2f}'
print(message) # 00019.00
# 1000,000,000,000
money = 1829300000
message = f'{money:,}'
print(message) # 1,829,300,000
num = 0.45
message = f'{num:%}'
print(message) # 45.000000%
message = f'{num-0.1:.2%}'
print(message) # 45.00%