今天的第二个作品,哈哈哈哈,搞起来感觉还挺有意思的,不过代码里纸牌J,Q,K,A几个数字被我替换成了11,12,13,14......主要是没有想到简单的办法让其比较,索性都用数字了,我太菜了,希望有大佬指点一下。
没啥好图,送张桌面壁纸吧。
代码如下:
import random #导入随机数函数
def puke():
"""
生成一副52张的扑克牌(除去大小王)
:return:
"""
list1 = ['黑桃', '红桃', '方块', '梅花']
list2 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
list3 = []
for i in list1:
for j in list2:
dict1 = {i: j}
list3.append(dict1)
return list3
def func(num):
"""
判断随机生成的三张扑克类型,对不同类型的牌 底分进行相应的翻倍
其中num参数返回的是对玩家牌型计算后的分数。
(最小单张是:2,
11,12,13,14 分别代表:J,Q,K,A)
:param num:
:return:
"""
user_list1 = [] #用于存储牌的花色
user_list2 = [] #用于存储牌的数字
global list4 #声明调用外部全局变量
for i in list4:
user_list1.append(list(i.keys()))
for j in i:
user_list1.append(list(i.values()))
user_list2.append(user_list1[1]) #将遍历后的数字添加进user_list2中
user_list2.append(user_list1[3])
user_list2.append(user_list1[5])
user_list2 = [int(x) for item in user_list2 for x in item] #合并列表
user_list2.sort() #列表排序
if user_list2[0] == user_list1[1] == user_list1[2]: #判断三张数字是否相同
num = user_list1[1][0] * 100000 + zhadan
elif user_list1[0] == user_list1[2] == user_list1[4] and user_list2[2] - user_list2[1] == user_list2[1] - \
user_list2[0] == 1: #判断三张花色是否相同且连号
num = user_list2[1] * 10000 + shunjin
elif user_list2[2] - user_list2[1] == user_list2[1] - user_list2[0] == 1: #判断是否连号
num = user_list2[1] * 1000 + shunzi
elif user_list2[0] == user_list2[1] or user_list2[1] == user_list2[2] or user_list2[2] == user_list2[0]: #判断是否有两个一样的数字
if user_list2[0] == user_list2[1]:
num = user_list2[0] * 100 + duizi
if user_list2[0] == user_list2[2]:
num = user_list2[2] * 100 + duizi
if user_list2[2] == user_list2[1]:
num = user_list2[1] * 100 + duizi
elif user_list2[0] != user_list2[1] != user_list2[2]: #最后一种可能,单张
num = user_list2[2] * 10 + user_list2[1] + danzhang
return num #返回计算后的分值
# 定义玩家牌型的底分
zhadan = 100
shunjin = 80
shunzi = 60
duizi = 40
danzhang = 20
gamer = [] #定义新列表,存放玩家数量
gamers = int(input('请输入玩家数量(只能2 - 9名):'))
if gamers >= 2 and gamers <= 9: #判断用户输入的人数是否在规定范围内
for i in range(gamers): # 玩家数量由用户定义,代表整体循环的次数
list4 = [] # 用于存储每名玩家随机得到的三张牌
for j in range(3):
sun = random.randint(1, len(puke()) - 1) # 以随机数为扑克整体的下标进行查找对应的牌
list4.append(puke()[sun]) # 添加进列表
puke().remove(puke()[sun]) # 把已经发出去的牌在扑克牌整体中进行删除
print(f'{i + 1}号玩家的底牌:{list4}')
if i == 0:
user_1 = func(0)
gamer.append(user_1)
elif i == 1:
user_2 = func(0)
gamer.append(user_2)
elif i == 2:
user_3 = func(0)
gamer.append(user_3)
elif i == 3:
user_4 = func(0)
gamer.append(user_4)
elif i == 4:
user_5 = func(0)
gamer.append(user_5)
elif i == 5:
user_6 = func(0)
gamer.append(user_6)
elif i == 6:
user_7 = func(0)
gamer.append(user_7)
elif i == 7:
user_8 = func(0)
gamer.append(user_8)
elif i == 8:
user_9 = func(0)
gamer.append(user_9)
else:
print('你输入的人数不合理,请重新输入。')
old_grade = [] #定义一个新列表,用于存放以玩家排序的分数
new_grade = [] #定义一个新列表,用于存放以大小排序后的分数
for i in gamer: #遍历玩家分数列表
old_grade.append(i)
new_grade.extend(old_grade)
old_grade.sort(reverse=True) #降序排列后的分数列表
user = 1
for j in new_grade: #遍历玩家顺序的列表
if j == old_grade[0]:
print(f'{user}号玩家获胜,得分:{old_grade[0]}') #最终赢家的分数没有实际意义,仅为了判断最大值
else:
user += 1
|