Или в цикъла while не работи - Python

Преди да започнем, аз съм съвсем нов в python.

Този код трябва да създаде ръка от 5 карти, която по-късно ще бъде използвана в игра на „Go Fish“. Причината да има толкова много променливи е за целите по-късно в играта, така че, моля, игнорирайте бъркотията, ако е възможно.

Очевидно картите не могат да се повтарят, тъй като има само една от всяка карта в нормално тесте карти. За да избегна създаването на ръка с две карти, които са еднакви, използвах циклите while (както можете да видите в кода). Изглежда обаче имам проблем с циклите while. Изявленията „или“ изглежда създават проблем в кода, където той няма да се изпълни в обвивката („>>>“ дори не се появява, а само празен курсор).

За да коригирам проблема с изпълнението, промених кода да използва знаци за равенство

Например: Докато 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

person Evan Cooper    schedule 24.09.2014    source източник
comment
Като забележка, можете да направите много сравнения, както искате, с оператора in. Например, while p55 in (p11, p22, p33, p44):.   -  person Roger Fan    schedule 25.09.2014
comment
Или тъй като цялата информация така или иначе е в променливата PlayerHand, можете да направите while p55 in PlayerHand:   -  person Laurent Bourgault-Roy    schedule 25.09.2014


Отговори (1)


p33 == p11 or p22

Това не е същото като

p33 == p11 or p33 == p22

Този тип въпроси възникват често, ето един такъв пример.

Причината, поради която първият случай не работи:

p33 == p11 or p22

Разбит е

(p33 == p11) or (p22)

Забележете, че истинността на p22 се оценява отделно.

person Cory Kramer    schedule 24.09.2014
comment
Първото се чете така, сякаш сте казали (p33 == p11) or (p22) - person TML; 25.09.2014
comment
Добре. Благодаря ти много! - person Evan Cooper; 25.09.2014