Как использовать для петли для печати карт?

1

У меня есть все 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
  • 0
    это однострочник: cards = enumerate(rank+' of '+suit for suit in suits for rank in ranks) - подробности см. в ответе
  • 0
    Пожалуйста, отметьте свою домашнюю работу также с помощью тега [homework].
Теги:
playing-cards

5 ответов

4
Лучший ответ

Ваша функция 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)
  • 0
    Я попробовал ваши первые ответы, это работа, но почему печатать только один раз?
  • 0
    @phhnk - где вы положили return cards ? В конце функции, чуть ниже for suit in range(4): так с отступом в 4 пробела?
Показать ещё 3 комментария
2

Посмотрите только на этот

    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]?

  • 0
    Я пробовал cards[i] , но это не сработает.
  • 1
    @phhnk: Что значит "не будет работать"? Я не могу догадаться. Я не благословлен экстра сенсорным восприятием.
Показать ещё 1 комментарий
1
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
1
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()
1

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

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
  • 0
    Я все еще новичок, все еще должен учиться ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню