Python实现War卡牌游戏时如何设置循环直到列表所有元素被弹出
Python卡牌游戏War的循环实现方案
核心修改点
你只需要在注释下方的代码段外层加while循环即可,循环条件设置为牌堆剩余卡牌数量≥2,刚好可以把整副牌全部消耗完后自动终止。同时你原来的代码存在两处逻辑错误需要同步修正:
- 平局加赛后的加分行
u1points + drawturns没有赋值操作,无法正常累加额外积分,需要修改为u1points += drawturns,玩家2的对应逻辑同理修改为u2points += drawturns - 平局循环的终止条件
if u1card == u2card == False语法逻辑错误,修改为if u1card != u2card即可正常生效
修改后完整代码
import random def shuffled_deck(): deck = list(range(2, 15)) *4 random.shuffle(deck) return deck userdeck = shuffled_deck() print("welcome to War!") user1 = input("Player-1 name: ") user2 = input("Player-2 name: ") u1points = 0 u2points = 0 drawturns = 0 # 外层循环:牌堆剩余卡牌≥2时持续运行 while len(userdeck) >= 2: usercard = userdeck.pop() u1card = usercard print(user1 + ": " + str(u1card)) usercard = userdeck.pop() u2card = usercard print(user2 + ": " + str(u2card)) if u1card > u2card: print(str(u1card) + " is greater than " + str(u2card) + ".") print(user1 + " won this round.") u1points +=1 elif u2card > u1card: print(str(u2card) + " is greater than " + str(u1card) + ".") print(user2 + " won this round.") u2points +=1 else: print("It's a draw, try again.") # 平局循环也加卡牌数量判断,避免牌堆耗尽时报错 while u1card == u2card and len(userdeck)>=2: drawturns +=1 usercard = userdeck.pop() u1card = usercard print(user1 + ": " + str(u1card)) usercard = userdeck.pop() u2card = usercard print(user2 + ": " + str(u2card)) if u1card > u2card: print(str(u1card) + " is greater than " + str(u2card) + ".") print(user1 + " won this round.") u1points +=1 u1points += drawturns elif u2card > u1card: print(str(u2card) + " is greater than " + str(u1card) + ".") print(user2 + " won this round.") u2points +=1 u2points += drawturns else: print("It's a draw, try again.") if u1card != u2card: drawturns = 0 break # 循环结束后结算最终结果 print("\n=== 最终结算 ===") print(f"{user1} 得分:{u1points}") print(f"{user2} 得分:{u2points}") if u1points > u2points: print(f"恭喜{user1}获得最终胜利!") elif u2points > u1points: print(f"恭喜{user2}获得最终胜利!") else: print("双方平局!")
内容的提问来源于stack exchange,提问作者Collin Dehmer
相关产品推荐
相关产品推荐

