У меня есть все 52 карты, и я пытаюсь распечатать все 52 карты с помощью for loop
.
Я не знаю, как установить мой for loop
на этом этапе.
def define_cards(n):
rank_string = ("ace","two","three","four","five","six","seven","eight","nine","ten","jack","queen","king")
suit_string = ("clubs","diamonds","hearts","spades")
cards = []
for suit in range(4):
for rank in range(13):
card_string = rank_string[rank] + " of " + suit_string[suit]
cards.append(card_string)
print "The cards are:"
for i in range(52): #how to make this for loop work??
print i, card_string[i]
Я хочу напечатать вот так
The crads are:
0 ace of clubs
1 two of clubs
2 three of clubs
...
49 jack of spades
50 queen of spades
51 king of spades
Ваша функция define_cards
должна вернуть список. Добавьте return cards
в конец.
Затем вы должны фактически вызвать/выполнить эту функцию.
Затем вы можете получить доступ к отдельным картам в этом списке:
cards = define_cards()
for i, card in enumerate(cards):
print i, card
Однако, если вы ищете "более питоновское" решение, попробуйте следующее:
import itertools as it
rank_string = ("ace","two","three","four","five","six","seven","eight","nine","ten","jack","queen","king")
suit_string = ("clubs","diamonds","hearts","spades")
print 'The cards are:'
for i, card in enumerate(it.product(rank_string, suit_string)):
print i, '{0[1]} of {0[0]}'.format(card)
return cards
? В конце функции, чуть ниже for suit in range(4):
так с отступом в 4 пробела?
Посмотрите только на этот
cards.append(card_string)
print "The cards are:"
for i in range(52): #how to make this for loop work??
print i, card_string[i]
Зачем печатать card_string[i]
?
Что случилось с cards[i]
?
cards[i]
, но это не сработает.
ranks = ("ace","two","three","four","five","six","seven","eight","nine","ten","jack","queen","king")
suits = ("clubs","diamonds","hearts","spades")
Ответ - элегантный однострочный:
cards = [rank+' of '+suit for suit in suits for rank in ranks]
for i,card in enumerate(cards):
print i, card
Результат:
0 ace of clubs
1 two of clubs
...
50 queen of spades
51 king of spades
def define_cards():
rank_string = ("ace","two","three","four","five","six","seven","eight","nine","ten","jack","queen","king")
suit_string = ("clubs","diamonds","hearts","spades")
cards = []
n = 0
for suit in suit_string:
for rank in rank_string:
print '%s %s of %s' % (n,rank,suit)
n+=1
define_cards()
Почему бы не использовать итератор:
def define_cards():
rank_string = ("ace","two","three","four","five","six","seven","eight","nine","ten","jack","queen","king")
suit_string = ("clubs","diamonds","hearts","spades")
for suit in suit_string: # you can obtain the items of the iterate list directly, no need of rank access
for rank in rank_string:
card_string = rank + " of " + suit
yield card_string
print "The cards are:"
cards_iterator = define_cards()
for i, card in enumerate(cards_iterator): # use the iterator power ;)
print i, card
cards = enumerate(rank+' of '+suit for suit in suits for rank in ranks)
- подробности см. в ответе