为什么这个 while 循环,循环?

Why won't this while loop, loop?

我正在尝试制作一个程序,它随机浏览一叠纸牌 'i' 副牌的数量。但是我的 while 循环似乎在 1 运行 之后停止了?怎么不循环了?

cards = ['Two of Hearts', 'Two of Diamonds', 'Two of Spades', 'Two of Clubs', 'Three of Hearts', 'Three of Diamonds', 'Three of Spades', 'Three of Clubs', 'Four of Hearts', 'Four of Diamonds', 'Four of Spades', 'Four of Clubs', 'Five of Hearts', 'Five of Diamonds', 'Five of Spades', 'Five of Clubs', 'Six of Hearts', 'Six of Diamonds', 'Six of Spades', 'Six of Clubs', 'Seven of Hearts', 'Seven of Diamonds', 'Seven of Spades', 'Seven of Clubs', 'Eight of Hearts', 'Eight of Diamonds', 'Eight of Spades', 'Eight of Clubs', 'Nine of Hearts', 'Nine of Diamonds', 'Nine of Spades', 'Nine of Clubs', 'Ten of Hearts', 'Ten of Diamonds', 'Ten of Spades', 'Ten of Clubs', 'Jack of Hearts', 'Jack of Diamonds', 'Jack of Spades', 'Jack of Clubs', 'Queen of Hearts', 'Queen of Diamonds', 'Queen of Spades', 'Queen of Clubs', 'King of Hearts', 'King of Diamonds', 'King of Spades', 'King of Clubs', 'Ace of Hearts', 'Ace of Diamonds', 'Ace of Spades', 'Ace of Clubs']

i = 0

while i <= 5:
    cardsTemp = cards
    for n in cardsTemp:
        card = random.randint(1,len(cardsTemp)) - 1
        print(cardsTemp[card])
        print('cardsTempt len: ' + str(len(cardsTemp)))
        cardsTemp.remove(cardsTemp[card])
    i += 1

尝试在 while 循环中将原始卡片复制到临时卡片中。

while i <= 5:
    cardsTemp = cards.copy()
    for n in cardsTemp.copy():
        card = random.randint(1,len(cardsTemp)) - 1
        print(cardsTemp[card])
        print('cardsTempt len: ' + str(len(cardsTemp)))
        cardsTemp.remove(cardsTemp[card])
    i += 1

我的错是我没有将卡片列表复制到 cardsTemp 中。这样做时,它完美地循环了,但是由于某种原因 for 循环在 25 张卡片后停止了。我通过在 while 循环中创建一个 while 循环来解决这个问题。

这对我有用。感谢您的回答!

cards = ['Two of Hearts', 'Two of Diamonds', 'Two of Spades', 'Two of Clubs', 'Three of Hearts', 'Three of Diamonds', 'Three of Spades', 'Three of Clubs', 'Four of Hearts', 'Four of Diamonds', 'Four of Spades', 'Four of Clubs', 'Five of Hearts', 'Five of Diamonds', 'Five of Spades', 'Five of Clubs', 'Six of Hearts', 'Six of Diamonds', 'Six of Spades', 'Six of Clubs', 'Seven of Hearts', 'Seven of Diamonds', 'Seven of Spades', 'Seven of Clubs', 'Eight of Hearts', 'Eight of Diamonds', 'Eight of Spades', 'Eight of Clubs', 'Nine of Hearts', 'Nine of Diamonds', 'Nine of Spades', 'Nine of Clubs', 'Ten of Hearts', 'Ten of Diamonds', 'Ten of Spades', 'Ten of Clubs', 'Jack of Hearts', 'Jack of Diamonds', 'Jack of Spades', 'Jack of Clubs', 'Queen of Hearts', 'Queen of Diamonds', 'Queen of Spades', 'Queen of Clubs', 'King of Hearts', 'King of Diamonds', 'King of Spades', 'King of Clubs', 'Ace of Hearts', 'Ace of Diamonds', 'Ace of Spades', 'Ace of Clubs']

i = 0

while i <= 1:
    print('\n   LOOP {}'.format(i))

    cardsTemp = cards.copy()
    n = 0

    while n < len(cardsTemp):
        card = random.randint(1,len(cardsTemp)) - 1
        print(cardsTemp[card])
        print('cardsTempt len: ' + str(len(cardsTemp)))
        cardsTemp.remove(cardsTemp[card])

    i += 1

您可以使用 for 循环更轻松地完成此操作。这就是 range() 函数的用途:

import random

cards = ['Two of Hearts', 'Two of Diamonds', 'Two of Spades', 'Two of Clubs', 'Three of Hearts', 'Three of Diamonds', 'Three of Spades', 'Three of Clubs', 'Four of Hearts', 'Four of Diamonds', 'Four of Spades', 'Four of Clubs', 'Five of Hearts', 'Five of Diamonds', 'Five of Spades', 'Five of Clubs', 'Six of Hearts', 'Six of Diamonds', 'Six of Spades', 'Six of Clubs', 'Seven of Hearts', 'Seven of Diamonds', 'Seven of Spades', 'Seven of Clubs', 'Eight of Hearts', 'Eight of Diamonds', 'Eight of Spades', 'Eight of Clubs', 'Nine of Hearts', 'Nine of Diamonds', 'Nine of Spades', 'Nine of Clubs', 'Ten of Hearts', 'Ten of Diamonds', 'Ten of Spades', 'Ten of Clubs', 'Jack of Hearts', 'Jack of Diamonds', 'Jack of Spades', 'Jack of Clubs', 'Queen of Hearts', 'Queen of Diamonds', 'Queen of Spades', 'Queen of Clubs', 'King of Hearts', 'King of Diamonds', 'King of Spades', 'King of Clubs', 'Ace of Hearts', 'Ace of Diamonds', 'Ace of Spades', 'Ace of Clubs']

for i in range(5):
    print('\n   LOOP {}'.format(i))

    cardsTemp = cards[:]
    for n in range(len(cards)):
        card = random.randint(1,len(cardsTemp)) - 1
        print(cardsTemp[card])
        print('cardsTempt len: ' + str(len(cardsTemp)))
        cardsTemp.remove(cardsTemp[card])