1. (简答题)
某大学实行学分制学费收费方法:学分制学费分为理论教学学分学费和基础学年学费,理论教学学分学费实行统一的标准,均为70.86元/学分。基础学年学费为2500元。
学年正常修读课程学费=基础学年学费+所修总学分x70.86
小明第一学年需修读的课程及学分如下表所示:
1.请用python计算并输出小明第一学年共修多少学分?输出格式为“本学年应修x个学分。”,输出结果保留两位小数。(5分)
2.用户输入每学分应缴纳的学费,计算并输出第一学年应缴纳多少学费?输出格式为“本学年应缴纳的学费为y元。”,输出结果保留两位小数。(10分)
(请将代码直接粘贴到答题框,并将运行结果截图上传。)
#所修课程及学分
crs_python = 3
crs_computer = 2
crs_heightmath = 3
crs_english = 3
crs_pe = 1
crs_anquan = 0.2
#计算第一学年应修总学分
total_crs = crs_python + crs_computer + crs_heightmath + crs_english + crs_pe + crs_anquan
print("本学年应修{:.2f}个学分。".format(total_crs))
#输入每学分学费
mei_crs = float(input("请输入每学分应缴纳的学费:"))
#计算第一学年学费
total_xfei = 2500 + (total_crs * mei_crs)
print("本学年应缴的学费为{:.2f}元。".format(total_xfei))
2. (简答题)
为了保护学生的个人信息安全,请定义一个姓名加密(有参)函数,实现以下功能:
若接收的姓名为非中文时,会触发Error,输出'必须输入中文姓名'(10分)。提示:中文字符的最小编码范围为u'\u4e00',最大编码范围为u'\u9fff'。
若接收的姓名为中文时,执行以下操作进行姓名加密:若姓名为2个字,将第二个字符用*替代(5分);若姓名为3个字或3个字以上,将除姓和最后一个字符以外的字符用*替代(5分)。
测试:当用户输入张三,则输出张*;当用户输入李小四,则输出李*四;当用户输入司马相如,则输出司**如。当用户输入非中文姓名,则输出必须输入中文姓名。
def encrypt_chinese_name(name):
for char in name:
if not ('\u4e00' <= char <= '\u9fff'):
raise ValueError("必须输入中文姓名")
if len(name) == 2:
encrypted_name = name[0] + "*"
elif len(name) >= 3:
encrypted_name = name[0] + "*" * (len(name)-2) + name[-1]
else:
encrypted_name = name
return encrypted_name
# 测试
try:
name = input("请输入中文姓名:")
encrypted_name = encrypt_chinese_name(name)
print("加密后的姓名为:", encrypted_name)
except ValueError as ve:
print(ve)
3. (简答题)
学校的教务系统的将学生的用户名和密码存在possword.txt文件中:
请补充程序,实现读取文件,并对用户和密码进行查询、添加、删除、等操作。(30分)
(请将代码粘贴到答题框,不要截图)
程序中有如下功能选项:
-
用户查询功能:
-
用户添加功能
-
用户删除功能
-
查看全部用户及密码后,退出系统功能。
当用户输入1,输入用户姓名后,若用户存在,则显示密码;若用户不存在,显示用户不存在不能查询。
当用户输入2,输入用户姓名和密码后,若用户存在,显示用户已存在无法增加;若用户不存在,则将用户名和密码追加到相应的列表或字典中,并显示用户已增加。
当用户输入3,输入用户姓名后,若用户存在,则将用户名和密码删除,并显示用户已删除。若用户不存在,显示用户不存在不能删除。
当用户输入4,则显示全部用户名和密码信息,并退出循环
请补充完整以下代码,实现以上功能:
with open("possword.txt",encoding="utf-8")) as f1:
#补充代码段1:实现读取文件内容,将用户和密码信息转换为列表或字典对象。
#代码结束
print("请选择:1 用户查询、2 用户增加、3 用户删除 4 查看数据,退出系统")
#补充代码段2:对用户和密码进行增加、删除、查询等操作
#代码结束
with open("possword.txt", encoding="utf-8") as f1:
lines = f1.readlines()
user_dict = {}
for line in lines:
if ":" in line:
user, password = line.strip().split(":")
user_dict[user] = password
while True:
print("请选择:1 用户查询、2 用户增加、3 用户删除 4 查看数据,退出系统")
choice = input("请输入数字选择功能:")
if choice == "1":
username = input("请输入用户名:")
if username in user_dict:
print(f"用户密码是:{user_dict[username]}")
else:
print("用户不存在,无法查询。")
elif choice == "2":
username = input("请输入用户名:")
if username in user_dict:
print("用户已存在,无法增加。")
else:
password = input("请输入密码:")
user_dict[username] = password
with open("possword.txt", "a", encoding="utf-8") as f2:
f2.write(f"{username}:{password}\n")
print("用户已增加。")
elif choice == "3":
username = input("请输入用户名:")
if username in user_dict:
del user_dict[username]
with open("possword.txt", "w", encoding="utf-8") as f3:
for user, password in user_dict.items():
f3.write(f"{user}:{password}\n")
print("用户已删除。")
else:
print("用户不存在,无法删除。")
elif choice == "4":
print("所有用户及其密码信息如下:")
for user, password in user_dict.items():
print(f"{user}:{password}")
break
else:
print("输入有误,请重新输入。")
4. (简答题)
班级有30个学生,报名参加两个秋游活动。
参加秋游1需缴纳50元,参加秋游2需缴纳30元。学生可以参加两项秋游,也可以不参加任何秋游。
参加秋游1的名单放在秋游1.txt中,
参加秋游2的名单放在秋游2.txt中,
全体成员的名单放在“班级名单.txt”中。
计算并显示缴纳80元的、50元的、30元的及不需交纳金额的学生名单及人数。(30分)
提示:使用集合的特性对数据进行处理。
file1=open("秋游1.txt",encoding="utf-8")
file2=open("秋游2.txt",encoding="utf-8")
file3=open("班级名单.txt",encoding="utf-8")
li1=file1.read().strip('\n').split(' ')
hd1=set(li1)
li2=file2.read().strip('\n').split(' ')
hd2=set(li2)
li3=file3.read().strip('\n').split(' ')
qb=set(li3)
hd3=hd1&hd2
hd4=hd1-hd2
hd5=hd2-hd1
hd6=qb-(hd1|hd2)
print("80元",hd3)
print("50元",hd4)
print("30元",hd5)
print("无需交款",hd6)
print("80元{}人".format(len(hd3)))
print("50元{}人".format(len(hd4)))
print("30元{}人".format(len(hd5)))
print("无需交款{}人".format(len(hd6)))
file1.close()
file2.close()
file3.close()
二. 填空题(共1题,20分)
5. (填空题)
使用for循环语句计算1+2+3+4+...+2020的值。
补充完整以下代码实现该功能:
s=0
for i in________:#1.补充循环条件
_____________#2.进行数值计算
print(s)
第一空:range (1,2021)
第2空:s += i