J'écris un code Python pour percer un utilisateur en anglais et frais, en fonction de l'option, il vous poserait des questions en anglais ou en français et accepterait des réponses, elle vérifierait ensuite les réponses entrées dans une liste et incrémenter le score, Cependant, après la première question, mon code s'arrête en cours d'exécution
J'ai essayé d'inclure une boucle et de faire une partie de la fonction en boucle. Pourtant, rien P>
#Python program to drill a student in french
import sys
option = 0
score=0
english_questions=['What is Thank you in French___?', 'What is you are welcome in French___?', 'What is no in French___?', 'What is Pardon in French___?', 'What is yes in French?___?']
french_questions =['What does Merci mean in English___? ', 'What does derien mean in English___?','What does No mean in English___?', 'What does pardon mean in English___?', 'What does oui mean in English___?' ]
french_answers =['merci', 'derien', 'no', 'pardon', 'oui']
english_answers=['thankyou', 'welcome', 'no', 'pardon', 'yes']
number_of_questions = 5
question_number = 0
print('Welcome to English-French Vocabulary Drill')
print('*********************************************')
print('To be drilled in English Press 1')
print('To be drilled in French Press 2')
print('*********************************************')
#a try except block to handle invalid option type
if option not in (1, 2):
try:
option=input('Please Enter option:')
except:
print('Invalid option, Please enter 1 or 2')
if option == 1:
questions = english_questions
answers = french_answers
elif option == 2:
questions = french_questions
answers = english_answers
#Function to check answer
def check_answer(user_answer, questions, answers):
if user_answer in answers:
print('')
print('Correct')
global score
score +=1
global question_number
question_number +=1
else:
print('')
print('Incorrect, try again')
global guesses
guesses +=1
global number_of_questions
while question_number < number_of_questions:
x = questions[question_number]
user_answer = answers[question_number]
print('')
user_answer = input (x + ':')
print (check_answer(user_answer, x, answers))
print('')
print('score : ' +str(score) )
4 Réponses :
ici: questions = questions [question_number] code>, vous attribuez à questions code> une valeur de la liste code>. Lorsque la boucle est exécutée une seconde fois, vous aurez une lettre, car vous demanderez au programme de trouver des questions [question_number] [question_number] code>. Peut-être devriez-vous essayer d'utiliser différents noms variables? P>
Je ne comprends sincèrement
En plus de la réponse de Rasgel, vous devez modifier toutes vos déclarations A = + B CODE> sur A + = B CODE> pour une incrémentation correcte. P>
Mon compteur de score fonctionne maintenant et il se termine après 5 questions. mais cela continue de demander la première question de plus que
J'ai un peu corrigé le code. Il y avait beaucoup d'erreurs.
merci, j'ai compris la Déclaration globale, mon seul problème maintenant, c'est qu'il continue à répéter les mêmes questions encore et encore
Avez-vous copié mon code? Il ne pose pas la même question dans la mienne.
Votre code a une erreur de syntaxe sur la ligne 26 (Je suppose que l'indentation n'a pas survécu au transfert), mais de manière générale, il est préférable de ne pas réécrire le code d'un utilisateur, de les signaler à des erreurs spécifiques.
Mine fixe, j'ai une dernière erreur, elle n'y affiche aucun, après correct
Remplacer Imprimer (check_answer (user_answer (user_answer, réponses)) code> avec check_answer (user_answer, réponses) code>
Déclarez et initialisez ces variables en haut du script: puis comparer les options contre les chaînes, c'est une entrée utilisateur: p> if option == '1':
questions = english_questions
answers = french_answers
elif option == '2':
questions = french_questions
answers = english_answers
Veuillez formater votre code. Vous pouvez convertir une section entière en code en le joignant de backtsticks, c'est-à-dire: `` `` Le code `` `va produire
le code code>ferait ça maintenant
Vous réalisez le
essayer / sauf code> est inutile car vous ne vérifiez rien. Vous prenez simplement une entrée afin que cela ne pose jamais une exception, à l'exception du clavierInterrupter ...De plus, ce
si option! = 1 ou 2 et tapez (option) == int: code> sera toujours vrai. Changer de:si option non in (1, 2) et type (option) == int: code>Vous ne vérifiez aucune autre valeur. Par exemple. J'ai entré 4 en entrée et il est allé directement à `Question_Number
OP, la portée de votre question a changé chaque fois que vous l'avez modifiée. Au moment où quelqu'un écrit une réponse, la question a changé.