В третьем условии, по идее должно дописываться 1 справа, но выдает ошибку. Программа правильно написана, помогите только с третьим условием

def f(x, end):
    if x > end:
        return 0
    if x == end:
        return 1
    return f(x + 2, end) + f(x + 3, end) + f(x + '1', end)
print(f(3,12) * f(12,25))

введите сюда описание изображения


Ответы (4 шт):

Автор решения: DiHASTRO

Ошибка пишет следующее: операция сложения для операндов типа 'int' и 'str' невозможна

Чтобы складывать всё как строки, вам нужно явно преобразовать данные в строки посредством функции

str(num)

Где num - ваша переменная.

Чтобы "дописать" числу справа единицу, можно поступить странновато, но интуитивно +/- понятно:

int(str(x) + '1')

То есть такие шаги (допустим, x = 28 изначально):

  1. str(x): 28 -> '28'

  2. str(x) + '1': '28' -> '281'

  3. int(str(x) + '1'): '281' -> 281

Но я бы посоветовал воспользоваться знаниями математики и применить следующее:

x * 10 + 1: 28 -> 281

Как-то так

→ Ссылка
Автор решения: Valera
def f(x, end):
    if x > end:
        return 0
    if x == end:
        return 1
    return f(x + 2, end) + f(x + 3, end) + f(x + 1, end)
print(f(3,12) * f(12,25))

У вас 1 тип str, в ошибке об этом явно написано

→ Ссылка
Автор решения: Kostya .ZΞRO

Давай-те обратим внимание на то что нам пишет компилятор:

unsupported operand type(s), for +: 'int' and 'str'

Мы не можем сложить int и str. Это как огонь с водой - ничего не выйдет. Python не может складывать int и str. Все по отдельности - str складывается с str, int складывается с int. Это было во-первых.

А во-вторых, в коде допущена ошибка. Почему в третьем действии на 6 строке значение типа str? Вот вам и решение проблемы. На всякий случай код:

def f(x, end):
    if x > end:
        return 0
    if x == end:
        return 1
    return f(x + 2, end) + f(x + 3, end) + f(x + 1, end)
print(f(3,12) * f(12,25))

Вот вам и решение проблемы :)

→ Ссылка
Автор решения: CrazyElf

Если хотите "приписать справа" к целому числу одну цифру, то просто умножьте это число на 10 и прибавьте нужную цифру:

f(x*10 + 1, end)

А так просто числа со строками "складывать" нельзя, тем более если в итоге нужно получить опять число. Правильно будет что-то такое тогда, если хотите именно таким способом:

f(int(str(x) + '1'), end)
→ Ссылка