05字典和字符串

编程入门 行业动态 更新时间:2024-10-27 13:31:15

05字典和<a href=https://www.elefans.com/category/jswz/34/1771434.html style=字符串"/>

05字典和字符串

一、字典

1.列表:保存多个意义相同的数据,使用列表(列表是有序的)

# 使用列表
stu = ['小明', 23, '男', 170, 75, 80]
print(stu[0])
print(stu[-1])

2.字典:保存多个意义不同的数据,使用字典

stu = {‘name’:‘小明’,‘gender’:‘男’,‘age’:18,‘height’:97,‘体重’:40}
①容器型数据类型(可以放for in 后)
②{}作为容器的标志,里面有多个键值对用,隔开;{键1:值1,键2:值2,键3:值3}
③字典是可变的(支持增删改);字典是无序的(顺序不影响结果,不支持下标操作)

print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})     # True

④字典的元素:由键和值组成,其中值才是真正想要保存的数据,键是用来对值进行区分和说明的

⑤元素是键值对,键必须是不可变类型的数据(字符串、数字、布尔、元组,一般使用字符串作为键),可变不行(列表、字典);同一字典键必须唯一。
⑥值可以是任何类型的数据

class1 = {'1':'2','age':32,'teacher':{'1':'fr','tel':'1232342'},'student':[{},{},{}]}

1)空字典

dict1 = {}
print(dict1) #{}

2)字典是无序的

print({'a':10,'b':20} =={'b':20,'a':10}) #True

3)键是不可变类型的数据

dict2 = {'a':10,10:10,True:30,(10,20):90}
print(dict2) #可打印
dict3 = {'a':10,10:10,True:30,[10,20]:90}
print(dict3) #报错,因为列表是可变的

4)键是唯一的

dict4 = {'a':10,'b':20,'a':30}
print(dict4) #{'a': 30, 'b': 20}

3.字典的增删改查

1.查–获取字典的值

①查单个–获取某一个值
语法:字典[键]–获取字典中指定键对应的值(如果键不存在,会报错)

dog = {'name':'旺财','age':3,'breed':'土狗','color':'黄色',6:0}
print(dog[6])#0
print(dog['name'])#旺财
#案例:定义一个变量保存一个班级的信息
class1 = {'name': 'python2301','location':'21教''teacher': {'name': '余婷', 'age': 18, 'tel': '13678192302'},'headTeacher':{'name':'萍姐','age':18,'tel':'110'}'students': [{'name': 'stu1', 'age': 19, 'school': '清华大学', '专业': '经济', 'contact': {'name': '张三', 'tel': '110'}},{'name': 'stu2', 'age': 28, 'school': '北京大学', '专业': '大数据', 'contact': {'name': '李四', 'tel': '192'}},{'name': 'stu3', 'age': 22, 'school': '厦门大学', '专业': '计算机', 'contact': {'name': '王五', 'tel': '920'}},{'name': 'stu4', 'age': 17, 'school': '南京大学', '专业': '物联网', 'contact': {'name': '赵六', 'tel': '2833'}},]
}
#获取班级名称
print(class1['name'])
#获取讲师名字
print(class1['teacher']['name'])
#获取所有学生名字和对应学校
for x in class1['students']:print(x['name'],x['school'])
#获取未成年学生的名字
for x in class1['students']:a = x['age']if a < 18:print(x['name'])
#获取所有学生的联系人的电话
for x in class1['students']:print(x['contact']['tel'])
#获取第一个学生的联系人的电话
for x in class1['students']:print(x['contact']['tel'])break#自己做的
print(class1['students'][0]['contact']['tel'])#讲的
#案例:定义一个变量保存一个班级的信息
class1 = {'name': 'python2301','location': '21教','lecturer': {'name': '余婷','age': 18,'gender': '女','tel': '13678192302'},'headTeacher': {'name': '萍姐','age': 18,'tel': '110'},'all_student': [{'name': 'stu1', 'age': 18, 'tel': '119', '专业': '电子商务', 'score': 78, 'linkman': {'name': '张三', 'tel': '82223111'}},{'name': 'stu2', 'age': 23, 'tel': '8293', '专业': '计算机软件', 'score': 100, 'linkman': {'name': '李四', 'tel': '829933'}},{'name': 'stu3', 'age': 30, 'tel': '918111', '专业': '数学', 'score': 96, 'linkman': {'name': '小明', 'tel': '11929203'}},{'name': 'stu4', 'age': 16, 'tel': '827222', '专业': '数学', 'score': 99,'linkman': {'name': '王五', 'tel': '8628101'}}]}# 1) 获取班级名字 
print(class1['name'])#python2301
# 2)获取班级的位置
print(class1['location']) #21教
# 3)获取讲师的名字
print(class1['lecturer']['name']) #余婷
# 4)获取班主任的电话
print(class1['headTeacher']['tel']) #110
# 5)获取第一个学生的专业
print(class1['all_student'][0]['专业']) #电子商务
# 6)获取所有学生的名字
list = class1['all_student']
list1 = []
for x in list:names = x['name']list1.append(names)
print(list1) #['stu1', 'stu2', 'stu3', 'stu4']
# 7)获取所有学生的联系人名字
list = class1['all_student']
list2 = []
for x in list:names = x['linkman']['name']list2.append(names)
print(list2) #['张三', '李四', '小明', '王五']
# 8)获取未成年学生的联系人电话
list = class1['all_student']
list3 = []
for x in list:if x['age'] < 18:tels = x['linkman']['tel']list3.append(tels)
print(list3) #['8628101']

