0
votes

Comment puis-je réparer mes boucles pour un jeu de cartes?

Ce problème semble assez simple mais je suis coincé dessus ... Je veux créer plusieurs tours de jeu de cartes à boucle jusqu'à ce que l'ordinateur ou l'utilisateur gagne. Ma boucle ne fonctionne pas et ne s'arrête pas immédiatement après avoir nommé combien de cartes sont laissées.

J'ai essayé de jouer avec l'indentation et le style de la boucle de la boucle. P>

There are 21 cards left

How many cards do you pick (1-3): 3
    You picked 3 cards


There are 18 cards left

    I pick 2 cards

-----------------------------------------

There are 16 cards left

How many cards do you pick (1-3): 4


3 commentaires

Vous avez trop de Retour . Si vous avez juste besoin d'imprimer, vous n'avez besoin que de Imprimer , pas Retour Imprimer . C'est ce qui rend le code sortie dès qu'il imprimait une chaîne.


Merci! J'ai pris ces sorties et sortit la boucle tandis que ce n'était pas nécessaire


J'ai ajouté une réponse avec plus de code qui pourrait être utile, si vous voulez vérifier.


3 Réponses :


0
votes

Comme Sal Dit, l'instruction code> renvoie code> quittera la fonction. Aussi la ligne n = cartes - comp_pick code> est remplacée dans la déclaration pour. Voir cet exemple:

for n in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
    print(n)
    n += 2


0 commentaires

1
votes

Le problème principal était définitivement les énoncés code> impression code> et, comme vous le réalisez, il n'y a pas de besoin réel pour le pendant code> boucles. Étant donné que les deux blocs après la question Y / N CODE> sont très identiques, vous pouvez créer une fonction afin qu'elle consolide le code et le rend plus lisible. Il y avait d'autres petites choses ici et là que j'ai ajusté, mais il manque encore la logique gagnante. Quoi qu'il en soit, j'espère que cela vous aidera maintenant et à l'avenir.

    def card_loop(start_count):
        cards = start_count  # how many cards we start with, as it depends

        while cards > 0:  # it is always decremented, so just check for zero threshold
            print("There are", cards, "cards left")
            user_pick = int(input("How many cards do you pick? (1-3): "))
            if 1 <= user_pick <= 3:
                # valid user pick, proceed with calculations
                cards -= user_pick  # cards left from user pick
                comp_pick = 4 - user_pick  # computer pick logic
                print("There are", cards, "left \n\tI pick", comp_pick, "card")
                cards -= comp_pick  # cards left from computer pick

            else:
                # invalid user pick, do nothing, will ask user to pick again
                print("You cannot pick", user_pick, "cards")


    def card_game():
        print("New Game start")
        user_choice = input("Do you want to go first? y/n: ")

        if user_choice == "y":
            card_loop(21)

        elif user_choice == "n":
            # assuming the computer will always pick 1 card first
            # taking 1 card will allow the number of cards to remain divisible by 4
            card_loop(20)


    card_game()


1 commentaires

Cela a aidé immensément. Merci!



1
votes

Votre logique de boucle est compliquée. De plus, vous avez essayé de coder plusieurs fonctionnalités de jeu à la fois, sans y tester aucun d'entre eux, ce qui permet de déboguer actuel plus fort. Tachons simplement la boucle du jeu. Décomposer la hiérarchie, peut-être quelque chose comme ceci:

# Play one game.
# Start with 20 cards
# Continue until there are no cards left

deck = 20
while deck > 0:
    # Each player gets a turn: human first
    human_take = int(input("How many cards do you want?"))
    deck -= human_take
    print("You took", human_take, "cards; there are", deck, "remaining")

    computer_take = 4 - human_take
    deck -= computer_take
    print("You took", computer_take, "cards; there are", deck, "remaining")


1 commentaires

Oui merci. Je travaille maintenant sur le dernier bit du code pour vous assurer qu'une fois la valeur de carte restante atteint 1 ou 0, que la sortie correcte s'affichera dans ma coquille et que le jeu sera terminé.