#python #python-2.x
#python #python-2.x
Вопрос:
Код использует оператор, который был выбран в предыдущем воспроизведении, даже после выбора другого оператора после повторного воспроизведения.
Я снова проверил функции и все еще не могу найти, в чем именно проблема.
import random
print "Welcome!"
def get_choice():
print "What are we practicing? n1. Addition ( ) n2. Subtraction (-) n3. Multiplication (*) n4. Division (/)"
option = raw_input('> ')
while option != ' ' and option != '-' and option != '*' and option != '/':
print "You typed %r which is not valid. Please enter ' , -, *,or /'" %(option)
option = raw_input('>')
return option
operation = get_choice()
def ask_question (operation):
numbers = []
for y in range(0,2):
x = random.randint(1,100)
numbers.append(x)
num1 = numbers[0]
num2 = numbers[1]
print num1, operation, num2
response = int(raw_input('>'))
return num1, num2, response
num1, num2, response = ask_question(operation)
def check_response(response):
if operation == ' ':
answer = num1 num2
elif operation == '-':
answer = num1 - num2
elif operation == '*':
answer = num1 * num2
else:
answer = num1 / num2
i = 0
if response == answer:
print "Correct!"
elif response != answer:
while i < 2:
print "Wrong! Try again: n%r %r" %(num1, num2)
i = 1
response = raw_input()
if response != answer and i >= 2:
print "Sorry. You run out of chances."
check_response(response)
def repeat():
while True:
print "Do you want to play again?"
again = raw_input('>')
if again == 'y' or again == 'Y':
get_choice()
ask_question(operation)
check_response(response)
else:
break
repeat()
Добро пожаловать! Что мы практикуем?
- Сложение ( )
- Вычитание (-)
- Умножение (*)
- Разделение (/)
*
18 * 4
72 Правильно! Вы хотите снова поиграть?
y
Что мы практикуем?
- Сложение ( )
- Вычитание (-)
- Умножение (*)
- Разделение (/)
94 * 83
Комментарии:
1. При первом вызове
get_option()
вы присваиваете результат глобальной переменнойoperation
. Когда вы вызываете его снова, вы игнорируете возвращаемое значение. Вы также игнорируете возвращаемое значениеask_question
.
Ответ №1:
Причина , по которой он застревает на одной операции , заключается в том , что вы не улавливаете никакого возвращаемого значения get_choice()
при вызове его внутри repeat()
. Я настроил raw_input()
to input()
, чтобы заставить его работать (я на python 3.X, и вам также следует обновить, поскольку 2.X будет прекращен в этом году!), И, похоже, сейчас он работает нормально для меня:
def repeat():
while True:
print("Do you want to play again?")
again = input('>')
if again == 'y' or again == 'Y':
operation = get_choice() # you need to assign "operator" to the return value
ask_question(operation)
check_response(response)
else:
break
repeat()
Выборочный вывод:
Welcome!
What are we practicing?
1. Addition ( )
2. Subtraction (-)
3. Multiplication (*)
4. Division (/)
>
82 72
>154
Correct!
Do you want to play again?
>y
What are we practicing?
1. Addition ( )
2. Subtraction (-)
3. Multiplication (*)
4. Division (/)
> -
57 - 28 # the sign did in fact change to -
>