J'ai reçu un problème de base de Python qui m'oblige à faire un simple quiz d'addition. Cependant, je n'arrive pas à renvoyer ma variable de comptage qui est censée mettre à jour le nombre de questions correctes auxquelles l'utilisateur a répondu, ce qui la rend bloquée à 0. J'ai essayé de définir le nombre de variables dans chaque fonction la contenant comme argument mais je le fais toujours ne fonctionne pas. Dites si l'utilisateur doit répondre à 4 questions et en a obtenu 3 correctes, cela affichera "Vous avez répondu à 4 questions dont 3 correctes", mais à la place, il affiche "Vous avez répondu à 4 questions dont 0 correcte".
5 Réponses :
Comme indiqué dans le commentaire, vous initialisez count à 0 chaque fois que votre check_solution ou menu_option est appelée.
Il semble que vous souhaitiez utiliser count = count la variable transmise à votre fonction.
Juste une modification rapide:
En fait, vous n'avez pas besoin de renvoyer count. En Python, les variables sont passées par référence afin que votre décompte soit mis à jour tant qu'il est passé à vos fonctions.
Vous devez récupérer le retour de check_solution (user_answer, randsum, count) et renvoyer ce compte
Chaque fois que vos fonctions check_solution et menu_option sont appelées, vous initialisez count = 0 . Cela signifie que chaque fois que l'utilisateur demande une autre question, count est réinitialisé à 0, deux fois. Vous allez vouloir supprimer ces appels count = 0 , et vous voulez également capturer vos mises à jour pour les compter dans menu_option . Votre programme final devrait ressembler à ceci:
import random
def get_user_input():
count = 0
user_input = int(input("Enter 1 to play or press 5 to exit: "))
while user_input > 5 or user_input <= 0:
user_input = int(input("Invalid menu option. Try again: "))
menu_option(user_input, count)
if user_input == "5":
print("Exit!")
return user_input
def get_user_solution(problem):
answer = int(input(problem))
return answer
def check_solution(user_solution, solution, count):
curr_count = count
if user_solution == solution:
curr_count += 1
print("Correct.")
else:
print("Incorrect.")
print(curr_count)
return curr_count
def menu_option(index, count):
if index == 1:
num1 = random.randrange(1, 21)
num2 = random.randrange(1, 21)
randsum = num1 + num2
problem = str(num1) + " " + "+" + " " + str(num2) + " " + "=" + " "
user_answer = get_user_solution(problem)
count = check_solution(user_answer, randsum, count) # count returned by check_solution is now being captured by count, which will update your count variable to the correct value
return count
def display_result(total, correct):
if total == 0:
print("You answered 0 questions with 0 correct.")
print("Your score is 0%. Thank you.")
else:
score = round((correct / total) * 100, 2)
print("You answered", total, "questions with", correct, "correct.")
print("Your score is", str(score) + "%.")
def main():
option = get_user_input()
total = 0
correct = 0
while option != 5:
total = total + 1
correct = menu_option(option, correct)
option = get_user_input()
print("Exiting.")
display_result(total, correct)
main()
C'est l'aboutissement de plusieurs erreurs de logique.
Vous donnez count aux fonctions en entrée et vous les écrasez immédiatement.
def menu_option (index, count = 0): . Cela définira count = 0 si aucune variable n'est fournie (créant une valeur par défaut), sinon il définira count comme tout ce que vous passez dans la fonction Votre fonction check_solution () renvoie un nombre, mais lorsque vous l'appelez avec check_solution (user_answer, randsum, count) vous n'attribuez jamais cette valeur renvoyée à n'importe quoi / l'utiliser à nouveau.
sortie ), puis sortie de retour au lieu de nombre de retours Les corriger ne résout toujours pas complètement le problème, mais se rapproche un peu plus (maintenant il reste bloqué sur "vous avez répondu à x questions avec 1 bonne"):
import random
def generate_question():
num1 = random.randint(1, 25)
num2 = random.randint(1, 25)
question = '{} + {} = '.format(num1, num2)
answer = num1 + num2
return question, answer
def main():
correct = 0
total = 0
option = True
while option != '5':
total += 1
question, answer = generate_question()
user_guess = int(input(question))
if user_guess == answer:
print('Correct.')
correct += 1
else:
print('Incorrect.')
option = input("Enter 5 to exit, or anything else to play again")
print('You answered {} questions with {} correct'.format(total, correct))
main()
Vous avez la possibilité d'initialiser count à 0 avant toutes les fonctions, créant ainsi une variable globale. Ensuite, vous n'aurez pas besoin de le déclarer sur aucune fonction ni de le passer en argument.
dans toutes les fonctions qui utilisent count, vous définissez
count = 0même si la fonction le prend déjà comme paramètre. Je pense que vous écrasezcountle faisant être remis à 0 pour chaque nouveau problème arithmétique généré?