1
votes

La valeur analysée n'affiche pas la valeur correcte lorsqu'elle est affichée

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 "


0 commentaires

3 Réponses :


1
votes

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


1 commentaires

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.



0
votes

Il y a un certain nombre de problèmes:

  • vous faites correct = menu_option (option, correct) alors qu'à la place vous devriez accumuler les scores corrects comme correct + =
  • dans menu_option que vous n'attribuez jamais à count , je suppose que cela devrait être count = check_solution (...)
  • vous ne devriez pas faire option de retour pour index == 5 car cela ajoutera au correct .

3 commentaires

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 ().



0
votes

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()


0 commentaires