利用set集合的无序性替代random随机,只是简单的实现,可以在这个基础上升级成多人版本,Python还是刚刚学习阶段,主要参考实现就好,不要介意我的板书(代码很乱)。
#牌面列表 paimian = ['A','2','3','4','5','6','7','8','9','10','J','Q','K'] #花色列表 huase = ['♦','♣','♥','♠'] #玩家1和玩家2的空列表 play1 = list() play2 = list() #利用set集合的字符串无序不重复代替random paiset = set() #牌的顺序的空列表 pailist = list() #初始化set集合将元素追加到list列表中 for i in range(52): paiset.add(str(i)) for i in paiset: pailist.append(i) #先给玩家1和玩家2的列表追加两张牌 play1.append(int(pailist[0])) play1.append(int(pailist[1])) play2.append(int(pailist[2])) play2.append(int(pailist[3])) ''' printpai函数用于打印当前玩家的牌的信息 ''' def printpai(play1,play2): print("play1:",end=" ") for i in play1: pm = int(i % 12) hs = int((i+1) % 4) print(paimian[pm] + huase[hs],end=" ") print("\nplay2:",end=" ") for i in play2: pm = int(i % 12) hs = int((i+1) % 4) print(paimian[pm] + huase[hs], end=" ") ''' judge函数用于结算最终玩家的点数 ''' def judge(): print("\n______________________") jp1 = [0,0] flag1 = False jp2 = [0,0] flag2 = False #判断玩家1是否含有A,若含有A则有两种点数 for i in play1: if i % 12 == 0: jp1[0]+=1 jp1[1]+=11 flag1 = True else: jp1[0]+=((i%12)+1) jp1[1]+=((i%12)+1) #用python的三元运算符添加是否爆点的字符串 x1 = "(爆点)" if jp1[0]>21 else "" x2 = "(爆点)" if jp1[1]>21 else "" #如果有A则打印两个点数,若没有,打印一个 if flag1: print("玩家1的点数为"+str(jp1[0])+"点"+x1+"或"+str(jp1[1])+"点"+x2) else: print("玩家1的点数为"+str(jp1[0])+"点"+x1) #判断玩家2是否含有A,若含有A则有两种点数 for i in play2: if i % 12 == 0: jp2[0]+=1 jp2[1]+=11 flag2 = True else: jp2[0]+=((i%12)+1) jp2[1]+=((i%12)+1) #用python的三元运算符添加是否爆点的字符串 y1 = "(爆点)" if jp2[0]>21 else "" y2 = "(爆点)" if jp2[1]>21 else "" #如果有A则打印两个点数,若没有,打印一个 if flag2: print("玩家2的点数为"+str(jp2[0])+"点"+y1+"或"+str(jp2[1])+"点"+y2) else: print("玩家2的点数为"+str(jp2[0])+"点"+y1) ''' init函数用于进行游戏的逻辑判断,是主方法 ''' def init(): #打印规则 print("-------游戏规则-------") print("---A可看做1点或11点---") print("--------21点---------") #打印当前玩家手牌信息 printpai(play1, play2) #游戏进行,询问玩家是否还要添加牌 flag1 = True flag2 = True index = 4 print("\n------------------") while flag1: iscon = input("\nplay1--是否还要牌(Y or N):") if iscon == "Y" or iscon == "y": play1.append(int(pailist[index])) index += 1 printpai(play1,play2) else: printpai(play1,play2) flag1 = False print("\n----------------") while flag2: iscon = input("\nplay2--是否还要牌(Y or N):") if iscon == "Y" or iscon == "y": play2.append(int(pailist[index])) index += 1 printpai(play1,play2) else: printpai(play1,play2) flag2 = False init() #若init函数执行完毕,调用judge判断最终结果 judge()运行结果: