2014-09-24 3 views
0

Прежде чем мы начнем, я новичок в python.«Или» во время цикла не работает - Python

Этот код должен создать 5-карточную комбинацию, которая будет позже использована в игре «Go Fish». Причина в том, что в игре так много переменных для целей позже, поэтому, пожалуйста, проигнорируйте беспорядок, если это возможно.

Очевидно, что карты не могут повториться, так как на обычной колоде карт есть только одна карта. Чтобы избежать создания руки с двумя одинаковыми картами, я использовал циклы while (как вы можете видеть в коде). Однако, похоже, у меня проблема с петлями while. Утверждения 'or', похоже, создают проблему в коде, где он не будет выполняться в оболочке («>>>» даже не появляется, просто пустой курсор).

Чтобы устранить эту проблему выполнения, я изменил код, чтобы использовать одинаковые знаки

Например: В то время как p55 == p11 == p22 == p33 == р44:

Однако при запуске кода я все еще сталкиваюсь с дубликатами карточек.

Если кто-нибудь может помочь мне разобраться, как обойти эту повторяющуюся ошибку, это было бы здорово.

Заранее благодарю вас!

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 
+2

В качестве примечания вы можете сделать много сравнений, как вы хотите сделать с оператором 'in'. Например, 'while p55 in (p11, p22, p33, p44):'. –

+0

Или, так как вся информация в переменной PlayerHand в любом случае, вы можете сделать 'while p55 в PlayerHand:' –

ответ

3
p33 == p11 or p22 

Это не то же самое, как

p33 == p11 or p33 == p22 

Этот тип вопроса приходит часто, вот one such example.

Причина первый случай не работает:

p33 == p11 or p22 

сломан в

(p33 == p11) or (p22) 

Обратите внимание, что truthiness из p22 оценивается отдельно.

+0

. Первый читается так, как будто вы сказали '(p33 == p11) или (p22)' – TML

+0

Ok. Большое спасибо! –

Смежные вопросы