当前位置:   article > 正文

(头歌)第七章集合与字典作业_python第7章集合与字典作业

python第7章集合与字典作业

第1关:字符串去重排序

  1. ls = list(set(input())) # 字符串转集合去重,再转为列表
  2. ls.sort() # 列表排序
  3. print(''.join(ls)) # 列表中的字符串元素连接为一个字符串

第2关:列表去重 

任务描述

输入一系列以逗号分隔的英文人名,其中包含重复的名字,请将其中重复的名字去掉,输出包含不重复人名的列表,名字出现顺序与输入顺序相同。

  1. name_list = input().split(',') # 将输入的人名分割成列表
  2. result = []
  3. for name in name_list:
  4. if name not in result:
  5. result.append(name) # 如果名字不在结果列表中,则加入
  6. print(result)

第3关:猜年龄

任务描述

美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。” 请编程输出当年维纳的年龄。

  1. for age in range(11, 23):
  2. age_3 = age ** 3 # 年龄的立方
  3. age_4 = age ** 4 # 年龄的4次方
  4. num_1 = age_3 // 1000 # 4位数的千位数字
  5. num_2 = age_3 % 1000 // 100 # 4位数的百位数字
  6. num_3 = age_3 % 100 // 10 # 4位数的十位数字
  7. num_4 = age_3 % 10 # 4位数的个位数字
  8. num_5 = age_4 // 100000 # 6位数的十万位数
  9. num_6 = age_4 % 100000 // 10000 # 6位数的万位数
  10. num_7 = age_4 % 10000 // 1000 # 6位数的千位数
  11. num_8 = age_4 % 1000 // 100 # 6位数的百位数
  12. num_9 = age_4 % 100 // 10 # 6位数的十位数
  13. num_0 = age_4 % 10 # 6位数的个位数
  14. if (num_1 != num_2 != num_3 != num_4 != num_5 != num_6 != num_7 != num_8 != num_9 != num_0) and (age_4 > 100000):
  15. print(age)
  16. break

第4关:集合的属性、方法与运算

任务描述

将用户输入用空格分隔的一系列地名创建集合MySet,输入一个正整数 n,你将被要求读入 n 个输入(输入形式如下所示),每得到一个输入后,根据输入进行操作。

  1. n = int(input()) # 输入一个正整数 n
  2. name = input() # 吉林,湖北,湖南
  3. MySet = set(name.split())
  4. MyList = name.split()
  5. for i in range(n):
  6. ls = input().split() # 输入命令及参数,之间用空格分隔
  7. if ls[0] == 'print': # 如要输入的命令是“print”,输出字典
  8. print(sorted(list(MySet)))
  9. elif ls[0] == 'update': # 如要输入的命令是“update”,更新ls[1]表示的键对应的值
  10. MySet.update(set(ls[1:]))
  11. elif ls[0] == 'add': # 如要输入的命令是“add”,增加一个键值对,题目确保输入的键在字典中不存在
  12. MySet.add(ls[1])
  13. elif ls[0] == 'del': # 如要输入的命令是“del”,删除字典中指定的键值对,键不存在时返回“键不存在”
  14. MySet.discard(ls[1])
  15. elif ls[0] == 'clear': # 如要输入的命令是“clear”,清空字典中全部元素
  16. MySet.clear()

第5关:集合介绍

李白是一个社区大学的老师,一天,他让学生小明计算一下温室里植物的平均高度。

平均高度 = 不同高度的和 / 不同高度的数量

  1. def average(array):
  2. set1 = set(array)# 将重复元素删除
  3. num = len(set1)# 计算初数量的总数
  4. Sum = 0
  5. for i in set1:# 循环计算出总数
  6. Sum+=i
  7. return f"{(Sum / num):.3f}"
  8. #你的代码写在这里list里面现在是整形的元素
  9. if __name__ == '__main__':
  10. arr = list(map(int, input().split())) # map()函数用于将列表中的每个元素都转换为整数
  11. result = average(arr)
  12. print(result)

第6关:手机销售统计

任务描述

sale2018.csv
sale2019.csv 文件中包含有2018和2019手机销售榜单数据(市场份额百分数),请根据要求升序输出分析结果:

1.输入'1'时,以列表形式在两行中分别输出2019年和2018年上榜品牌

2.输入'2'时,以列表形式输出2019年和2018年都上榜的品牌

3.输入'3'时,以列表形式输出2019年和2018年上榜的所有品牌

4.输入'4'时,以列表形式输出2019年新上榜品牌

