I am currently learning Python so I have no idea what is going on.
# Given N, Amount of money in the house. Adjacent houses can't be stolen. Find the max amount that can be stolen
# 6,7,1,30,8,2,4
numbers = input()
n = numbers.split(",")
t = numbers.count(",")
def rob(nums, i):
if i <= 0:
return 0
return max(rob(nums, i-2) nums[i], rob(nums, i-1))
print(rob(n, t))
When I run the program, entering in numbers for Num and I, it returns this:
TypeError: unsupported operand type(s) for : 'int' and 'str'
CodePudding user response:
The values in the n array are of type 'str'
, not 'int'
. This is because the .split
method returns type 'str'
You need to convert them to 'int'
in order to do the mathematical operations as you intend. Something like this:
n = [int(val) for val in n]
Put this after the line where n is initialized.
CodePudding user response:
To solve the type error, you need to do as follows in the return line:
return max(rob(nums, i-2) int(nums[i]), rob(nums, i-1))
The problem is that you are adding the return value of rob(nums, i-2)
to the value nums[i]
which is a string, and addition of an int to string is undefined. Note that the split function returns a list of strings (which is what n
is in your code).
Furthermore, I know you were not asking about whether the algorithm works or not, but for input 30,1,1,30
your code outputs 31
, but the max that can be stolen is 60
.