我正在寻找创建动态 WHILE 循环的解决方案。例如,如果我有一个具有灵活数量的玩家 (2-6) 的游戏,并且每个玩家都有一个分数,则当其中一个玩家达到 100 分时,WHILE 循环应该结束。我有一个想法来创建一个嵌套列表,其中每个列表项都是另一个包含玩家信息的列表,即玩家姓名和分数,例如:
players = [['Player 1', 0], ['Player 2', 0]]
在这个例子中,有两个玩家。玩家 1 和玩家 2 的当前得分均为 0。以下是示例代码:
import random
players = [['Player 1', 0], ['Player 2', 0]]
while players[0][1] < 100 and players[1][1] < 100:
chances = [0, 1]
for i in range(0, len(players)):
player = players[i]
score = random.choice(chances)
if score == 1:
player[1] += 1
if player[1] == 100:
winner = player[0]
print('Congrats {0}, you have won the game'.format(winner))
机会就是无论他们玩什么游戏,如果玩家得到 0,什么也不会发生,如果他得到 1,他的分数会增加 1。谁先达到 100,谁就赢得了游戏。
如果现在有第三个、第四个或第五个玩家,我就必须相应地调整代码中的 WHILE 循环:
players = [['Player 1', 0], ['Player 2', 0], ['Player 3', 0]
或
players = [['Player 1', 0], ['Player 2', 0], ['Player 3', 0], ['Player 4', 0]
等等。
是否有一种动态方法可以做到这一点,我不需要有固定数量的玩家或导致 IndexError 异常?
提前非常感谢您的帮助!
您可以使用
all()
函数和生成器表达式来测试每个玩家的分数是否小于 100:
while all(player[1] < 100 for player in players)