话不多说,直接上代码
import random
import sys
def library(choice1):
"""
这是一个扑克牌生成的函数
:param choice1: 花牌选择器,T为有,F为无
:return: 返回生成的牌库(注意接收!!)
"""
# 定义一个列表,存放所有的牌
li = []
# 定义四种花色
suit = ['♠', '❤', '♣', '♦']
# 用循环将牌一一存入牌库
for i in range(1, 11):
if i == 1:
i = 'A'
for a in suit:
b = a + str(i)
li.append(b)
for ab in ['J', 'Q', 'K']:
for ba in suit:
li.append(ba + ab)
# 存入大小王和花牌,花牌可以选择是否需要
li.append('红色Joker')
li.append('黑色Joker')
if choice1:
li.append('花牌')
return li
def choice():
"""
花牌选择函数,输入0不加入花牌,其它整数则加入
:return: 花牌选择
"""
# 加入循环可以让用户输入错误后继续输入
while 1:
# 监听输入的值是否符合要求(没有听说过的可以不写,直接接收输入的值即可,缺点是输入的不是指定类型会报错)
try:
choice1 = int(input('请选择是否加入花牌(输入0不加入,其它整数则加入): '))
return choice1
except ValueError:
print('您输入的有误,请重试!!')
except KeyboardInterrupt:
# 在输入时终止程序会出现报错,该语句可以解决这个问题,让程序尽量完美
sys.exit('\n手动终止成功!')
def card_shuffler(li):
"""
随机给三个人发牌
:param li: 导入的牌库
:return: 三个人的手牌和底牌
"""
# 定义三个人的手牌
p1 = []
p2 = []
p3 = []
# 随机发牌
for i in range(len(li)):
# 使用随机数来给玩家手牌列表加入手牌
if i <= 16:
j = random.randint(0, len(li) - 1)
p1.append(li[j]) # 加入后删除牌库中的该牌,避免重复
del li[j]
elif i <= 33:
j = random.randint(0, len(li) - 1)
p2.append(li[j])
li.pop(j)
elif i <= 50:
j = random.randint(0, len(li) - 1)
p3.append(li[j])
del li[j]
else:
# 将剩下的牌加入底牌的列表
p = li
return p1, p2, p3, p
if __name__ == '__main__':
li1 = library(choice())
# 检测传入的玩家名是否重复
while 1:
try:
# 记录玩家ID
name1 = input('请输入p1玩家的姓名:')
name2 = input('请输入p2玩家的姓名:')
name3 = input('请输入p3玩家的姓名:')
if name1 != name2 and name1 != name3 and name2 != name3:
break
else:
print('您输入的玩家姓名重复,请重试!')
except KeyboardInterrupt:
sys.exit('\n手动终止成功!')
# 获取各个玩家的手牌和剩下的底牌
name1_hand, name2_hand, name3_hand, cards = card_shuffler(li1)
# 输出玩家当前手牌,让其选择是否要拿底牌
print(f'玩家{name1},您的手牌是:{name1_hand}')
print(f'玩家{name2},您的手牌是:{name2_hand}')
print(f'玩家{name3},您的手牌是:{name3_hand}')
# 将底牌加入需要底牌的玩家手牌中
while 1:
try:
name4 = input('请输入需要底牌的玩家姓名:')
except KeyboardInterrupt:
sys.exit('\n手动终止成功!')
if name4 == name1:
name1_hand += cards
break
elif name4 == name2:
name2_hand += cards
break
elif name4 == name3:
name3_hand += cards
break
else:
print('输入错误,没有该玩家!')
# 输出玩家最终的手牌
print('=' * 69 + '你们的最终手牌如下' + '=' * 69)
print(f'恭喜玩家{name4}获得手牌:{cards}')
print(f'玩家{name1},您的手牌是:{name1_hand}')
print(f'玩家{name2},您的手牌是:{name2_hand}')
print(f'玩家{name3},您的手牌是:{name3_hand}')