*本文是博主对学校专业课Python各种实验的再整理与详解,除了代码部分和解析部分,一些题目还增加了拓展部分(⭐)。拓展部分不是实验报告中原有的内容,而是博主本人自己的补充,以方便大家额外学习、参考。
(本文分步更新,先更新代码部分,再更新解析部分。如果打开文章发现只有代码没有解析,说明还没更新完毕,可以过一阵子再来参考~)
目录
一、实验目的
二、实验内容
1、学生宿舍信息输入
2、超市抹零
3、个人用户登录
4、模拟斐波那契数列输出
5、银行金额大写汉字转换
6、天天向上的力量
7、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
8、一个雇员一周的总薪水
9、水仙花数是3位整数(100-199),它的各位数字立方和等于该数本身。请编写程序。
10、过滤敏感词
三、实验总结(将于本学期结束后补充)
一、实验目的
(1)能够使用分支结构和循环结构编写简单程序;
(2)能够使用math库进行简单的数值计算;
(3)通过设计型实验方式,结合具体的应用场景和业务需求,引导学生进行关键的技术分析,帮助学生理清编程思路,最后熟练运用 Python 语言进行程序设计,培养的了学生针对一般问题自主进行分析问题和解决问题的能力。
二、实验内容
1、学生宿舍信息输入
模拟学生宿舍信息输入,需要输入学生个人信息 姓名、性别、年龄、宿舍号、学院、专业、电话信息,并输出显示。
源代码:
def input_student_info():
name = input("请输入学生姓名:")
gender = input("请输入学生性别:")
age = input("请输入学生年龄:")
dormitory_number = input("请输入学生宿舍号:")
college = input("请输入学生学院:")
major = input("请输入学生专业:")
phone = input("请输入学生电话:")
student_info = {
"姓名": name,
"性别": gender,
"年龄": age,
"宿舍号": dormitory_number,
"学院": college,
"专业": major,
"电话": phone
}
return student_info
def display_student_info(student_info):
# 输出学生信息
print("学生信息如下:")
for key, value in student_info.items():
print(f"{key}: {value}")
if __name__ == "__main__":
student_info = input_student_info()
display_student_info(student_info)
列出测试数据和实验结果截图:
2、超市抹零
逛超市购物结账的时候,商家都会给顾客回馈一张清单小票,票面上的金额往往会精确到角或分。大部分商家通常会采用四舍五入的原则进行结算,不过有些商家为了让利顾客,会将小数点后面的数字金额全部抹零。下面使用数字类型转换实现收银抹零行为。
源代码:
amount = float(input("请输入购物金额(可以包含小数点):"))
rounded_amount = int(amount)
print(f"抹零后的金额为:{rounded_amount}元")
列出测试数据和实验结果截图:
3、个人用户登录
当用户登录时给3次机会。如果成功,显示欢迎xxx。如果登录失败,显示录入错误你还有x次机会。如果3次机会使用完毕,则显示登录超限,请明天再登录。
源代码:
def login(username, password):
correct_username = "user" # 正确的用户名
correct_password = "123" # 正确的密码
if username == correct_username and password == correct_password:
return True
else:
return False
def main():
login_attempts = 3 # 允许尝试d 次数
while login_attempts > 0:
username = input("请输入用户名:")
password = input("请输入密码:")
if(login(username,password)):
print(f"欢迎{username}!")
break
else:
login_attempts -= 1
if login_attempts > 0:
print(f"登录错误,你还有 {login_attempts} 次机会。")
else:
print("登录超限,请明天再登录。")
if __name__ == "__main__":
main()
列出测试数据和实验结果截图:
4、模拟斐波那契数列输出
用户输入指定的数列范围,正确输出结果。
源代码:
def fib(n):
a, b = 0, 1
result = []
for _ in range(n):
result.append(a)
a, b = b, a + b
return result
if __name__ == "__main__":
n = int(input("请输入要生成的斐波那契数列项数:"))
sequence = fib(n)
print(f"斐波那契数列前 {n} 项为:{sequence}")
5、银行金额大写汉字转换
银行电子支票业务在金额部分需要使用大写的汉字,因此需要将用户录入的数字信息转变为汉字。目前只需完成1~5位整数转换即可。
源代码:
def number_to_chinese(number):
if number == 0:
return "零"
chinese_dict = {
0: "零",
1: "壹",
2: "贰",
3: "叁",
4: "肆",
5: "伍",
6: "陆",
7: "柒",
8: "捌",
9: "玖"
}
unit_dict = {
0: "",
1: "拾",
2: "佰",
3: "仟",
4: "万"
}
result = []
position = 0
while number > 0:
digit = number % 10
if digit != 0:
result.append(chinese_dict[digit] + unit_dict[position])
else:
# 零
if result and result[-1] != "零":
result.append("零")
number //= 10
position += 1
return "".join(result[::-1])
if __name__ == "__main__":
number = int(input("请输入金额(1-5位整):"))
if 1 <= number <= 99999:
chinese_amount = number_to_chinese(number)
print(f"大写汉字金额:{chinese_amount}")
else:
print("非法!")
列出测试数据和实验结果截图:
6、天天向上的力量
一年365天,每天进步1‰,累计进步多少?如果每天退步1‰,累计剩下多少?如果以3天打鱼2天晒网的学习态度持续学习一年,学习效果如何?
源代码:
def calculate():
increase_rate = 0.001
total_increase = (1 + increase_rate) ** 365
total_decrease = (1 - increase_rate) ** 365
return total_increase, total_decrease
def main():
total_increase, total_decrease = calculate()
print(f"每天进步1‰,一年的累计:{total_increase:.2%}")
print(f"每天退步1‰,一年的累计:{total_decrease:.2%}")
if __name__ == "__main__":
main()
列出测试数据和实验结果截图:
7、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
源代码:
import math
def func():
for x in range(1, 10000):
y = x + 100
z = y + 168
if math.sqrt(y).is_integer() and math.sqrt(z).is_integer():
return x
return None
def main():
result = func()
if result is not None:
print(f"整数是:{result}")
else:
print("未找到")
if __name__ == "__main__":
main()
列出测试数据和实验结果截图:
8、一个雇员一周的总薪水
一个雇员一周的总薪水,等于其每小时的时薪,乘以其一周工作的正常小时数,再加上加班费。加班费等于总的加班时间,乘以每小时薪水的1.5倍。
编写一个程序,以每小时的薪水,常规工作时间,加班工作时间作为输入,显示一个雇员的总周薪。按照要求:每周常规工作时间不能超过40小时且不能小于等于0,正常工作时薪不能小于15元。
源代码:
def func(hourly_wage, regular_hours, overtime_hours):
if regular_hours > 40 or regular_hours <= 0:
return "不符合要求"
if hourly_wage < 15:
return "每小时薪水不能小于15元"
regular_salary = hourly_wage * regular_hours
overtime_salary = hourly_wage * 1.5 * overtime_hours
total_salary = regular_salary + overtime_salary
return total_salary
def main():
hourly_wage = float(input("请输入每小时薪水(元):"))
regular_hours = float(input("请输入常规工作时间(小时):"))
overtime_hours = float(input("请输入加班工作时间(小时):"))
result = func(hourly_wage, regular_hours, overtime_hours)
if isinstance(result, str):
print(result)
else:
print(f"雇员的总周薪为:{result:.2f}元")
if __name__ == "__main__":
main()
列出测试数据和实验结果截图:
9、水仙花数是3位整数(100-199),它的各位数字立方和等于该数本身。请编写程序。
源代码:
def get_number():
lily_numbers = []
for number in range(100, 1000):
digit1 = number // 100
digit2 = (number // 10) % 10
digit3 = number % 10
# 立方和
sum_of_cubes = digit1 ** 3 + digit2 ** 3 + digit3 ** 3
# 判断
if sum_of_cubes == number:
lily_numbers.append(number)
return lily_numbers
def main():
lily_numbers = get_number()
if lily_numbers:
print("3位水仙花数有:", lily_numbers)
else:
print("未找到3位水仙花数。")
if __name__ == "__main__":
main()
列出测试数据和实验结果截图:
10、过滤敏感词
敏感词一般是指带有敏感政治倾向、暴力倾向、不健康色彩的词或不文明用语,论坛、网站管理员一般会设定一些敏感词,以防不当发言影响论坛、网站环境。若论坛、网站设置了敏感词,用户编辑的内容又含有敏感词,论坛和网站会将其判定为不文明用语,阻止内容的发送,或使用“*”替换其中的敏感词。
源代码:
import re
def censor_text(text, sensitive_words):
censored_text = text
for word in sensitive_words:
# 创建正则表达式用的
pattern = re.compile(re.escape(word), re.IGNORECASE)
censored_text = pattern.sub('*' * len(word), censored_text)
return censored_text
def main():
sensitive_words = ["呵呵", "哈哈", "嘻嘻"] # 定义敏感词列表
user_text = input("请输入文本内容:")
censored_text = censor_text(user_text, sensitive_words)
if censored_text != user_text:
print("检测到敏感词,已替换为 '*':")
print(censored_text)
else:
print("文本内容合法,无敏感词。")
if __name__ == "__main__":
main()
列出测试数据和实验结果截图: