一、实验目的
- 掌握字典的创建、删除等基本操作;
- 掌握字典元素的访问方法;
- 掌握添加、删除和修改字典元素;
- 掌握字典和列表的嵌套使用;
- 掌握集合元素创建和删除;
- 掌握集合元素的添加与删除;
- 掌握集合的并集、交集与差集操作;
- 掌握利用字典、集合特性进行程序设计。
二、实验环境
Window10(x64),Python 3.8(x64),PyCharm Community Edition 2020.3.2(x64)
三、实验内容
1.设计三个字典dict_a、dict_b和dict_c,每个字典中存储了一个学生的信息,包括name和id,然后把这三个字典存储到一个列表student中,遍历这个列表,将其中每个人的所有信息都打印出来。
核心代码:
dict_a={'name':'杰杰','id':'01'}
dict_b={'name':'小明','id':'02'}
dict_c={'name':'小胡','id':'03'}
student = [dict_a, dict_b, dict_c]
for s in student:
print("姓名:", s['name'])
print("学号:", s['id'])
print()
结果示意图:
2.创建一个名为universities的字典,其中将三所大学作为键。对于每所大学,都创建一个字典,设置两个键province和type,分别保存该大学的省份和类型。最后对universities字典进行遍历,打印出每所大学及其省份和类型信息。
核心代码:
universities = {'清华大学': {'province': '北京', 'type': '综合性大学'},
'复旦大学': {'province': '上海', 'type': '综合性大学'},
'浙江大学': {'province': '浙江', 'type': '综合性大学'}}
for univ, info in universities.items():
print("学校名称:", univ)
print("所在省份:", info['province'])
print("学校类型:", info['type'])
print()
结果示意图:
3.用字典存储牛奶的价格信息,并根据牛奶的价格从低到高排序。运行结果可参考下图。
核心代码:
milk_prices = {'特仑苏': 20, '伊利': 18, '蒙牛': 15, '三元': 22}
print(milk_prices)
sorted_milk_prices = dict(sorted(milk_prices.items(), key=lambda item: item[1]))
print("按牛奶价格从低到高排序:", sorted_milk_prices)
结果示意图:
4.通过for循环创建201条数据,数据格式如下:
xiaoming1 xiaoming1@china.com pwd1
xiaoming2 xiaoming2@china.com pwd2
xiaoming3 xiaoming3@china.com pwd3
提示用户输入页码,当用户输入指定页码时,显示该页面内的数据(每页显示10条数据)。
核心代码:
data = []
for i in range(1, 202):
name = f'xiaoming{i}'
email = f'xiaoming{i}@china.com'
password = f'pwd{i}'
data.append((name, email, password))
page = int(input("请输入页码:"))
start_index = (page - 1) * 10
end_index = start_index + 10
for item in data[start_index:end_index]:
print(item[0], item[1], item[2])
结果示意图:
5.统计一段话的字符个数
"故今日之责任,不在他人,而全在少年。少年智则国智,少年富则国富,少年强则国强,少年独立则国独立,少年自由则国自由,少年进步则国进步,少年胜于欧洲,则国胜于欧洲,少年雄于地球,则国雄于地球。
核心代码:
# 创建文件并写入内容
with open('text.txt', 'w', encoding='utf-8') as file:
file.write("故今日之责任,不在他人,而全在少年。少年智则国智,少年富则国富,少年强则国强,少年独立则国独立,少年自由则国自由,少年进步则国进步,少年胜于欧洲,则国胜于欧洲,少年雄于地球,则国雄于地球。")
# 读取文件内容
with open('text.txt', 'r', encoding='utf-8') as file:
content = file.read()
# 统计字符个数
char_count = len(content)
print("字符个数:", char_count)
结果示意图:
6.建立水果集合,输入一个水果名,并判断是否在集合中,若没有在集合中,将它添加到水果集合中。
核心代码:
# 建立水果集合
fruits = {'苹果', '香蕉', '橘子', '梨'}
# 输入一个水果名
fruit_name = input('请输入一个水果名:')
# 判断是否在集合中
if fruit_name in fruits:
print(f'{fruit_name}已经在水果集合中了。')
else:
# 将它添加到水果集合中
fruits.add(fruit_name)
print(f'{fruit_name}已经成功添加到水果集合中。')
# 打印最新的水果集合
print('最新的水果集合为:', fruits)
结果示意图:
7.编写程序,使用字典存储学生信息,学生信息包括学号和姓名,请根据学生学号从小到大输出学生信息。
核心代码:
# 学生信息字典
students = {
'001': '张三',
'003': '李四',
'002': '王五',
'005': '赵六',
'004': '刘七'
}
# 根据学生学号从小到大排序
sorted_students = sorted(students.items(), key=lambda x: x[0])
# 输出学生信息
print('学生信息按学号从小到大排序:')
for student_id, student_name in sorted_students:
print(f'学号: {student_id},姓名: {student_name}')
结果示意图:
8.请使用字典编写一个程序,让用户输入一个英文句子,然后统计每个单词出现的次数。
(1) 英文单词的分隔符可以是空格、标点符号或者特殊符号,使用字符串replace()方法来可以讲标点符号替换为空格,以提高获取单词的准确性。
(2)用split()方法可以拆分字符串,生成单词的列表。
(3)逐个读取列表中单词,并重复下面的操作。
如果字典map1的key中没有这个单词,向字典中添加元素,关键字是这个单词,value是1,即map1[word]=1;如果字典中key中有这个单词,则该单词计数加1,即map1[word]+=1;
当列表中的单词全部读取完后,每个单词出现的次数会被放在字典map1中,map1的key是单词,map1的value是单词出现的次数。
为了得到比较好的输出结果,将字典转换为列表后,排序输出。
核心代码:
import string
# 获取用户输入的英文句子
sentence = input('请输入一个英文句子:')
# 将标点符号替换为空格
for p in string.punctuation:
sentence = sentence.replace(p, ' ')
# 拆分字符串生成单词列表
words = sentence.split()
# 统计每个单词出现的次数
word_count = {}
for word in words:
if word not in word_count:
word_count[word] = 1
else:
word_count[word] += 1
# 将字典转换为列表并排序
sorted_word_count = sorted(word_count.items(), key=lambda x: x[0])
# 输出每个单词出现的次数
print('每个单词出现的次数:')
for word, count in sorted_word_count:
print(f'{word}: {count}')
结果示意图:
9.课程成绩统计:求每门课的最高分、最低分和平均分。
假设有9个学生,将每个学生的语、数、英三门课的成绩信息用字典存放,然后将所有学生的信息用列表存放。即在列表中存放若干个字典。最后借助于字典和列表的操作来实现求课程最高分、最低分和平均分。运行结果可参考下图。
核心代码:
# 学生成绩信息
students = [
{'name': '张三', '语文': 85, '数学': 92, '英语': 88},
{'name': '李四', '语文': 78, '数学': 95, '英语': 90},
{'name': '王五', '语文': 90, '数学': 85, '英语': 92},
{'name': '赵六', '语文': 86, '数学': 82, '英语': 95},
{'name': '刘七', '语文': 92, '数学': 88, '英语': 85},
{'name': '钱八', '语文': 80, '数学': 90, '英语': 86}
]
# 初始化课程成绩字典
course_scores = {'语文': [], '数学': [], '英语': []}
# 遍历学生信息列表,将各科成绩添加到对应的课程成绩列表中
for student in students:
for course in course_scores.keys():
course_scores[course].append(student[course])
# 计算每门课的最高分、最低分和平均分
output = []
for course, scores in course_scores.items():
max_score = max(scores)
min_score = min(scores)
avg_score = sum(scores) / len(scores)
output.append([course, max_score, min_score, avg_score])
# 输出课程名、最高分、最低分和平均分
print("课程名 最高分 最低分 平均分")
for item in output:
print(f"{item[0]} {item[1]} {item[2]} {item[3]}")
结果示意图:
10.成绩排序:将学生成绩按总分降序排序。
【分析】仍采用字典来存放单个学生的信息,利用列表存放所有学生的信息。首先求出每个学生的总分,然后利用列表排序的功能实现学生成绩的降序排序。
核心代码:
# 学生成绩信息
students = [
{'name': '张三', '语文': 85, '数学': 92, '英语': 88},
{'name': '李四', '语文': 78, '数学': 95, '英语': 90},
{'name': '王五', '语文': 90, '数学': 85, '英语': 92},
{'name': '赵六', '语文': 86, '数学': 82, '英语': 95}
]
# 计算每个学生的总分,并将总分作为一个新的key添加到学生信息字典中
for student in students:
total_score = student['语文'] + student['数学'] + student['英语']
student['总分'] = total_score
# 按照总分降序排序学生信息列表
sorted_students = sorted(students, key=lambda x: x['总分'], reverse=True)
# 输出排序后的学生成绩信息
print("学生姓名 语文 数学 英语 总分")
for student in sorted_students:
print(f"{student['name']} {student['语文']} {student['数学']} {student['英语']} {student['总分']}")
结果示意图:
四、实验总结
1、在本次实验中,我掌握了字典和集合的基本操作和常用方法。通过实验,我了解了如何创建、删除字典,以及如何访问、添加、删除和修改字典元素。我还学会了如何利用字典和列表进行嵌套使用,以满足复杂的数据结构需求。此外,我也掌握了集合的创建和删除方法,并学会了集合元素的添加和删除操作。我了解到集合具有唯一性,可以用于去重和判断元素是否存在的场景。
2、在集合的操作方面,我学会了如何进行并集、交集和差集的操作。这些操作可以帮助我们对集合进行组合、筛选和排除等操作,提供了便捷的数据处理方式。
3、通过本次实验,我进一步熟悉了字典和集合的特性,并学会了如何运用它们进行程序设计。字典和集合是Python中常用的数据结构,掌握它们的使用方法对于编写高效、简洁的代码非常重要。
4、总体而言,本次实验使我更加熟练地掌握了字典和集合的基本操作和常用方法,为我后续的编程工作提供了更多的选择和灵活性。