②字典.get(键) – 获取字典中指定键对应的值(如果键不存在,不会报错,返回None)

dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'price': 10}
print(dog.get('age')) #3
print(dog.get('name'))#旺财
print(dog.get('weight'))#None

​ 字典.get(键,默认值) --获取字典中指定键对应的值(如果键不存在,不会报错,返回指定值)

dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'price': 10}
print(dog.get('age',1)) #3
print(dog.get('name','无名氏')) #旺财
print(dog.get('weight',0)) #0

③for 变量 in 字典:

​ 循环体(变量依次获取的是字典所有的键)

dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'price': 10}
for x in dog:print(x, dog[x]) #name,旺财

2.增、改

1)字典[键] = 值 --当键存在就修改这个键对应的值;当键不存在的时候就添加键值对

dog = {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'price': 10}
print(dog)      # {'name': '旺财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'price': 10}dog['name'] = '财财'
print(dog)      # {'name': '财财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'price': 10}dog['gender'] = '母狗'
print(dog)      # {'name': '财财', 'age': 3, 'breed': '土狗', 'color': '黄色', 'price': 10, 'gender': '母狗'}

2)字典 字典.setdefault(‘键’,‘值’) 没有的就添加,有的不会修改

#案例
goods_list = [{'id': 'g001', 'price': 89, 'count': 100},{'id': 'g001', 'price': 207, 'count': 50, 'discount': 0.9},{'id': 'g001', 'price': 102, 'count': 33},{'id': 'g001', 'price': 25, 'count': 897, 'discount': 0.88}
]
for x in goods_list:x.setdefault('discount',1)
print(goods_list)#方法2
sum1 = 0
for x in good_list:sum1 += x['price']* x.get('discount',1)*x['count']

3.删–删除键值对

1)del 字典[键] --删除字典中指定键对应的键值对

dog = {'name':'旺财','age':3,'breed':'土狗','color':'黄色',6:0}
del dog['color']
print(dog) #{'name':'旺财','age':3,'breed':'土狗',6:0}

2)字典.pop(键) --取走字典中指定键对应值

dog = {'name':'旺财','age':3,'breed':'土狗','color':'黄色',6:0}del dog['breed']
print(dog)#{'name': '旺财', 'age': 3, 'color': '黄色', 6: 0}result = dog.pop('color')
print(dog,result)#{'name': '旺财', 'age': 3, 6: 0} 黄色

