J'essaie d'exécuter une boucle while en utilisant le mot-clé 'not' mais quand je le fais, la boucle accepte également les valeurs de garbage (par exemple bjskdjb) qui n'est pas la condition définie pour la boucle while / for .
Lorsque j'exécute la boucle for à la place, cela génère une erreur de syntaxe.
Quelles sont les erreurs que je fais ici (à la fois en utilisant la boucle for et la boucle while)?
J'ai essayé de le faire avec une boucle for et une boucle while.
def askplayerchoice():
playerchoice = ''
while playerchoice not in ('X' , 'O'):
playerchoice = input('Enter X or O: ')
if playerchoice == 'X':
return ['X' , 'O']
else:
return ['O', 'X']
askplayerchoice()
'''
# Using For loop I am getting a syntax error.
def askplayerchoice():
playerchoice = ''
for playerchoice not in ('X' , 'O'):
playerchoice = input('Enter X or O: ')
if playerchoice == 'X':
return ['X' , 'O']
else:
return ['O', 'X']
askplayerchoice()
'''
Je m'attends à ce que le code continue à demander à l'utilisateur d'entrer soit «X» ou «O» jusqu'à ce que l'utilisateur entre les valeurs correctes.
5 Réponses :
Vous revenez de la boucle à l'appelant de la fonction dans le premier passage lui-même, car vous utilisez return à l'intérieur de la boucle. Ainsi, quelle que soit la valeur autre que 'X' , ['O', 'X'] est renvoyé.
def askplayerchoice():
playerchoice = ''
while True:
playerchoice = input('Enter X or O: ')
if playerchoice == 'X':
return ['X' , 'O']
elif playerchoice == 'O':
return ['O', 'X']
print(askplayerchoice())
Vous peut aussi utiliser une boucle infinie while True: ici, comme ceci:
def askplayerchoice():
playerchoice = ''
while playerchoice not in ('X' , 'O'):
playerchoice = input('Enter X or O: ')
if playerchoice == 'X':
return ['X' , 'O']
elif playerchoice == 'O':
return ['O', 'X']
print(askplayerchoice())
Merci ... A travaillé pour la boucle while.Pouvez-vous aussi me dire pourquoi ce code ne fonctionne pas avec la boucle For .. def askplayerchoice (): playerchoice = '' for playerchoice not in ('X', 'O'): playerchoice = input ('Enter X or O:') if playerchoice == 'X': return ['X', 'O'] else: return ['O', 'X'] askplayerchoice ()
@PrashantMishra, pour ne fonctionne pas comme tandis que . pour x dans (.., ..) prendra les valeurs de (.., ..) un élément à la fois à chaque itération. Essayez d'imprimer: for x in (1,2): print (x) . Ce que vous avez fait pour .. pas dans (.., ..) est syntaxiquement incorrect.
oui, vous avez raison .. je l'ai maintenant !! GRAND MERCI d'avoir dissipé la confusion. Bonne année 2019 à vous! :)
Votre fonction renvoie une valeur dans la boucle while, quelle que soit l'entrée utilisateur, et cela provoque la fin de la boucle. Vous devez changer votre condition else en else if :
if playerchoice == 'X':
return ['X' , 'O']
elif playerchoice == 'O':
return ['O', 'X']
Merci .. Qu'est-ce qui ne va pas dans cette condition: pour playerchoice not in ('X', 'O'): playerchoice = input ('Enter X or O:')
D'abord, vous initialisiez playerchoice = '' mais à l'intérieur de la boucle, vous ne vérifiiez que playerchoice == 'X' . Mais vous n'avez pas vérifié playerchoice == 'O' . donc il est allé à l'autre et est sorti de la boucle.
Cela devrait faire le travail:
def askplayerchoice():
playerchoice = input('Enter X or O: ')
while playerchoice not in('X', 'O'):
playerchoice = input('Enter X or O: ')
if playerchoice == 'X':
return ['X', 'O']
elif playerchoice == 'O':
return ['O', 'X']
askplayerchoice()
Lorsque vous utilisez return, la boucle while sera arrêtée. Essayez ce code, il continuera à vous demander.
def askplayerchoice():
playerchoice = ''
while playerchoice not in ('X' , 'O'):
playerchoice = input('Enter X or O: ')
if playerchoice == 'X':
print('X' , 'O')
else:
print('O', 'X')
return askplayerchoice()
askplayerchoice()
Vous pouvez ajouter un bloc try catch et lancer une exception lorsque la chaîne saisie ne correspond pas à la valeur souhaitée. J'ai mis à jour votre code pour le même. Voici l'extrait de code:
def askplayerchoice():
playerchoice = ''
while playerchoice.lower() not in ('X' , 'O'):
try:
playerchoice = str(input('Enter X or O: '))
if playerchoice.lower() not in ['x','o']:
raise ValueError('A very specific bad thing happened.')
if playerchoice.lower() == 'x':
return ['X' , 'O']
else:
return ['O', 'X']
except ValueError:
playerchoice = ''
askplayerchoice()