day7
字典
1.获取
语法:字典名[key],获取指定key对应的value
dict[key]
2.修改或添加
语法:字典名[key] = 值
#方式二:update(),更新,合并字典
#注意:dict1.update(dict2),将dict2合并到dict1
#方式三:setdefault(key,default),如果default定义,则添加一对键值对,
# 如果省略default,则添加的键值对为:key:None
#get(key,default),如果key存在,则返回对应的value
#如果key不存在,如果省略default,则返回None,但是如果未省略default,则返回default
#3.删
#方式一:pop(key):根据指定的key删除键值对,返回值为被删除的key对应的value
#方式二:del
del dict1["bob"]
print(dict1)
#方式三:clear(),清空
dict1.clear()
print(dict1) #{}
#4.查
dict1 = {"zhangsan":50,"lisi":99,"jack":100,"bob":66}
#a.len():获取字典中键值对的对数
print(len(dict1))
#b.keys():获取字典中所有的key
print(dict1.keys())
#c.values():获取字典中所有的value
print(dict1.values())
#d.items():获取字典中所有的键值对
print(dict1.items())
#5.其他
#a.copy()
#b.dict.fromkeys(序列):了解,序列可以是列表,元组,
r0 = dict.fromkeys(["a","b"])
print(r0) #{'a': None, 'b': None}
#6.遍历字典
dict1 = {"zhangsan":50,"lisi":99,"jack":100,"bob":66}
#方式一:直接遍历 ******
for key in dict1:
print(key,dict1[key])
#方式二:enumerate,很少用
# for i,key in enumerate(dict1):
# print(i,key,dict1[key])
#方式三:keys(),了解,更多使用方式一
for key in dict1.keys():
print(key,dict1[key])
#方式四:values(),通过key获取value结果是唯一的,但是通过value获取key结果不是唯一的
for value in dict1.values():
print(value)
#方式五:items(),获取key-value对 ******
for key,value in dict1.items():
print(key,value)
集合
#1.创建
#1.{}默认表示字典,并不是集合
#注意:1.无序的,2.可以存放不同类型的数据 3.不允许存放重复元素【去重】
set1 = {14,"faf",True,14,14,14}
print(set1)
print(type(set1))
#2.set()
#2.增
#a.add()
#注意1:如果元素已经存在,则添加失败
#注意2:通过add向集合中添加元素,只能添加不可变的数据类型
#b.update(),更新
#注意:通过update向集合中添加元素,只能添加可迭代对象【容器】,添加的时候打碎加入
#3.删
#a.remove(x),删除指定的元素,删除集合中不存在的
#注意:删除集合中不存在的元素,则会报错,为KeyError【字典中key不存在时】
# s1.remove(20) #KeyError: 20
# print(s1)
#b.discard(x),删除指定的元素,删除集合中不存在的元素,不会发生错误
#c.pop(),随机删除集合中的一个元素
#4集合间的运算
#一、符号表示
s1 = {1,2,3}
s2 = {3,4,5}
#1.交集
print(s1 & s2)
#2.并集
print(s1 | s2)
#3.不同时包含于s1和s2的元素
print(s1 ^ s2) #{1, 2, 4, 5}
#4.集合s1中包含但是集合s2中不包含的元素
print(s1 - s2)
#二、系统功能
#|
newset1 = s1.union(s2)
print(newset1)
#&
newset1 = s1.intersection(s2)
print(newset1)
#-
newset1 = s1.difference(s2)
print(newset1)
数学功能
> 内置功能
>
> - abs(x):返回数字的绝对值
> - (x>y)-(x<y):比较大小,
> - max(x1,x2,…):返回给定参数的最大值
> - min(x1,x2,…):返回给定参数的最小值
> - pow(x,y):求x的y次方的值
> - round(x,n):返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数
>
> 导入math模块 import math;
>
> - ceil(x):返回x的上入整数,不能直接访问,需要通过math访问,即math.ceil(18.1)
>
> - floor(x):返回x的下入整数,同ceil的用法
>
> - modf(x):返回x的整数部分和小数部分,两部分的数值符号与x相同,整数部分以浮点型表示,同ceil的用法
>
> - sqrt(x):返回数字x的平方根,数字可以为负数,返回类型为实数【浮点型】,同ceil的用法
随机数功能
import random
#1.random.choice(iterable):从一个可迭代对象中随机获取一个数据
n1 = random.choice([4,5,6,7,"aa","bbb",True]) #列表
print(n1)
n1 = random.choice((4,5,6,7,"aa","bbb",True)) #元组
print(n1)
n1 = random.choice("fahjghjga")
print(n1)
#注意:前闭后开
n1 = random.choice(range(1,100))
print(n1)
#2.random.randint(start,end):从一个指定区间内获取一个数据
#注意:闭区间
n2 = random.randint(1,100)
print(n2)
#3.random.randrange(start,end,step),类似于range(start,end,step)的使用
#练习:产生一个4~10之间的随机数
print(random.choice(range(4,11)))
print(random.randint(4,10))
print(random.randrange(4,11))
#4.random.random():获取0~1之间的随机数,结果为浮点型
print(random.random())
print(round(random.random(),2))
#练习:产生一个20~100之间的随机数,包含浮点型
#[0,1]--->[0,80]---->[20,100]
print(random.random() * 80 + 20)
print(random.randint(20,100) + random.random())
#5.random.uniform()
print(random.uniform(20,100))
第7天:字典元组作业
必做题
-
声明一个列表,在列表中保存6个学生的信息
students = [ {'name': '小花', 'age': 19, 'score': 90, 'gender': '女', 'tel': '15300022839'}, {'name': '明明', 'age': 20, 'score': 40, 'gender': '男', 'tel': '15300022838'}, {'name': '华仔', 'age': 18, 'score': 90, 'gender': '女', 'tel': '15300022839'}, {'name': '静静', 'age': 16, 'score': 90, 'gender': '不明', 'tel': '15300022428'}, {'name': 'Tom', 'age': 17, 'score': 59, 'gender': '不明', 'tel': '15300022839'}, {'name': 'Bob', 'age': 18, 'score': 90, 'gender': '男', 'tel': '15300022839'} ] #(1) 统计不及格学生的个数 count=0 for stu in students: if stu["score"]<60: count+=1 print(count) #(2) 打印不及格学生的名字和对应的成绩 count=0 for stu in students: if stu["score"]<60: count+=1 print("姓名:"+stu["name"],"成绩:%d" % (stu["score"])) print("一共%d人" % (count)) #(3) 统计未成年学生的个数 count=0 for stu in students: if stu["age"]<18: count+=1 print(count) #(4) 打印手机尾号是8的学生的名字 for stu in students: if int(stu["tel"])%10==8: print("姓名:" + stu["name"]) #或者 for stu in students: if stu["tel"][-1]=="8": print(stu["name"]) #(5) 打印最高分和对应的学生的名字 score=[] for stu in students: score.append(stu["score"]) maxscore=max(score) print(maxscore) for stu in students: if stu["score"]==maxscore: print("姓名:" + stu["name"], "成绩:%d" % (stu["score"])) #(6) 删除性别不明的所有学生(这个地方有个坑,跳不出来的话大家可以在群里套路,或者等老师的解答) 有坑 **************** for stu in students[:]: if stu["gender"]=="不明": students.remove(stu) print(students) #或者 newList=[] for stu in students: if stu["gender"] !="不明": newList.append(stu) print(newList) #(7) 将列表按学生成绩从大到小排序(选做) for i in range(len(students)-1): for j in range(len(students)-1-i): if students[j]["score"] > students[j + 1]["score"]: students[j], students[j + 1] = students[j + 1], students[j] print(students)
(1) 统计不及格学生的个数
(2) 打印不及格学生的名字和对应的成绩
(3) 统计未成年学生的个数
(4) 打印手机尾号是8的学生的名字
(5) 打印最高分和对应的学生的名字
(6) 删除性别不明的所有学生(这个地方有个坑,跳不出来的话大家可以在群里套路,或者等老师的解答)
(7) 将列表按学生成绩从大到小排序(选做) -
写出你对今日授课内容中有疑问的地方(或者觉得有困难的知识点)
选做题
1.已知字符串:“this is a test of Python”
a.统计该字符串中字母s出现的次数
b.取出子字符串“test”
c.采用不同的方式将字符串倒序输出【面试题】
d.将其中的"test"替换为"exam"
#a.统计该字符串中字母s出现的次数
count=0
str1="this is a test of Python"
for i in str1:
if i =="s":
count+=1
print(count)
#或者
print(str1.count("s"))
#b.取出子字符串“test”
str2=str1[10:14]
print(str2)
#c.采用不同的方式将字符串倒序输出【面试题】
newStr1=str1[::-1]
print(newStr1)
#或者
list2=[]
for i in str1:
list2.append(i)
list2.reverse()
newStr1="".join(list2)
print(newStr1)
#或者
s2=""
i=len(str1)-1
while i >=0:
s2+=str1[i]
i-=1
print(s2)
#或者
list1=list(str1)
list1.reverse()
s3="".join(list1)
print(s3)
#d.将其中的"test"替换为"exam"
print(str1.replace("test","exam"))
2.已知字符串 a = “aAsmr3idd4bgs7Dlsf9eAF”,要求如下
a.请将a字符串的大写改为小写,小写改为大写
b.请将a字符串的数字取出,并输出成一个新的字符串
c.请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例 {‘a’:4,‘b’:2}
d.输出a字符串出现频率最高的字母
e.请判断 'boy’里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,则输 出False
#a.请将a字符串的大写改为小写,小写改为大写
print(a.swapcase())
#b.请将a字符串的数字取出,并输出成一个新的字符串
b=[i for i in a if i.isdigit()]
c="".join(b)
print("c:",c)
#或者
for i in a:
if i.isdigit():
b+=i
print(b)
#c.请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例 {'a':4,'b':2}
c=a.lower()
dict1={}
for i in c:
if i not in dict1:
dict1[i]=1
else:
dict1[i]+=1
print(dict1)
#d.输出a字符串出现频率最高的字母
c=a.lower()
dict1={}
for i in c:
if i not in dict1:
dict1[i]=1
else:
dict1[i]+=1
print(dict1)
maxnum=max(dict1.values())
for j in dict1:
if dict1[j]==maxnum:
print(j)
#或者
count=0
for i in a:
if a.count(i)>count:
count=a.count(i)
for j in a:
if a.count(j)==count:
print(j)
break
#请判断 'boy'里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,则输 出False
b="boy"
count=0
for i in b:
if i in a:
count+=1
if count==3:
print(True)
else:
print(False)
#或者
strSet=set(a)
strSet.update("boy")
if len(strSet)==len(set(a)):
print(True)
else:
print(False)
3.写代码,已知变量,name = "gouguoQ “,请按照要求实现每个功能
a.移除name变量对应值的两边的空格,并输出移除后的内容
b.判断name变量对应的值是否以"go"开头,并输出结果
c.判断name变量对应的值是否以"Q"结尾,并输出结果
d.将name变量对应的值中的"o",替换为"p",并输出结果
e.将name变量对应的值根据"o"分割,并输出结果
g.将name变量对应的值变大写,并输出结果
h.将name变量对应的值变成小写,并输出结果
i.请输出name变量对应的值的第二个字符
j.请输出name变量对应的值的前三个字符
k.请输出name变量对应值的后2个字符
l.请输出name变量中的值"Q的索引的位置
m.获取子序列,仅不包含最后一个字符,如:woaini则获取woain root则获取roo
n.利用下划线将列表li = [‘gou’, ‘guo’, ‘qi’]的每一个元素拼接成字符串gou_guo_qi
#a.移除name变量对应值的两边的空格,并输出移除后的内容
print(name.strip())
#b.判断name变量对应的值是否以"go"开头,并输出结果
if name.index("go")==0:
print("以go开头")
#
print(name.startswith("go"))
#c.判断name变量对应的值是否以"Q"结尾,并输出结果
if name.index("Q")==len(name)-1:
print("以Q结尾")
print(name.endswith("go"))
#d.将name变量对应的值中的"o",替换为"p",并输出结果
print(name.replace("o","p"))
#e.将name变量对应的值根据"o"分割,并输出结果
print(name.split("o"))
#g.将name变量对应的值变大写,并输出结果
print(name.upper())
#h.将name变量对应的值变成小写,并输出结果
print(name.lower())
#i.请输出name变量对应的值的第二个字符
print(name[1])
#j.请输出name变量对应的值的前三个字符
print(name[:3])
#k.请输出name变量对应值的后2个字符
print(name[(len(name)-2):len(name)])
print(name[-2:])
#i.请输出name变量中的值"Q的索引的位置
print(name.index("Q"))
print(name.find("Q"))
#m.获取子序列,仅不包含最后一个字符,如:woaini则获取woain root则获取roo
new=name[0:len(name)-1]
print(new)
new=name[:-1]
#n.利用下划线将列表li = ['gou', 'guo', 'qi']的每一个元素拼接成字符串gou_guo_qi
li = ['gou', 'guo', 'qi']
newStr="_".join(li)
print(newStr)
4.用三个元组表示三门学科的选课学生姓名(一个学生可以同时选多门课)
(1) 求选课学生总共有多少人
(2) 求只选了第一个学科的人的数量和对应的名字
(3) 求只选了一门学科的学生的数量和对应的名字
(4) 求只选了两门学科的学生的数量和对应的名字
(5) 求选了三门学生的学生的数量和对应的名字
pythons = ('stu1', 'stu2', 'stu6', 'stu7', 'stu9')
h5s = ('stu1', 'stu3', 'stu6', 'stu8', 'stu9')
javas = ('stu1', 'stu2', 'stu4', 'stu5', 'stu8', 'stu9')
#(1) 求选课学生总共有多少人
total_stus=set(pythons+h5s+javas)
print(total_stus)
print(len(total_stus))
#(2) 求只选了第一个学科的人的数量和对应的名字
first_course_stus=set(pythons)-set(h5s)-set(javas)
print(first_course_stus)
print(len(first_course_stus))
#(3) 求只选了一门学科的学生的数量和对应的名字 ******
'''
1.合并所有元祖
2.查看元组中每个人出现的次数
3.次数为1的只选了一门课
'''
all_tuple=pythons+h5s+javas
print(all_tuple)
stu_dict={}
for name in all_tuple:
if name not in stu_dict:
stu_dict[name]=1
else:
stu_dict[name]+=1
print(stu_dict)
one_dict={}
for k,v in stu_dict.items():
if v==1:
one_dict[k]=v
print(len(one_dict))
print(one_dict)
#(4) 求只选了两门学科的学生的数量和对应的名字 **********
two_dict={}
for k,v in stu_dict.items():
if v==2:
two_dict[k]=v
print(len(two_dict))
print(two_dict)
#(5) 求选了三门学生的学生的数量和对应的名字
thr_dict={}
for k,v in stu_dict.items():
if v==3:
thr_dict[k]=v
print(len(thr_dict))
print(thr_dict)