学籍注册小程序
需求:
1.要求用户输入姓名、年龄、手机号、身份证号、所选课程,然后为学院完成注册。
2.手机号、身份证号唯一。
3.课程只能从Python、Linux、网络安全、前端、数据分析这几门里选
4.学员信息存入文件
初始学员信息文件:
aaa,21,11111111111,111111,Python
bbb,21,22222222222,222222,Python
ccc,21,33333333333,333333,Linux
ddd,21,44444444444,444444,Linux
eee,21,55555555555,555555,网络安全
fff,21,66666666666,666666,前端
ggg,21,77777777777,777777,数据分析
程序代码:
# 1.打开存储学员信息的文件并加载到内存
f = open("student_data.db","r") #读模式创建并打开文件
student_data = {}
for line in f:
line = line.strip().split(',') #此时,line是一个存储了一行信息的列表
student_data[line[3]] = line #使用唯一的身份证号作为key
# 2.指示学员输入信息并检验
line = []
line.append(input("姓名:")) #line[0]
line.append(input("年龄:")) #line[1]
# 检验手机号
for key,val in student_data.items():
phone_num = input("手机号:")
# if int(student_data[id_num][2]) == int(student_data[key][2]):
# 写法报错,因为这时用户输入的id_num还未存进字典中,所以student_data[id_num][2]不存在
if int(phone_num) == int(student_data[key][2]): #修改后的正确写法
print("该手机号已注册,请重新输入。")
else:
line.append(phone_num) #line[2]
break
# 检验身份证号:
while True:
id_num = input("身份证号:")
if id_num in student_data:
print("该身份证号已注册,请重新输入。")
else:
line.append(id_num) #line[3]
break
# 检验课程
while True:
course = input("选择课程(可选项:Python、Linux、网络安全、前端、数据分析):")
if course not in ["Python","Linux","网络安全","前端","数据分析"]:
print("无相应课程,请正确输入课程名称。")
else:
line.append(course) #line[4]
break
# 3.将新用户信息写入文件中
f_w = open("student_data.db","r+") #使用写读模式,方便后面通过读来移动光标
line_w = ",".join(line)
# f_w.seek(-1) 想用这句来将光标移动到最后,失败了,语法错误
f_w.readlines() #使用这句话成功将光标移动到末尾,但是没有换行
f_w.write("\n"+line_w) #添加这一句,成功换行
f_w.close()
print(f"学员{line[0]}注册成功!")
程序执行一次后的学员信息文件:
aaa,21,11111111111,111111,Python
bbb,21,22222222222,222222,Python
ccc,21,33333333333,333333,Linux
ddd,21,44444444444,444444,Linux
eee,21,55555555555,555555,网络安全
fff,21,66666666666,666666,前端
ggg,21,77777777777,777777,数据分析
hhh,21,00000000000,000000,Python
棋牌游戏发牌程序
需求:
1.允许用户一次性输入多个玩家姓名,不限个数,然后为每个玩家随机产生3张牌。
2.你只有一副扑克牌,确保发出去的每张牌不重样
3.牌需要有黑桃、红桃、方片,梅花之分
程序代码:
# 0.因为需要随机抽牌,引入random模块
import random
# 1.生成扑克牌
card_stack = ['大王','小王']
card_nums = list(range(1,11)) + ['J','Q','K']
card_sign = ['黑桃','红心','梅花','方片']
for s in card_sign:
for n in card_nums:
# print(s,n)
# print(type(s),type(n))
card = str(s) + '_' + str(n)
# 直接card=s+n 会出现TypeError: can only concatenate str (not “int“) to str,但s和n明明就是str啊,不懂
card_stack.append(card)
# 2.玩家上桌
# 输入玩家姓名
table = {}
player = input("请输入玩家姓名,可输入多个,使用英文逗号隔开:")
player = player.strip().split(',')
# 将姓名录入字典同时进行发牌
for per in player:
table[per] = random.sample(card_stack,3) # 发牌
for i in range(3): # 从牌堆中删除已发的牌
card_stack.remove(table[per][i])
# 3.打印牌面
while True:
start = input("输入start进行发牌:") #玩家输入start再打印发牌结果,使发牌结果展示可控
if start == "start":
for key in table:
print(key,table[key])
print("发牌结束。")
break
执行结果