4.字典相关操作

1)in 和 not in:键 in 字典 -判断字典中是否存在指定的键值对

d1 = {'a': 10, 'b': 20, 'c': 30}
print('a' in d1)   #True
print('10' in d1)   #False

二、字符串(str)

1.定义

1.字符串是容器型数据类型,可以同时保存多个文字符号;将单引号或者双引号作为容器的标志,引号中的每个符号就是字符串中的每个元素
2.字符串是不可变的;字符串是有序的
print(‘abc’==‘bac’)#false
3.元素:引号中每个独立的符号(字符串的元素又叫字符)
可以是任何国家任何语言的符号,还可以是转义字符
转义字符–在特定的符号前加\来表示特殊功能或者特殊意义的符号
\n–换行
\t–水平制表符(相当于按了tab键)
\r–换行
'–表示一个普通的单引号
\“–表示一个普通的双引号
\–表示一个普通的反斜杠

str1 = '\\nabc'
print(str1)#\nabc

2.查-获取字符

1.查单个:字符串[下标]–获取指定下标对应的元素

str1 = '\thello world!'
print(str1[1])#h 转义字符为1个

2.遍历

"""
a.
for 变量 in 字符串:循环体
b.
for 变量 in range(len(字符串)):循环体
"""
str2 = 'abc123'
for x in str2:print(x)        # 'a'、'b'、'c'、'1'、'2'、'3'
"""

3.字符串相关操作

1.字符串加法运算–字符串拼接

# 案例:在字符串str4中每个字符后添加一个*
# str4 = 'abc'   -> 'a*b*c*'
str4 = 'abc'
new_str = ''
for x in str4:# x = 'a' new_str += 'a'+'*'  -> new_str += 'a*'  -> new_str = '' + 'a*' -> 'a*'# x = 'b' new_str += 'b' + '*' -> new_str += 'b*'  -> new_str = 'a*' + 'b*' -> 'a*b*'new_str += x + '*'
#案例
str1 = 'hello'
str2 = 'python'
str3 = str1 + ' ' + str2
print(str3)     # 'hello python'

2.字符串乘法运算

字符串N、N字符串–将字符串中的元素重复N次产生一个新的字符串

str1 = 'hello'
print(str1 * 3)     # 'hellohellohello'

3.字符串比较运算

比较第一对不相等元素编码值的大小,大写字母的编码值比小写字母的小
print(‘21’>‘198’)#true

已知字符x:
判断x是否是数字字符:‘0’<= x <= ‘9’
判断x是否是小写字母:‘a’<= x <= ‘z’
判断x是否是大写字母:‘A’<= x <= ‘Z’
判断x是否是字母:‘A’<= x <= ‘Z’ or ‘a’<= x <= ‘z’

# 案例:提取字符串中所有的数字字符
# 'sj23没说是你289sjsj 2=3-=29'   ->  '232892329'
str1 = 'sj23没说是你289sjsj 2=3-=29'
new_str = ''
for x in str1:if '0' <= x <= '9':new_str += x
print(new_str)      # '232892329'

4.in 和 not in

字符串1 in 字符串2 —判断字符串1是否是字符串2的子串(判断字符串2中是否包含字符串1)
str1 = ‘abc123’
print(‘ac’ in str1)#false
print(‘ab’ in str1)#true
print(‘a’ in str1)#true

三、作业

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

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

str = input('输入')
str1 = ''
for x in range(len(str)):if x % 2 != 0:str1 += str[x]
print(str1)#方法1str1 = ''
for x in range(1,len(str),2):str1 += str[x]
print(str1)#方法2

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

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

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

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

name = input('请输入用户名:')
count = 0
for x in name:if not ('a' <= x <= 'z' or 'A' <= x <= 'Z'or'0' <= x <= '9'):count += 1breakif count == 0print('合法')else:print('不合法')  

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

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

username = 'AJAs2-ss'
num_count = 0       # 数字字符的个数
other_count = 0     # 数字字母以外的符号的个数
if 'A' <= username[0] <= 'Z':for x in username:if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):other_count += 1breakelse:if '0' <= x <= '9':num_count += 1if num_count != 0 and other_count == 0:print(username, '合法')else:print(username, '不合法')
else:print(username, '不合法')    

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

例如:输入**‘abFc1shj2A3klBs99+2kDkk’** 输出:‘FABD’

str = input('字符串:')
str1 = ''
for x in str:if 'A' <= x <= 'Z':str1 += x
print(str1)

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

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

str1 = ''
str = input("请输入字符串")
for x in range(len(str)):if x == 0 or x == len(str)-1:str1 += '+'else:str1 += str[x]
print(str1)#方法1# 方法2
print('+' + str1[1:-1] + '+')

7.输入字符串,获取字符串的中间字符

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

str = input('请输入字符串')
count = len(str)
if count % 2 == 0:print(str[count//2-1],str[count//2])
else:print(str[count//2])

8.(难)写程序实现字符串函数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!'
count1 = len(str1)
count2 = len(str2)
for index in range(count1-count2 + 1):new_str = ''for i in range(count2):new_str += str1[index + i]if new_str == str2:print(index)break

9.获取两个字符串中公共的字符

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

str = 'abcaaa123'
str1 = 'huak3'
str2 =''
for x in str and str1:if x in str and str1:str2 += x
print(str2)#方法1str1 = 'abcaaa123'
str2 = 'huak3'
new_str = ''
for x in str1:if x in str2 and x not in new_str:new_str += x
print(new_str)#方法2

10.定义一个变量保存一个学生的信息,学生信心中包括:姓名、年龄、成绩(单科)、电话、性别

student1 = {'name':'李磊','age':12,'math':89,'tel':'1234353523','gender':'男'}

11.定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

message =[ {'name':'李磊','age':12,'math':59,'tel':'1823042554','gender':'男'},{'name':'李3','age':13,'math':49,'tel':'123489423','gender':'女'},
{'name':'李5','age':15,'math':69,'tel':'134742335','gender':'女'},
{'name':'李2','age':18,'math':89,'tel':'120983093'},
{'name':'李6','age':19,'math':97,'tel':'1234353500','gender':'男'},
{'name':'李4','age':22,'math':93,'tel':'123987098'}
]

1.统计不及格学生的个数

count = 0
for x in message:if x['math'] < 60:count += 1
print(count)

2.打印不及格未成年学生的名字和对应的成绩

for x in message:if x['math'] < 60 and x['age']<18:print(x['name'],x['math'])

3.求所有男生的平均年龄

sum1 = 0
count = 0
for y in message:message.setdefault('gender','')for x in message:if x['gender'] == '男':count += 1sum1 += x['age']
anver = sum1 / count
print(int(anver))

4.打印手机尾号是8的学生的名字

for x in message:if x['tel'][-1] == '8':print(x['name'])

5.打印最高分和对应的学生的名字

# 方法1:
max1 = students[0]['score']
for stu in students:if stu['score'] >= max1:max1 = stu['score']
print('5.最高分:', max1, '和对应的学生的名字:')
for stu in students:if stu['score'] == max1:print(stu['name'])# 方法2:
max1 = students[0]['score']
max_stu = [students[0]['name']]
for stu in students:if stu['score'] > max1:max1 = stu['score']max_stu = []max_stu.append(stu['name'])elif stu['score'] == max1:max_stu.append(stu['name'])print('5.最高分:', max1, '和对应的学生的名字:', max_stu)

6.删除性别不明的所有学生

message2 = []
for x in range(len(message)):if message[x]['gender'] != '':message2.append(message[x])
print(message2)

7.将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

四.数据伪造

from faker import Faker
faker = Faker(locale='zh_CN')
from random import randint

更多推荐

05字典和字符串

本文发布于:2024-02-11 06:47:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1679688.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   字典

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!