5.输入'5'时,以列表形式输出2019年新上榜和落榜品牌

  1. with open('step7/sale2019.csv', 'r', encoding='utf-8') as data2019:
  2. sale2019 = [[line.strip().split(',')[0], float(line.strip().split(',')[1])] for line in data2019]
  3. with open('step7/sale2018.csv', 'r', encoding='utf-8') as data2018:
  4. sale2018 = [[line.strip().split(',')[0], float(line.strip().split(',')[1])] for line in data2018]
  5. set2019 = set([x[0] for x in sale2019])
  6. set2018 = set([x[0] for x in sale2018])
  7. select = input()
  8. if select == '1':
  9. print(sorted(set2019),sorted(set2018),sep='\n')
  10. elif select == '2':
  11. print(sorted(list(set2019&set2018)))
  12. elif select == '3':
  13. print(sorted(list(set2019|set2018)))
  14. elif select == '4':
  15. print(sorted(list(set2019-set2018)))
  16. elif select == '5':
  17. print(sorted(list(set2019^set2018)))

第7关:集合添加元素

应用你的知识帮助你的好朋友小明,小明喜欢集邮,他有大量的来自不同国家的邮票,他决定数一下他的集邮册中共有来自多少个不同国家的邮票,他请你帮忙,你一个一个的把N张邮票拿出来,找出共有多少个不重复的国家。

  1. # 接下来的N行,每行输入一张邮票来自哪一个国家的名字
  2. N = int(input())# 输入邮票的总数
  3. list1 = []# 输入国家的名称
  4. for i in range(N):
  5. a = input()
  6. list1.append(a)
  7. set1 = set(list1)
  8. print(len(set1))

第8关:列表嵌套字典的排序

任务描述

第一行输入一个正整数 N,随后的N 行各输入一个人的姓名和年龄,中间用空格分隔(形如 “Tom 18” ),将字符串转为形如 {"name":"Tom","age":18} 的字典,按顺序加入到列表中,得到一个元素为字典的列表,分别根据年龄和姓名对其排序输出。

  1. n=int(input())# 输入人数的总数
  2. d={}# 定义一个空的字典,用来存放人的数据
  3. ls= []# 定义一个列表来存放数据
  4. a = {}# 用来存放输入的数据
  5. for i in range (n):# 通过循环来输入人的基本信息
  6. a[i]=input().split()
  7. d["name"] = a[i][0]# 姓名
  8. d["age"] = int(a[i][1])# 年龄
  9. ls.append(d.copy()) # 将个人的数据存放进入列表中
  10. def cmp1(a):
  11. return a['age'] #返回字典的年龄
  12. def cmp2(a):
  13. return a['name']# 返回字典的姓名
  14. ls.sort(key = cmp1)# 排序的过程
  15. print(ls)
  16. ls.sort(key = cmp2)
  17. print(ls)

第9关:绩点计算

任务描述

平均绩点计算方法:

  1. (课程学分1*绩点+课程学分2*绩点+......+课程学分n*绩点)/(课程学分1+课程学分2+......+课程学分n)

用户循环输入五分制成绩和课程学分,题目测试数据保证至少有一组或以上合法数据输入。输入‘-1’时结束输入,计算学生平均绩点。等级与绩点对应关系如下表:

  1. dic={'A':4.0,'A-':3.7,'B+':3.3,'B':3.0,'B-':2.7,'C+':2.3,'C':2.0,'C-':1.5,'D':1.3,'D-':1.0,'F':0}
  2. num=0
  3. nf=0
  4. while True:
  5. socre=input()
  6. if socre == '-1':
  7. break
  8. f=int(input())
  9. num+=dic.get(socre)*f
  10. nf+=f
  11. print(f'{num/nf:.2f}')

第10关:通讯录(MOD)

