Неподдерживаемая ошибка операнда, сгенерированная из пользовательской факториальной функции - PullRequest
0 голосов
/ 09 июля 2019
f = input("Enter the number to be squared : ")
def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)
print(factorial(f))    

Я пытаюсь получить факториал входного числа

При запуске кода я получаю следующую ошибку: TypeError: unsupported operand type(s) for -: 'str' and 'int'

Ответы [ 3 ]

1 голос
/ 09 июля 2019

Вы должны ввести свой ввод в float или integer, чтобы он был принят в вашем математическом уравнении. Вы даже можете поместить это в цикл while вместе с try: и except ValueError:, чтобы скрыть ошибку при вводе или выдавать сообщения, когда ваш пользователь не удовлетворяет типу вашей переменной f. Вы можете прочитать документацию для получения дополнительной информации.

f = int(input("Enter the number to be squared : "))

OR

f = float(input("Enter the number to be squared : "))

В исходном коде f будет принимать любое строковое значение, даже если пользователь вводит число 2, например. Поэтому, когда вы вызываете функцию, которая решает ваш факториал, она выдаст ошибку, потому что, конечно, вы не можете делать нотацию факториала для строки.

0 голосов
/ 09 июля 2019
  1. Вы забыли закрывающую скобку ')' в конце скобки.
  2. Тип данных переменной 'f' должен быть целым числом, и вы передаете строку. Поскольку 'input' по умолчанию назначает строковый тип данных переменной.

Внести следующие изменения:

f = int(input("Enter the number to be squared : "))
print(factorial(f))

в строки 1 и последнюю строку соответственно.

0 голосов
/ 09 июля 2019

Первая проблема, которую я вижу, связана с вашими типами данных. Вам нужно будет преобразовать f в целое число или число с плавающей точкой, чтобы его можно было использовать в математических операциях в вашей функции. Вы также можете включить некоторую обработку исключений в случае, если пользователь вводит что-то отличное от числа.

Вы можете преобразовать тип, используя int(f) или float(f)

Как уже упоминал другой комментатор, в конце print(factorial(f).

вам также не хватает скобки.

Если вы сделаете эти изменения, ваш код должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...