2
votes

Quelque chose ne va pas avec cette fonction?

Je suis nouveau dans Python. J'ai commencé à créer un jeu de tic tac toe.

J'ai imprimé un tableau, donc ce n'est pas le problème. Ma fonction play_sequence a quelque chose de bizarre qui se passe.

from IPython.display import clear_output

def display_board(board):
    print(board[7]+  '|'+board[8]+  '|' +board[9])
    print('----')
    print(board[4]+  '|'+board[5]+  '|' +board[6])
    print('----')
    print(board[1]+  '|'+board[2]+  '|' +board[3])

def play_sequence():
    move1 = ''

    while move1 != range(0,10,1):
        move1 = input("Player 1, choose a number:")
        break

    while move1 == input(move1):
        print("You chose 1")

Je veux que le joueur choisisse un nombre, et il devrait renvoyer que vous avez choisi 1, puis le tableau avec un 1 à bord [ 1] sur le tableau. Au lieu de cela, je mets 1, puis une nouvelle ligne apparaît avec un 1 devant une boîte pour mettre une autre entrée. Des idées? Ensuite, je mets un autre 1, puis il montre «11». C'est drôle, mais j'ai besoin d'aide. Des idées?


2 commentaires

Voulez-vous dire move1 pas dans la plage (0,10,1) ? En ce moment, vous comparez un nombre (chaîne) à une plage entière. De plus, vous devrez utiliser int pour transformer le numéro de chaîne saisi en un nombre réel. Comparer une chaîne à un nombre sera toujours faux.


Dupe possible .


3 Réponses :


0
votes

Je ne sais pas trop pourquoi vous utilisez des boucles while. Je crois que vous voulez demander à si move1 dans la plage (1, 10) (d'ailleurs pas besoin d'écrire la plage (0, 10, 1) car step est par défaut 1, et aussi votre tic tac la pointe du pied va de 1 à 9 et non de 0 , d'où la plage (1, 10)). Ce serait comme dire "si move1 n'est pas un nombre compris entre 1 et 9, alors demandez une entrée". Je pense que vous voulez dire aussi if move1 == '' . Il y a aussi un petit problème avec cela, c'est que les entrées sont des chaînes ... donc elles ne peuvent pas vraiment être comparées à un nombre de la plage. ie '3'! = 3.

Pour changer cela facilement, vous pouvez simplement faire int (input (".. tout ce que vous demandez ..")) qui convertit la chaîne en entiers.

Juste une note d'accompagnement mais quand vous écrivez move1 = '' , je sais que vous utilisez une chaîne vide car vous n'avez rien, mais vous pouvez également utiliser move1 = Aucun . Ensuite, vous pouvez également dire sinon move1: à la place ("None" est False, c'est comme dire si ce n'est pas False c'est-à-dire si True).

Jusqu'à présent, vous got:

def play_sequence():
    move1 = None

    if not move1:
        move1 = int(input("Player 1, choose a number:"))

    print("You chose", move1)

De plus, vous pouvez rendre les choses beaucoup plus faciles en disant simplement

print("You chose", move1)

car cela ne sert à rien en faisant move1 quand vous allez le changer de toute façon. Sauf si je n'ai pas bien compris pourquoi vous utilisiez la boucle while ... Je suppose que vous vouliez vérifier si l'entrée est un nombre compris entre 1 et 9?

Quoi qu'il en soit, le problème que vous avez trouvé avec le bizarre "1 1 1" découle de ceci:

while move1 == input (move1): print ("Vous avez choisi 1")

Ici, vous utilisez input (), et chaque fois que vous avez input (), vous demandez en fait une entrée. C'est pourquoi vous mettez 1 encore et encore. Si vous écrivez 2 ou un autre nombre par exemple, la boucle while s'arrête. En fait, je ne suis pas tout à fait sûr de ce que vous faites ici, mais je pense que ce que vous vouliez dire est:

    def play_sequence():
        move1 = int(input("Player 1, choose a number:"))

Cela afficherait le numéro qui a été choisi dans la première partie de votre fonction.

Par conséquent:

def play_sequence():
    move1 = None

    if not move1:
        move1 = int(input("Player 1, choose a number:"))

J'espère que j'aide et je ne vous ai pas dérouté. .. :) Amusez-vous bien en apprenant python!


3 commentaires

move1 = None suivi de sinon move1 est un non-sens.


Oui, mais je pensais que c'était ce que voulait dire Airmastix avec move1 = '' , alors j'ai essayé de le garder proche de ce code d'origine ... :)


Merci. Cela fonctionne maintenant. Maintenant, je dois imprimer le tableau avec un x à l'endroit où se trouve le 1



0
votes

En fait, je suppose que si vous voulez vraiment vérifier si l'entrée est un nombre entre 1 et 9, vous pouvez l'ajouter.

def play_sequence():
    move1 = int(input("Player 1, choose a number:"))

    # checking
    while move1 not in range(1, 10):
        move1 = int(input("Player 1, the number must be between 1 and 9"))

    print("You chose", move1)

Juste un dernier point - je me demande si vous allez faire une fonction super longue avec toutes les répétitions de la séquence de lecture ... c'est-à-dire allez-vous mettre move2, move3, ....? Je pense qu'il serait préférable d'utiliser une grande boucle while pour cela. Mais je suppose que si vous voulez juste vous entraîner pour le moment, amusez-vous avec :)


0 commentaires

1
votes

Je pense que vous pouvez essayer ceci

def play_sequence():
    while True:
        move = int(input("Player 1, choose a number:"))
        if move not in range(0, 10, 1):
            break
        print("Your choice is", move)


0 commentaires