DAY 5 综合练习 - 学籍注册小程序 & 棋牌游戏发牌程序

学籍注册小程序

需求:

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

执行结果 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值