【问题标题】:why does my ide shows error saying unsupported operand types?为什么我的 ide 显示错误说不支持的操作数类型?
【发布时间】:2022-01-01 08:33:11
【问题描述】:
def intToBin(n):
if n == 0:
return 0
elif n == 1:
return 1
elif n > 1:
return ((n % 2 + 10 * intToBin((n/2))))
a = 6
b = intToBin(a)
print(b)
【问题讨论】:
标签:
python
python-3.x
integer
【解决方案1】:
您需要将 int(n/2) 传递给函数,因为如果 n/2 是浮动的,当值小于 1 时会导致代码错误。
见下文解决方案
def intToBin(n):
if n == 0:
return 0
elif n == 1:
return 1
elif n > 1:
return ((n % 2 + 10 * intToBin(int(n/2))))
a = 6
b = intToBin(a)
print(b)
输出:
110
【解决方案2】:
您的代码:
def intToBin(n):
if n == 0:
return 0
elif n == 1:
return 1
elif n > 1:
return ((n % 2 + 10 * intToBin((n/2))))
a = 6
b = intToBin(a)
print(b)
在python3中,n/2是浮点除法运算。所以在递归调用中,正在传递一个浮点数。现在当这个浮点数小于 1 时,没有满足条件的 if-else 块,因此函数返回 None。递归调用中将 10 与 None 相乘会导致错误。
为了调试和更好的理解,打印n:
def intToBin(n):
print(n)
...rest of your code
哪个输出:
6
3.0
1.5
0.75
Traceback (most recent call last):
File "zz.py", line 11, in <module>
b = intToBin(a)
File "zz.py", line 8, in intToBin
return ((n % 2 + 10 * intToBin((n/2))))
File "zz.py", line 8, in intToBin
return ((n % 2 + 10 * intToBin((n/2))))
File "zz.py", line 8, in intToBin
return ((n % 2 + 10 * intToBin((n/2))))
TypeError: unsupported operand type(s) for *: 'int' and 'NoneType'
修复:
如上所述,要么使用int(n/2) 或n//2,要么使用函数的默认基数或返回大小写。