要求编写程序 输出字典原始数据,再调用menu函数输出用户选择界面 (1)输入‘3’ 进行修改学生信息,输入姓名,如果该姓名已存在,则继续输入电话,学院信息,并输出“Success”的提示信息,如果不存在,给出“No Record”提示信息。 无论是否修改成功,结束后需要输出操作后的字典数据。 (2)如果输入其他选项,无需读入姓名,直接输出“ERROR”。

  1. def menu():
  2. print('''\n欢迎使用PYTHON学生通讯录
  3. 1:添加学生
  4. 2:删除学生
  5. 3:修改学生信息
  6. 4:搜索学生
  7. 5:显示全部学生信息
  8. 6:退出并保存''')
  9. dic={'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}
  10. print(dic)
  11. menu()
  12. N = int(input())
  13. if N == 3:
  14. s = input()
  15. if s in dic:
  16. dic[s] = [input(),input()]
  17. print("Success")
  18. else:
  19. print("No Record")
  20. print(dic)
  21. else:
  22. print("ERROR")

第11关:字典增加元素

任务描述

现有字典:

  1. dict1 = {'赵小明': '13299887777', '特明朗': '814666888', '普希京': '522888666', '吴小京': '13999887777'}

尝试向其中加入一个键值对,键和值在两行里输入,如果输入的键在字典中已经存在,则输出“您输入的姓名在通讯录中已存在”,如输入的键在字典中不存在则把键和值加入到字典中。操作完成后输出字典中所有键值对。

  1. dict1 = {'赵小明': '13299887777', '特明朗': '814666888', '普希京': '522888666', '吴小京': '13999887777'}
  2. a = input()
  3. b = input()
  4. if a not in dict1:
  5. dict1[a] = b
  6. for i in dict1:
  7. print(i+':'+dict1[i])
  8. else:
  9. print('您输入的姓名在通讯录中已存在')

第12关:字典的属性、方法与应用

任务描述

将用户输入用逗号分隔的一系列人名做为键,用户输入的逗号分隔的手机号做为值,创建字典MyDict,输入一个正整数 n,你将被要求读入 n 个输入(输入形式如下所示),每得到一个输入后,根据输入进行操作。

  1. n = int(input())
  2. name = input().split(',')
  3. telnumber = input().split(',')
  4. dic = dict(zip(name, telnumber))
  5. for i in range(n):
  6. order = input().split()
  7. if order[0] == 'key':
  8. print([x for x in dic])
  9. elif order[0] == 'value':
  10. print([dic[x] for x in dic])
  11. elif order[0] == 'print':
  12. print(dic)
  13. elif order[0] == 'clear':
  14. dic.clear()
  15. elif order[0] == 'add':
  16. dic[order[1]] = order[2]
  17. elif order[0] == 'update':
  18. dic.update({order[1] : order[2]})
  19. elif order[0] == 'del' :
  20. if order[1] in dic:
  21. del dic[order[1]]
  22. else:
  23. print('键不存在')

第13关:查询省会

任务描述

有诗云:
两湖两广两河山,五江云贵福吉安,四西二宁青甘陕,还有内台北上天。 中国各省、直辖市、自治区和特别行政区的字典数据如下:

  1. capitals = {'湖南':'长沙','湖北':'武汉','广东':'广州','广西':'南宁','河北':'石家庄','河南':'郑州','山东':'济南','山西':'太原','江苏':'南京','浙江':'杭州','江西':'南昌','黑龙江':'哈尔滨','新疆':'乌鲁木齐','云南':'昆明','贵州':'贵阳','福建':'福州','吉林':'长春','安徽':'合肥','四川':'成都','西藏':'拉萨','宁夏':'银川','辽宁':'沈阳','青海':'西宁','海南':'海口','甘肃':'兰州','陕西':'西安','内蒙古':'呼和浩特','台湾':'台北','北京':'北京','上海':'上海','天津':'天津','重庆':'重庆','香港':'香港','澳门':'澳门'}`

设计程序,接收用户输入的省、直辖市、自治区和特别行政区名称,输出对应的省会名称,当输入错误时输出“输入错误”。程序可以重复接收用户输入,直接输入回车时退出程序。

  1. capitals = {'湖南': '长沙', '湖北': '武汉', '广东': '广州', '广西': '南宁', '河北': '石家庄', '河南': '郑州', '山东': '济南', '山西': '太原', '江苏': '南京',
  2. '浙江': '杭州', '江西': '南昌', '黑龙江': '哈尔滨', '新疆': '乌鲁木齐', '云南': '昆明', '贵州': '贵阳', '福建': '福州', '吉林': '长春',
  3. '安徽': '合肥', '四川': '成都', '西藏': '拉萨', '宁夏': '银川', '辽宁': '沈阳', '青海': '西宁', '海南': '海口', '甘肃': '兰州', '陕西': '西安',
  4. '内蒙古': '呼和浩特', '台湾': '台北', '北京': '北京', '上海': '上海', '天津': '天津', '重庆': '重庆', '香港': '香港', '澳门': '澳门'}
  5. lis1 = []
  6. lis2 = []
  7. while True:
  8. city = input()
  9. if len(city) == 0:
  10. break
  11. else:
  12. lis1.append(city)
  13. for i in lis1:
  14. if i in capitals:
  15. lis2.append(capitals[i])
  16. else:
  17. print('输入错误')
  18. for j in lis2:
  19. print(j)

第14关:英汉词典

任务描述

你从武汉搬到美国生活,这里的人都讲英语,你的英语不好,好在你有一个程序,可以把英语译成中文,帮助你与人沟通。 本关所用文件及路径:'step15/dicts.txt' 下述文件仅用于本地查看文件格式,数据与本关文件不完全相同: dicts.txt

(注意:词典文件没有精校,存在部分格式不一致的问题,处理时根据空格切分一次,只把英文和中文解释切分开。)

  1. import string
  2. def read_to_dic(filename):
  3. """读文件每行根据空格切分一次,作为字典的键和值添加到字典中。
  4. 返回一个字典类型。
  5. """
  6. my_dic = {}
  7. with open('/data/bigfiles/dicts.txt', 'r', encoding='utf-8') as f:
  8. date = f.readlines()
  9. for x in date:
  10. x = x.replace('生存,','生存 ') #之前打开数据集有点问题,在这里用代码修改了一下数据集
  11. x = x.strip().split(maxsplit=1)
  12. my_dic.update({x[0]: x[1]})
  13. return my_dic
  14. def sentence_to_lst(sentence):
  15. """将句子里的's 用 is 替换,n't 用 not 替换。
  16. 所有符号替换为空格,再根据空格切分为列表。
  17. 返回列表。
  18. """
  19. sentence = sentence.replace("n't", ' not')
  20. sentence = sentence.replace("'s", ' is')
  21. for x in string.punctuation:
  22. sentence = sentence.replace(x, ' ')
  23. sentence_lst = sentence.split()
  24. return sentence_lst
  25. def query_words(sentence_lst, my_dic):
  26. """接收列表和字典为参数,对列表中的单词进行遍历,
  27. 将单词字母转小写,到字典中查询单词的中文意义并输出。
  28. 若单词在字典中不存在,输出'自己猜'。
  29. """
  30. for word in sentence_lst:
  31. word = word.lower()
  32. print(word, my_dic.get(word, '自己猜'))
  33. if __name__ == '__main__':
  34. my_str = input()
  35. file = 'dicts.txt'
  36. dic = read_to_dic(file)
  37. lst = sentence_to_lst(my_str)
  38. query_words(lst, dic)

第15关:通讯录(添加)

任务描述

模拟通讯录的数据添加功能。

  1. def menu():
  2. print('''\n欢迎使用PYTHON学生通讯录
  3. 1:添加学生
  4. 2:删除学生
  5. 3:修改学生信息
  6. 4:搜索学生
  7. 5:显示全部学生信息
  8. 6:退出并保存''')
  9. dic={'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}

要求编写程序 首先输出字典原始数据,再调用menu函数输出用户选择界面,接下来读用户输入: (1) 输入‘1’ 进行添加学生,输入姓名,如果该姓名已存在,则输出“Fail”的提示信息,如果不存在,继续输入电话和所在学院。添加完毕后输出“Success”提示信息。 无论是否添加成功,结束后需要输出操作后的字典数据。 (2) 如果输入其他选项,无需再读姓名,直接输出“ERROR”。

  1. print({'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']})
  2. print()
  3. dict = {'张自强': ['12652141777', '材料'], '庚同硕': ['14388240417', '自动化'], '王岩': ['11277291473', '文法']}
  4. # 学生通讯录管理系统主界面
  5. def showMenu():
  6. print("欢迎使用PYTHON学生通讯录")
  7. print("1:添加学生")
  8. print("2:删除学生")
  9. print("3:修改学生信息")
  10. print("4:搜索学生")
  11. print("5:显示全部学生信息")
  12. print("6:退出并保存")
  13. # 选择输入的功能
  14. def getSelcet():
  15. selectNum = int(input())
  16. return selectNum
  17. # 实现序号1:添加学生信息
  18. def addstuInof():
  19. name = input()
  20. if name in dict:
  21. print('Fail')
  22. print(dict)
  23. else:
  24. stu_num = input()
  25. zuanye = input()
  26. dict[name] = [stu_num,zuanye]
  27. print('Success')
  28. print(dict)
  29. # 实现序号2:删除学生信息
  30. def delstuInof():
  31. name = input()
  32. if len(name) == 0:
  33. print("ERROR")
  34. else:
  35. del dict[name]
  36. print('Success')
  37. print(dict)
  38. # 实现序号3:修改学生信息
  39. def modifystuInfo():
  40. name = input()
  41. if name in dict:
  42. stu_num = input()
  43. zuanye = input()
  44. dict[name] = [stu_num,zuanye]
  45. print('Success')
  46. print(dict)
  47. else:
  48. print('No Record')
  49. print(dict)
  50. # 实现序号4:搜索学生信息
  51. def seckstuIofo():
  52. name = input()
  53. print(dict[name])
  54. # 实现序号5:显示全部学生信息
  55. def showstuInfo():
  56. print(dict)
  57. # 实现序号6 退出显示管理系统
  58. def exitSystem():
  59. pass
  60. # main主函数
  61. def main():
  62. showMenu()
  63. num = getSelcet()
  64. if num == 1:
  65. addstuInof()
  66. elif num == 2:
  67. delstuInof()
  68. elif num == 3:
  69. modifystuInfo()
  70. elif num == 4:
  71. seckstuIofo()
  72. elif num == 5:
  73. showstuInfo()
  74. elif num == 6:
  75. exitSystem()
  76. print("ERROR")
  77. main()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/712963
推荐阅读
相关标签
  

闽ICP备14008679号