python - 在列表没有任何值之前,我不知道如何使 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
解决方案
你可以做:
while len(userdeck)>0:
或者,你可以巧妙地写成:
while userdeck:
这是因为空列表被视为False
,而非空列表被视为True
。因此,当 userdeck 为空时,while
循环将假定它是False
大小写,因此循环将停止。同样的概念也可以应用于if
语句。
推荐阅读
- pyspark - 容器因超出内存限制而被 YARN 杀死。使用了 14.8 GB 的 6 GB 物理内存
- c++ - 在 Mac 上从 QT 获取窗口句柄
- python - 函数调用中的打印语句不打印值Python
- node.js - 如何在环回中访问另一个模型的功能?
- python - 请求中的基本身份验证和 json 内容存在问题
- flyway - 如何在flyway中跳过特定脚本的执行
- sql-server - 具有正确类型和长度的疯狂“字符串或二进制数据将被截断”错误
- java - 从另一个活动刷新 SwipeRefreshLayout
- .htaccess - .htaccess 查询字符串被忽略
- html - 修复 CSS 导航栏按钮浮动和方向