J'essaie d'augmenter le nombre de réponses correctes de 1 chaque fois que la réponse des utilisateurs est correcte. Cependant, une fois analysée dans la fonction display_result (), la fonction correcte affiche "0 correct"
Je n'ai pas été en mesure de faire fonctionner cela, peu importe comment j'essaie de me déplacer, donc toute aide est vraiment appréciée.
code removed for academic integrity
Si l'utilisateur a répondu correctement à 1 des 3 questions, je m'attends à ce que la réponse soit "Vous avez répondu 1 question sur 3 correctement."
Actuellement, il afficherait que vous avez répondu correctement à 0 question sur 3 "
3 Réponses :
Dans menu_option () vous ne modifiez jamais count , donc il reste à 0. Deux correctifs simples. Remplacez par:
else:
print("Invalid input, please try again")
return get_user_input()
Ou simplement
return check_solution(user_solution, real_solution, count)
Une autre chose que j'ai remarquée: dans get_user_input () , vous avez besoin pour renvoyer le résultat des appels récursifs:
count = check_solution(user_solution, real_solution, count) return count
Impressionnant! Cela a fonctionné avec quelques ajustements mineurs car il appelait la fonction check_solution () deux fois pour chaque entrée d'index. Mais fonctionne maintenant: D.
Il y a un certain nombre de problèmes:
correct = menu_option (option, correct) alors qu'à la place vous devriez accumuler les scores corrects comme correct + = menu_option que vous n'attribuez jamais à count , je suppose que cela devrait être count = check_solution (...) li >
option de retour pour index == 5 car cela ajoutera au correct .
Votre première puce est incorrecte car check_solution () met à jour le compteur: count = count + 1
@JohnnyMopp ouais mais je ne le vois pas défini à l'extérieur, en plus c'est une mauvaise pratique.
Je n'ai pas renvoyé le compte correctement, mais malheureusement, c'est pour un défi scolaire, donc je n'ai pas été autorisé à changer les noms des fonctions, les variables de paramètres ni rien dans la fonction main ().
Enfin, le code s'exécute comme prévu (python3.6 + est requis):
#!/usr/bin/env python3
import random
def get_user_input():
while True:
try:
index = int(input("Enter your choice: "))
if 0 < index < 6:
return index
except ValueError:
print("Invalid input, should be Integer.\n")
else:
print("Invalid input, please try again")
def get_user_solution(problem):
while True:
print("Enter your answer")
user_solution = input(f"{problem} = ")
try:
return float(user_solution)
except ValueError:
print("Invalid input, should be float\n")
def check_solution(user_solution, solution, count):
if user_solution == solution:
print("Correct.")
return count + 1
else:
print("Incorrect.")
return count
def menu_option(index, count):
first_num = random.randrange(1, 21)
second_num = random.randrange(1, 21)
if index == 1:
problem = f"{first_num} + {second_num}"
real_solution = first_num + second_num
print(real_solution)
user_solution = get_user_solution(problem)
return check_solution(user_solution, real_solution, count)
if index == 2:
problem = f"{first_num} - {second_num}"
real_solution = first_num - second_num
print(real_solution)
user_solution = get_user_solution(problem)
return check_solution(user_solution, real_solution, count)
if index == 3:
# blah blah blah, repeated code but removed for neatness
pass
if index == 5:
option = 5
return option
def display_result(total, correct):
if total == 0:
print("You answered 0 questions with 0 correct")
print("Your score is 0.0%")
else:
percentage = round(correct / total * 100, 2)
print(
f'You answered {total} questions with {correct} correct.\n'
f'Your score is {percentage}%'
)
def display_intro():
pass
def display_menu():
pass
def display_separator():
print('-'*20)
def main():
display_intro()
display_menu()
display_separator()
option = get_user_input()
total = 0
correct = 0
while option != 5:
total = total + 1
correct = menu_option(option, correct)
option = get_user_input()
print("Exit the quiz.")
display_separator()
display_result(total, correct)
if __name__ == "__main__":
main()