В третьем условии, по идее должно дописываться 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 шт):
Ошибка пишет следующее: операция сложения для операндов типа 'int' и 'str' невозможна
Чтобы складывать всё как строки, вам нужно явно преобразовать данные в строки посредством функции
str(num)
Где num - ваша переменная.
Чтобы "дописать" числу справа единицу, можно поступить странновато, но интуитивно +/- понятно:
int(str(x) + '1')
То есть такие шаги (допустим, x = 28 изначально):
str(x): 28 -> '28'str(x) + '1': '28' -> '281'int(str(x) + '1'): '281' -> 281
Но я бы посоветовал воспользоваться знаниями математики и применить следующее:
x * 10 + 1: 28 -> 281
Как-то так
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, в ошибке об этом явно написано
Давай-те обратим внимание на то что нам пишет компилятор:
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))
Вот вам и решение проблемы :)
Если хотите "приписать справа" к целому числу одну цифру, то просто умножьте это число на 10 и прибавьте нужную цифру:
f(x*10 + 1, end)
А так просто числа со строками "складывать" нельзя, тем более если в итоге нужно получить опять число. Правильно будет что-то такое тогда, если хотите именно таким способом:
f(int(str(x) + '1'), end)
