python实验五 字典与集合

一、实验目的

  1. 掌握字典的创建、删除等基本操作;
  2. 掌握字典元素的访问方法;
  3. 掌握添加、删除和修改字典元素;
  4. 掌握字典和列表的嵌套使用;
  5. 掌握集合元素创建和删除;
  6. 掌握集合元素的添加与删除;
  7. 掌握集合的并集、交集与差集操作;
  8. 掌握利用字典、集合特性进行程序设计。

二、实验环境

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、总体而言,本次实验使我更加熟练地掌握了字典和集合的基本操作和常用方法,为我后续的编程工作提供了更多的选择和灵活性。

  • 33
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值