【问题标题】:UNBOUNDLOCALERROR [duplicate]UNBOUNDLOCALERROR [重复]
【发布时间】:2020-05-16 19:03:34
【问题描述】:

我对python比较陌生,我不明白为什么会抛出错误。

ar=''
def decToBin(no):
    while(no>0):
        ar=ar+str(no%2)
        no=no//2
    print(ar[::-1])
decToBin(4)

有效的代码

def decToBin(no):
    ar=''
    while(no>0):
        ar=ar+str(no%2)
        no=no//2
    print(ar[::-1])
decToBin(4)

“ar”变量的范围应该是全局的,并且应该可以在函数内部访问。谁能解释为什么前者不起作用?

【问题讨论】:

标签: python-3.x


【解决方案1】:

使用 numpy 将十进制转换为二进制很容易:

import numpy as np
np.binary_repr(4, width=None)

【讨论】:

  • 您导入为np,然后尝试使用numpy.binary_repr
【解决方案2】:

问题是这一行:

ar=ar+str(no%2)

在分配之前,您正在引用它。

试试这个:

ar = ''
def decToBin(no):
    while(no>0):
        #ar=ar+str(no%2)
        no=no//2
    print((ar+str(no%2))[::-1])
decToBin(4)

【讨论】:

  • 你真的尝试过运行它吗?打印出来了什么?
  • 是的。打印“0”。
  • 那么你认为 0 是 4 的基数 2 表示吗?
  • 不,当然不是,但这不是问题所在......
  • 所以你给出了一个不会引发异常的错误答案。这对 OP 有什么帮助?
猜你喜欢
  • 1970-01-01
  • 2023-01-18
  • 2015-06-24
  • 2012-03-05
  • 2016-03-12
  • 1970-01-01
相关资源
最近更新 更多