2011-05-07 6 views
1

Je fais un programme de cartes de shuffle.À la fin j'utilise for loop pour imprimer 10 cartes aléatoires, mais je ne sais pas quel est le problème.Besoin d'aide avec mon programme de cartes de mélange

À la fin deal_card(card), pourquoi je mets card parce que mon h/w le dis, mais si vous aviez d'autres réponses je serai bon d'écouter ce que vous dites.

Ceci est mon programme:

import random 

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 = [] 
    for suit in range(4): 
     for rank in range(13): 
      card_string = rank_string[rank] + " of " + suit_string[suit] 
      cards.append(card_string) 
     return cards 

def create_deck(deck): 
    for i in range(52): 
     deck.append(i) 
     return 

def shuffle_deck(deck): 
    random.shuffle(deck) 
    return 

def deal_card(deck): 
    return deck.pop(0) 

deck=[] 

create_deck(deck) 
shuffle_deck(deck) 
print "The first 10 cards are:" 
for i in range(10):    # I don't know why won't work 
    deal_card(card) 
    print define_cards() 

sur Imprimer chould ressembler à:

The first 10 cards are: 
queen of hearts 
ten of diamonds 
... 

Répondre

6

Depuis votre define_cards produit déjà une liste de noms de cartes, vous devez utiliser pour générer la plate-forme au lieu de create_deck. Ensuite, dans la boucle for, distribuez une carte et imprimez-la.

deck = define_cards() 
shuffle_deck(deck) 
print "The first 10 cards are:" 
for i in range(10): 
    card = deal_card(deck) 
    print card 

En faisant cela, le programme imprime dix cartes depuis le haut du paquet. Cependant, define_cards a encore un petit bug. Peux tu le repérer? Astuce: positionnement de return.

+0

Ne devrait pas être seulement 4 espace, même niveau que 'pour costume dans la gamme (4)' et sous 'cards.append (card_string)' ou ci-dessous 'cards.append (card_string)' whit 12 espace ?? I essayer est de travailler dans les deux sens, quelle est la différence? – phhnk

+0

@phhnk: Selon l'indentation, 'return' est soit dans l'une des boucles' for', soit après les deux. Vous le voudrez après que les deux boucles 'for' soient terminées, donc 4 espaces. Avec la version dans votre question (8 espaces) vous obtenez seulement les cartes * clubs *. – dancek

+0

Oh, je vois comment ça va maintenant, merci beaucoup ... – phhnk

3

La moitié du code est superflu:

>>> import random 
>>> deck = range(1,52) 
>>> random.shuffle(deck) 
>>> deck 
[4, 38, 40, 18, 35, 44, 50, 22, 49, 26, 8, 45, 14, 20, 25, 34, 37, 51, 42, 29, 24, 28, 27, 30, 7, 47, 23, 3, 10, 2, 9, 39, 6, 16, 12, 17, 11, 41, 33, 48, 5, 1, 36, 21, 13, 32, 43, 19, 15, 31, 46] 
+2

Votre deck est manquant une carte ... –

+0

Je sais que je n'ai pas fait si proprement la question, mais j'apprécie toujours votre aide, tho. REMERCIER – phhnk

1

Vous voudrez peut-être penser à créer une carte de classe et une plate-forme de classe pour maintenir un jeu de cartes. Cela vous donnera un code plus clair.

Questions connexes