首页 > 解决方案 > 在列表没有任何值之前,我不知道如何使 while 循环持续

问题描述

我正在尝试在 python 中重新创建纸牌游戏“战争”,但无法弄清楚如何循环注释下的代码,直到列表中的每个值都消失了。所以基本上代码会生成一副洗牌的牌,并从列表中弹出牌。我想让代码重复,直到所有卡片都从甲板上弹出,我不知道该怎么做。

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
# - I want to loop the segment of code under this comment

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:
    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
      u1points + drawturns
    else:
      print("It's a draw, try again.")
    if u1card == u2card == False:
      drawturns = 0
      break

标签: pythonpython-3.x

解决方案


你可以做:

while len(userdeck)>0:

或者,你可以巧妙地写成:

while userdeck:

这是因为空列表被视为False,而非空列表被视为True。因此,当 userdeck 为空时,while循环将假定它是False大小写,因此循环将停止。同样的概念也可以应用于if语句。


推荐阅读