目录
一、实验目的与要求
二、实验内容
三、主要程序清单和程序运行结果
第1题
第2题
四、实验结果分析与体会
(1)通过本次实验,学生应掌握Python中创建空集合、集合中增加元素的方法,以及集合的并、交、差运算;
(2)掌握字典创建的基本方法,能实现字典键值对的增加、删除、修改、查询等常见操作;
(3)能结合应用问题选择合适的数据结构进行问题求解;
(4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)
请使用Python语言在Jupyter Notebook环境下编程,完成下列题目的要求:
1、改编自教材第84页实训4:求两个正整数的最大公约数和最小公倍数。
编程实现:(1)从键盘输入两个100以内的正整数(2)先求出每个正整数的所有约数,这些约数可以用列表或集合存放(3)通过集合运算,求出这两个正整数的所有公约数,并找出它们的最大公约数(4)根据最小公倍数数等于两个正整数的乘积除以它们最大公约数的商这一结论,求出最小公倍数(例如,24与36的最小公倍数=24*36/12,而12就是24与36的最大公约数)。
要求程序能输出:(1)每个正整数的所有约数(2)两个正整数的最大公约数和最小公倍数。
2、改编自教材第83页实训3:好友通讯录管理程序。
请选择合适的数据结构(推荐使用列表或字典)存储如表所示的好友通讯录信息,并通过字符串提示用户对好友通讯录信息进行增、删、改、查操作,输入数字1进行好友添加,输入数字2删除好友,输入数字3和4分别进行好友信息修改和查询,接着根据用户选择的方式进行针对性的好友信息管理。
姓名 |
电话 |
地址 |
小明 |
001 |
广州 |
小红 |
002 |
深圳 |
小王 |
003 |
北京 |
提示:
(1)可以从不同的角度设计数据结构,以下两个角度可以任选其一:
a. 如果每一行的好友信息用一个字典来表示(例如第一行好友信息可以表示为一个字典{"姓名":"小明","电话":"001","地址":"广州"}),则整个通讯录可以看成是一个列表,该列表把多个字典作为其元素;
b.如果每一列的信息用一个键值对来表示(例如第一列的信息可以表示为一个键值对"姓名":["小明","小红","小王"]),则整个通讯录可以看成是一个字典,每个键值对的值都可以用一个列表来表示。
(2)下面的运行结果,供参考,提交作业时需要用自己的代码和运行结果替换掉此处的运行结果!
1、改编自教材第84页实训4:求两个正整数的最大公约数和最小公倍数。
编程实现:(1)从键盘输入两个100以内的正整数(2)先求出每个正整数的所有约数,这些约数可以用列表或集合存放(3)通过集合运算,求出这两个正整数的所有公约数,并找出它们的最大公约数(4)根据最小公倍数数等于两个正整数的乘积除以它们最大公约数的商这一结论,求出最小公倍数(例如,24与36的最小公倍数=24*36/12,而12就是24与36的最大公约数)。
要求程序能输出:(1)每个正整数的所有约数(2)两个正整数的最大公约数和最小公倍数。
num1 = int(input("请输入第一个正整数(不超过100):"))
num2 = int(input("请输入第二个正整数(不超过100):"))
list1 = {i for i in range(1, num1 + 1) if num1 % i == 0}
list2 = {i for i in range(1, num2 + 1) if num2 % i == 0}
common = list1.intersection(list2)
a = max(common)
b = (num1 * num2) // a
print(f"第一个正整数 {num1} 的约数为: {list1}")
print(f"第二个正整数 {num2} 的约数为: {list2}")
print(f"这两个正整数的公约数为: {common}")
print(f"它们的最大公约数为: {a}")
print(f"它们的最小公倍数为: {b}")
2、改编自教材第83页实训3:好友通讯录管理程序。
请选择合适的数据结构(推荐使用列表或字典)存储如表所示的好友通讯录信息,并通过字符串提示用户对好友通讯录信息进行增、删、改、查操作,输入数字1进行好友添加,输入数字2删除好友,输入数字3和4分别进行好友信息修改和查询,接着根据用户选择的方式进行针对性的好友信息管理。
姓名
电话
地址
小明
001
广州
小红
002
深圳
小王
003
北京
提示:
(1)可以从不同的角度设计数据结构,以下两个角度可以任选其一:
a. 如果每一行的好友信息用一个字典来表示(例如第一行好友信息可以表示为一个字典{"姓名":"小明","电话":"001","地址":"广州"}),则整个通讯录可以看成是一个列表,该列表把多个字典作为其元素;
b.如果每一列的信息用一个键值对来表示(例如第一列的信息可以表示为一个键值对"姓名":["小明","小红","小王"]),则整个通讯录可以看成是一个字典,每个键值对的值都可以用一个列表来表示。
(2)下面的运行结果,供参考,提交作业时需要用自己的代码和运行结果替换掉此处的运行结果!
address_book = { # 创建字典存储了所有好友的信息
"姓名":["小明","小红","小王"], # 每个键对应一个列表,列表中存储了所有好友的相应信息
"电话":["001","002","003"],
"地址":["广州","深圳","北京"]
}
while True:
print("现在的通讯录是:")
print("{:<10}{:<10}{:<10}".format("姓名", "电话", "地址"))
for i in range(len(address_book["姓名"])): # 使用 for 循环遍历 address_book 中的每个键,并打印对应的值
name = address_book["姓名"][i]
phone = address_book["电话"][i]
address = address_book["地址"][i]
print("{:<10}{:<10}{:<10}".format(name, phone, address)) # 使用了字符串格式化,保证输出的各个字段对齐
operation = input("请选择要进行操作的对应数字(1-添加,2-删除,3-修改,4-查询,0-退出):")
if operation == "1":
# 添加好友信息
name = input("请输入好友信息,姓名电话地址,以空格分开:").split() # 使用split()函数将其拆分成三个字符串
address_book["姓名"].append(name[0])
address_book["电话"].append(name[1])
address_book["地址"].append(name[2])
print("好友添加成功。")
elif operation == "2":
# 删除好友信息
name = input("请输入要删除的好友姓名:")
if name in address_book["姓名"]:
index = address_book["姓名"].index(name)
address_book["姓名"].pop(index)
address_book["电话"].pop(index)
address_book["地址"].pop(index)
print("好友删除成功。")
else:
print("好友不存在,无法删除。")
elif operation == "3":
# 修改好友信息
name = input("请输入要修改信息的好友原始姓名:")
if name in address_book["姓名"]:
new_info = input("请输入要修改的好友姓名、电话、地址,并用空格分开:").split()
# 确保用户输入了完整的信息:姓名、电话和地址
if len(new_info) != 3:
print("输入格式错误,请确保输入姓名、电话和地址,以空格分开。")
continue
index = address_book["姓名"].index(name)
# 更新信息
address_book["姓名"][index] = new_info[0] # 更新姓名,这里假设用户可能也会修改姓名
address_book["电话"][index] = new_info[1] # 更新电话
address_book["地址"][index] = new_info[2] # 更新地址
print("好友信息修改成功。")
else:
print("好友不存在,无法修改。")
elif operation == "4":
# 查询好友信息
name = input("请输入要查询信息的好友姓名:")
if name in address_book["姓名"]:
index = address_book["姓名"].index(name)
print("好友信息:")
print("姓名:", address_book["姓名"][index])
print("电话:", address_book["电话"][index])
print("地址:", address_book["地址"][index])
else:
print("好友不存在,无法查询。")
elif operation == "0":
# 退出程序
print("谢谢使用,程序退出!")
break
else:
print("无效的选择,请重新输入。")
通过本次实验,掌握了Python中创建空集合、集合中增加元素的方法,以及集合的并、交、差运算;字典创建的基本方法,能实现字典键值对的增加、删除、修改、查询等常见操作,能结合应用问题选择合适的数据结构进行问题求解。
集合是一组无序且不重复的元素,可以用来去重或者判断元素是否存在。创建集合可以使用set()函数或者使用花括号{},注意如果要创建空集合必须使用set()函数。集合的基本操作包括添加元素、删除元素、求交集、求并集等。字典是一种键值对的数据结构,可以用来存储和查找数据。创建字典可以使用花括号{}或者dict()函数,注意字典中的键必须是不可变类型。字典的基本操作包括添加键值对、删除键值对、修改键值对、查找键值对等。
遍历字典时可以使用for循环遍历字典中的键值对,也可以只遍历键或者值。遍历键值对可以使用items()方法,遍历键可以使用keys()方法,遍历值可以使用values()方法。
字典可以用来存储配置信息、统计词频、实现缓存等。在实际应用中,我们可以根据具体需求来设计和使用字典。