*本文来自博主对专业课 Python开发与应用 实验部分的整理与解析。
*一些题目可能会增加了拓展部分(⭐)。拓展部分不是实验报告中原有的内容,而是博主本人的补充,以便各位学习参考。
*实验环境:Python 3.10 , PyCharm 2022.3
目录
一、实验目的
(1)掌握Python中的列表使用;
(2)掌握Python中的字典使用;
(3)运用列表管理采集的信息,构建数据结构;
(4)运用字典处理复杂的数据信息;
(5)通过综合性实验的方式,让学生结合类和组合数据类型各自的特点,选择合适的数据类型进行存储数据。
二、实验内容
1、好友管理系统
实验题目:好友管理系统
请设计一个好友管理系统,每个功能都对应一个序号,用户可根据提示“请输入您的选项”选择序号执行相应的操作,包括:
(1)添加好友:用户根据提示“请输入要添加的好友:”输入要添加好友的姓名,添加后会提示“好友添加成功”。
(2)删除好友:用户根据提示“请输入删除好友姓名:”输入要删除好友的姓名,删除后提示“删除成功”。
(3)备注好友:用户根据提示“请输入要修改的好友姓名:”和“请输入修改后的好友姓名:”分别输入修改前和修改后的好友姓名,修改后会提示“备注成功”。
(4)展示好友:若用户还没有添加过好友,提示“好友列表为空”,否则返回每个好友的姓名。
(5)退出:关闭好友系统。
源代码:
# 定义一个空的好友列表
friend_list = []
# 添加好友函数
def add_friend():
name = input("请输入要添加的好友:")
friend_list.append(name)
print("好友添加成功")
# 删除好友函数
def delete_friend():
name = input("请输入删除好友姓名:")
if name in friend_list:
friend_list.remove(name)
print("删除成功")
else:
print("未找到该好友")
# 备注好友函数
def edit_friend():
old_name = input("请输入要修改的好友姓名:")
new_name = input("请输入修改后的好友姓名:")
if old_name in friend_list:
index = friend_list.index(old_name)
friend_list[index] = new_name
print("备注成功")
else:
print("未找到该好友")
# 展示好友函数
def show_friends():
if not friend_list:
print("好友列表为空")
else:
print("您的好友列表:")
for friend in friend_list:
print(friend)
# 主程序
while True:
print("\n好友管理系统")
print("1. 添加好友")
print("2. 删除好友")
print("3. 备注好友")
print("4. 展示好友")
print("5. 退出")
choice = input("请输入您的选项:")
if choice == '1':
add_friend()
elif choice == '2':
delete_friend()
elif choice == '3':
edit_friend()
elif choice == '4':
show_friends()
elif choice == '5':
print("感谢使用好友管理系统,再见!")
break
else:
print("无效的选项,请重新输入")
列出测试数据和实验结果截图:
(1)添加好友
(2)删除好友
(3)备注好友
(5)退出
2、中文数字对照表
输入一个数字,转换成中文数字。比如:1234567890 -> 壹贰叁肆伍陆柒捌玖零。
源代码:
# 定义中文数字字典
chinese_nums = {'0': '零', '1': '壹', '2': '贰', '3': '叁', '4': '肆', '5': '伍', '6': '陆', '7': '柒', '8': '捌', '9': '玖'}
# 转换函数
def convert_to_chinese_num(number):
chinese_num = ''
for digit in str(number):
chinese_num += chinese_nums[digit]
return chinese_num
# 输入数字并转换为中文数字
input_number = input("请输入一个数字:")
try:
num = int(input_number)
chinese_number = convert_to_chinese_num(num)
print(f"{num} 的中文数字是:{chinese_number}")
except ValueError:
print("请输入有效的数字")
列出测试数据和实验结果截图:
3、学生成绩管理
将学生对象存入列表中,并按成绩对学生进行排序,并获取成绩最高和成绩最低的学生信息,并将最高分和最低分的学生从列表删除,最后再对列表进行拷贝,对拷贝的列表进行翻转输出。
源代码:
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
# 创建学生对象列表
students = [
Student("一旦", 85),
Student("二蛋", 75),
Student("三单", 90),
Student("四丹", 60),
Student("五弹", 95)
]
# 按成绩对学生进行排序
sorted_students = sorted(students, key=lambda x: x.score)
# 获取最高和最低成绩的学生信息
highest_score_student = sorted_students[-1]
lowest_score_student = sorted_students[0]
print(f"最高分学生信息:{highest_score_student.name} - {highest_score_student.score}")
print(f"最低分学生信息:{lowest_score_student.name} - {lowest_score_student.score}")
# 从列表中删除最高和最低成绩的学生
sorted_students = sorted_students[1:-1]
# 对列表进行拷贝
copied_students = sorted_students.copy()
# 对拷贝的列表进行翻转输出
copied_students.reverse()
for student in copied_students:
print(f"姓名:{student.name} - 成绩:{student.score}")
列出测试数据和实验结果截图:
4、商品筛选
有如下商品价格:568,239,368,425,121,219,834,1263,26,请输入随意一个价格区间进行商品的筛选,并能够对筛选出的商品进行从大到小和从小到大进行排序,并求出这个区间的商品的平均价格。
源代码:
# 原始商品价格列表
prices = [568, 239, 368, 425, 121, 219, 834, 1263, 26]
# 用户输入价格区间
start_price = float(input("请输入价格区间的起始价格:"))
end_price = float(input("请输入价格区间的结束价格:"))
# 筛选出指定价格区间的商品
selected_prices = [price for price in prices if start_price <= price <= end_price]
if selected_prices:
# 从大到小排序
sorted_desc = sorted(selected_prices, reverse=True)
print("从大到小排序:", sorted_desc)
# 从小到大排序
sorted_asc = sorted(selected_prices)
print("从小到大排序:", sorted_asc)
# 计算平均价格
average_price = sum(selected_prices) / len(selected_prices)
print("价格区间的商品平均价格:", average_price)
else:
print("在该价格区间内没有找到商品")
列出测试数据和实验结果截图:
5、生成验证码
验证码一般是包括一些随机产生的数字或符号,请实现随机生成一组6位验证码的功能。
每个字符可以是大写字母、小写字母或数字,有且只能是这三种类型中的一种。
源代码:
import random
import string
# 从大写字母、小写字母和数字中随机选择一个字符
def generate_verification_code():
characters = string.ascii_letters + string.digits
code = ''.join(random.choice(characters) for _ in range(6))
return code
# 生成验证码并输出
verification_code = generate_verification_code()
print("生成的验证码:", verification_code)
列出测试数据和实验结果截图:
6、列表生成表达式(1)
编写程序,使用列表生成表达式生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示,使用切片)
源代码:
import random
# 生成包含20个随机整数的列表
random_numbers = [random.randint(1, 100) for _ in range(20)]
print("随机整数列表:", random_numbers)
# 对偶数下标的元素进行降序排列
sorted_even_indices = sorted(random_numbers[::2], reverse=True)
# 重新组合列表,奇数下标的元素不变,偶数下标的元素按降序排列
result = random_numbers[:]
result[::2] = sorted_even_indices
print("处理后的列表:", result)
列出测试数据和实验结果截图:
7、列表生成表达式(2)
编写程序,使用列表生成表达式生成一个包含50个随机整数的列表,然后删除其中所有奇数(提示:从后向前删。)
源代码:
import random
# 生成包含50个随机整数的列表
random_numbers = [random.randint(1, 100) for _ in range(50)]
print("随机整数列表:", random_numbers)
# 从后向前删除所有奇数
index = len(random_numbers) - 1
while index >= 0:
if random_numbers[index] % 2 != 0:
del random_numbers[index]
index -= 1
print("删除奇数后的列表:", random_numbers)
列出测试数据和实验结果截图:
8、统计词频 (选做)
给一段文本,例如:“who have an apple apple is free free is money you know”,请统计单词出现的次数。(提示:需要用正则表达式去掉标点符号和空格)
源代码:
import re
text = "who have an apple apple is free free is money you know"
# 去除标点符号和空格,只保留单词
words = re.findall(r'\b\w+\b', text)
# 统计单词出现的次数
word_count = {}
for word in words:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
# 输出单词出现的次数
for word, count in word_count.items():
print(f"单词 '{word}' 出现了 {count} 次")
列出测试数据和实验结果截图:
三、实验结果的分析与总结
这些实验让我更加熟悉了 Python 中列表、字典、条件语句、循环、函数等基本概念的运用,同时也体会到了模块化编程和利用适当的工具(如正则表达式)对数据进行处理的重要性。
我巩固了许多关于编程技巧和 Python 语言特性的知识:
1. 好友管理系统:我学会了使用函数来模块化不同功能,让代码更清晰易懂,并且练习了列表的基本操作(增加、删除、修改、展示)。
2. 中文数字对照表:我学到了使用字典可以实现不同数据之间的映射,例如数字与中文数字的对照;以及字符串操作可以帮助对单个字符进行处理和拼接。
3. 学生成绩管理:我学到了类的使用可以更好地组织数据,并进行相关操作,例如学生对象的存储和处理。列表的切片和排序操作是对列表中特定元素进行处理的有效方式。
4.商品筛选:我学到了使用条件语句和列表推导式能够方便地根据条件筛选出特定的元素。
5.生成验证码:我学到了随机模块提供了生成随机数和随机选择的功能;利用字符串和循环可以构建复杂的随机字符串。
6.删除奇数:我学到了利用切片和循环可以从后向前遍历列表删除特定元素;使用条件语句可以对列表中的元素进行过滤和删除。
7.统计词频:我学到了运用正则表达式能帮助快速处理文本中的特定模式。