Зацикливание основной функции при сбросе переменных

#python #loops

#python #циклы

Вопрос:

Только начал изучать Python на моем курсе по основам вычислительной техники. Мы должны создать программу, которая создает практические наборы для математики. Пользователь вводит два числа, оператор, затем решение, и программа сообщает им, правильные они или неправильные. После этого программа должна вернуться к циклу, чтобы пользователь мог продолжить практику. Предполагается, что программа выполняет цикл в общей сложности для 5 практических наборов. У меня есть цикл, но когда он выполняется, он повторяет входные данные, первоначально введенные пользователем, вместо сброса, поэтому пользователь больше не может вводить какие-либо входные данные. Чего мне не хватает?

Я попробовал while True: цикл для моих глобальных переменных, но это просто приводит к тому, что основная функция зацикливается без завершения программы. Назначение очень четко диктует, что необходимо использовать цикл while, поскольку мой профессор включил небольшие подсказки, чтобы помочь нам.

 num1 = int(input("Enter First Input: "))
num2 = int(input("Enter Second Input: "))
op = str(input("Enter Operator: "))
UserSolution = int(input("Enter Solution: "))
res1 = num1 num2
res2 = num1-num2
res3 = num1*num2
res4 = num1/num2
timesCorrect = 0
timesIncorrect = 0

def main ():
    counter = 0
    while counter < 4:      
        print(num1)
        print(num2)
        print(op)
        print(UserSolution)
        counter = counter   1
  

Функция действительно зацикливается так, как я хочу, но она не сбрасывает переменные так, как я хочу.

Комментарии:

1. Просто не используйте глобальные переменные и вместо этого объявляйте их внутри цикла

Ответ №1:

Вам нужно переместить свои операторы ввода в цикл, например:

 timesCorrect = 0
timesIncorrect = 0

def main ():
    counter = 0
    while counter < 4:
        num1 = int(input("Enter First Input: "))
        num2 = int(input("Enter Second Input: "))
        op = str(input("Enter Operator: "))
        UserSolution = int(input("Enter Solution: "))
        res1 = num1   num2
        res2 = num1 - num2
        res3 = num1 * num2
        res4 = num1 / num2
        print(num1)
        print(num2)
        print(op)
        print(UserSolution)
        counter = counter   1
  

Кроме того, если вы хотите, чтобы это повторялось пять раз, вам нужно изменить сравнение счетчика на < 5 или <= 4 вместо < 4 .

Комментарии:

1. Хорошая реализация настройки того, куда идут входные данные, но ваш скрипт не сообщает пользователю, правильные они или нет.

2. Да, я предположил, что пользователь еще не добрался до этой части своего задания и просто пытался заставить цикл работать.

Ответ №2:

Вероятно, это будет немного выходить за рамки вашего задания, но вот непроверенное предложение:

 # Mix it up a little by hiding the user's suggested solution with getpass()
from getpass import getpass

### Set iterator variable to avoid hard-coding the script
max_iterations = 5


def evaluate_expression(first_input, second_input, operator):
    """
        Function to handle arithmetic
    """
    my_solution = 0
    if operator == ' ':
        my_solution = first_input   second_input
    elif operator == '-':
        my_solution = first_input - second_input
    elif operator == '/':
        # Can't divide by zero, so we have to handle that.
        if second_input != 0:
            my_solution = first_input / second_input
        else:
            my_solution = 0
    elif operator == '*':
        my_solution = first_input * second_input
    return my_solution

def main():

    ### Counters
    correct_guesses = 0
    incorrect_guesses = 0
    try_counter = 1

    while try_counter <= max_iterations:      
        num1 = int(input("Enter First Input: "))
        num2 = int(input("Enter Second Input: "))
        op = str(input("Enter Operator: "))
        UserSolution = int(getpass("Enter Solution: ")) # Hide the input

        ### We van evaluate the expression and return the result to a variable using eval()
        # temp_solution = eval(f'{num1} {op} {num2}')

        ## Traditional evaluation method
        #if op == ' ':
        #    my_solution = num1   num2
        #elif op == '-':
        #    my_solution = num1 - num2
        #elif op == '/':
        #    my_solution = num1 / num2
        #elif op == '*':
        #    my_solution = num1 * num2

        # Call our expression and evaluate the results
        if evaluate_expression(num1, num2, op) == UserSolution:
            print('You're correct!')
            correct_guesses  = 1
        else:
            print('Incorrect answer!')
            incorrect_guesses  = 1

        try_counter  = 1
    print(f'Number of correct guesses: {correct_guesses]nNumber of incorrect guesses: {incorrect_guesses}')