#python #python-3.x
#python #python-3.x
Вопрос:
Вот что мне нужно закодировать:
- Обнаружение пользовательского ввода для слов: «добавить» и «под», иначе вычитание.
- Если дан неправильный ответ, следует повторно задать вопрос.
- Если пользователь выбирает либо, он должен сгенерировать два числа из 1-9, число 1> = число 2, и пользователю следует задать ответ.
- Если ответ правильный, он должен перейти к следующему раунду (наш учитель сказал, что должно быть 5 раундов, в каждом конце раунда код должен попросить пользователя снова ввести «добавить» или «sub».
- Если пользователь дает неправильный ответ, он должен повторно задать вопрос.
- Код завершается, когда выполняются все 5 раундов, или если пользователь вводит «end» в любое время с сообщением «До свидания».
Мой код:
import random
i = 1
while i < 6:
answer1 = input("Hello, please type "add" for adding, or "sub" for subtracting")
first_number = random.randrange(1, 9)
second_number = random.randrange(1, first_number)
one = str(first_number)
two = str(second_number)
if answer1 == "add":
the_answer = first_number second_number
the_answer_actual = str(the_answer)
user_answer = int(input(one " " two " = "))
if the_answer == user_answer:
print("The answer is correct!")
i = 1
elif the_answer != user_answer:
print("Wrong answer. The correct answer was " the_answer_actual)
i = 1
else:
continue
elif answer1 == "sub":
the_answer = first_number - second_number
the_answer_actual = str(the_answer)
user_answer = int(input(one " - " two " = "))
if the_answer == user_answer:
print("The answer is correct!")
i = 1
elif the_answer != user_answer:
print("Wrong answer. The correct answer was " the_answer_actual)
i = 1
else:
continue
elif answer1 == "end" or i < 6:
print("Goodbye.")
break
else:
pass
========================================================================
Проблема:
Этот код ошибки появляется, когда заканчивается 5-й раунд:
- Трассировка (последний последний вызов): -Файл «C:UserskinghPycharmProjectspythonProjectmain.py «, строка 8, в
- second_number = random.randrange(1, first_number)
- Файл «C:UserskinghAppDataLocalProgramsPythonPython39librandom.py «, строка 316, в случайном порядке
- повысить значение ошибки («пустой диапазон для randrange() (%d, %d, %d)» % (istart, istock, width)) Ошибка значения: пустой диапазон для randrange() (1, 1, 0)
Комментарии:
1. Вообще говоря
pass
, используется в качестве заполнителя,continue
может быть более подходящим дляelse
предложения.2. Не могли бы вы явно описать, что не работает? При задании вопросов рекомендуется описывать, в чем заключается ваша конкретная проблема, каков ожидаемый результат и что было предпринято.
3. Хорошо, я знаю, что это оффтопический ответ, но было бы хорошо, если бы вы лучше назвали свои параметры. вместо
answer1
того, чтобы иметь что-то вродеfunction_selction
, вместоanswer2
того, чтобы иметьactual_solution
, и вместоans2
того, чтобы иметьactual_solution_string
. Это позволяет нам менее запутанно понимать, что происходит, поскольку нам не нужно думать: «подождите, был ли ans2 строкой или int, что вообще такое ans2 ??». Это также облегчит вам работу над вашим собственным кодом4. Это сделано, я забыл, что люди могут не знать, что я написал xd
5. Я сделал i = 1 вместо i = 1 Кроме того, теперь код работает правильно, единственная проблема заключается в том, что он не останавливается после 5-го ответа.
Ответ №1:
Вам нужно сделать это как в add, так и в sub, поскольку это не работает ни в том, ни в другом:
if str(answer2) == useranswer:
или
useranswer = int(input("..."))
в противном случае вы будете сравнивать строку с int, которая никогда не будет работать. первое решение преобразует вычисленное вами число в строку, второе решение преобразует входные данные, которые вы получаете от пользователя, в int . Оба работают, но вы не можете сравнить строку с int .
Если вы хотите провести больше сравнений с пользовательским вводом (например, проверить, был ли результат больше / меньше того, что вы ввели), я бы рекомендовал первое решение, так как у вас всегда будет пользовательский ввод как int, пока вы его не сравните.
Ответ №2:
Вам просто нужно преобразовать ответ в целое число, прежде чем сравнивать его :
if answer2 == int(user_answer):
и тогда он работает отлично (естественно, вы должны сделать это и для вычитания)
РЕДАКТИРОВАТЬ: и вам нужно добавить разрыв после правильного ответа
print("The answer is correct!")
break
Комментарии:
1. Это требование не выполняется для вычитания: «число 1> = число 2»
2. Я выполнил требование, добавив это second_number = random.randrange(1, first_number) однако по какой-то причине программа не останавливается после i>= 6 . (КОД ОБНОВЛЕН)
Ответ №3:
Возможно, вам придется использовать if ans2 == user_answer:
вместо if answer2 == user_answer:
, поскольку это сравнение строк.
РЕДАКТИРОВАТЬ: вы также можете использовать i = 1
вместо этого, чтобы убедиться, что он останавливается после указанного количества итераций.