【问题标题】: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,要么使用函数的默认基数或返回大小写。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-23
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多