Почему мой код (добавление и вычитание Python) не работает?

#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 вместо этого, чтобы убедиться, что он останавливается после указанного количества итераций.