#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}')