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 Réponses :
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
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()
Cela a aidé immensément. Merci!
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")
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é.
Vous avez trop de
Retour code>. Si vous avez juste besoin d'imprimer, vous n'avez besoin que deImprimer code>, pasRetour Imprimer code>. 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.