Проблема в том, что has_suit
никогда не возвращает True, потому что suit == s
никогда не True. Каждый элемент в вашем списке mycards
представляет собой строку значения карты, соединенную с мастью (например, «Diamonds3»). Это означает, что вы проверяете, если "Diamonds" == "Diamonds3"
et c. Вместо этого вы должны проверить if suit in s
, чтобы увидеть, содержится ли строка "Diamonds" внутри строки "Diamonds3".
Также определения функций внутри другой функции немного странные и ненужные. Я отредактировал твой код:
import random
suits = ['Hearts', 'Diamonds', 'Spades', 'Clubs']
cards = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']
def has_suit(cards, suit):
for s in cards:
if suit in s:
return True
return False
def has_all_suits(cards):
for suit in suits:
if not has_suit(cards, suit):
return False
return True
def main():
deck = []
my_cards = []
j = 0
for i in range(52):
deck.append(suits[i%4] + cards[int(i/4)])
while not has_all_suits(my_cards):
ind = random.randint(0, 51)
card = deck[ind]
if not has_suit(my_cards, card[0]):
my_cards.append(card)
j += 1
for card in my_cards:
print(card)
print('Number of picks:', j)
main()