"或"在while循环不工作 - Python

时间:2014-09-24 20:29:18

标签: python variables while-loop

在开始之前,我对python很新。

这段代码可以创建一张5张牌,稍后将用于“Go Fish'”游戏中。之所以有这么多变量的原因是为了以后的目的,所以请尽可能忽略这种混乱。

显然,卡片无法重复,因为普通卡片组中的每张卡片中只有一张卡片。为了避免使用两张相同的卡创建一只手,我使用了while循环(正如您在代码中看到的那样)。我似乎遇到了while循环的问题。 '或'语句似乎在代码中创建了一个问题,它不会在shell中执行('>>>'甚至不会出现,只是一个空白的光标)。

为了解决执行问题,我将代码更改为使用等号

例如: 虽然p55 == p11 == p22 == p33 == p44:

然而,在运行代码时,我仍然会遇到重复的卡片。

如果有人可以帮我弄清楚如何解决这个重复错误,那就太棒了。

提前谢谢!

def player_hand():
    CardSuit = ['Hearts','Diamonds','Clubs','Spades']
    CardNum = ['Ace','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Jack','Queen','King']

    PlayerHand = []

    p1 = str(random.choice(CardNum))
    p11 = p1, 'of', str(random.choice(CardSuit))
    p111 = " ".join(p11)
    PlayerHand.append(p111)

    p2 = str(random.choice(CardNum))
    p22 = p2, 'of', str(random.choice(CardSuit))
    while p22 == p11 :
        p2 = str(random.choice(CardNum))
        p22 = p2, 'of', str(random.choice(CardSuit))
    p222 = " ".join(p22)
    PlayerHand.append(p222)

    p3 = str(random.choice(CardNum))
    p33 = p3, 'of', str(random.choice(CardSuit))
    while p33 == p11 or p22 :
        p3 = str(random.choice(CardNum))
        p33 = p3, 'of', str(random.choice(CardSuit))
    p333 = " ".join(p33)
    PlayerHand.append(p333)

    p4 = str(random.choice(CardNum))
    p44 = p4, 'of', str(random.choice(CardSuit))
    while p44 == p11 or p22 or p33 :
        p4 = str(random.choice(CardNum))
        p44 = p4, 'of', str(random.choice(CardSuit))
    p444 = " ".join(p44)
    PlayerHand.append(p444)

    p5 = str(random.choice(CardNum))
    p55 = p5, 'of', str(random.choice(CardSuit))
    while p55 == p11 or p22 or p33 or p44 :
        p5 = str(random.choice(CardNum))
        p55 = p5, 'of', str(random.choice(CardSuit))
    p555 = " ".join(p55)
    PlayerHand.append(p555)

    return PlayerHand

1 个答案:

答案 0 :(得分:3)

p33 == p11 or p22

这与

不同
p33 == p11 or p33 == p22

这类问题经常出现,现在是one such example

第一种情况不起作用的原因:

p33 == p11 or p22

闯入

(p33 == p11) or (p22)

请注意p22的真实性是单独评估的。