我试图制作一种算法,该算法可以打印数字的二进制值,但是由于某种原因,它会退出而不是打印。
exponent = 4
binary = ""
def decToBin(userInput):
global exponent, binary
while (2**exponent) == 0:
if (2**exponent) <= userInput:
userInput = userInput - (2**exponent)
binary = binary + "1"
else:
binary = binary + "0"
exponent = exponent - 1
return binary
print(decToBin(16))
答案 0 :(得分:0)
您需要将while (2**exponent) == 0
更改为while exponent >= 0
,否则就不会进入while循环的内部或外部,因为2**exponent
总是> 0,尽管每次迭代都减少exponent
。另外,不需要global exponent, binary
;只需将它们放在函数中即可。
请注意,选择exponent = 4
时,userInput
的范围应限制为[0,2 **(指数+ 1)-1] = [0,31]。
这是另一种算法(假设userInput
是正整数):
def decToBin(userInput):
if userInput == 0:
return '0'
binary = ''
while userInput > 0:
binary = str(userInput % 2) + binary
userInput //= 2
return binary
答案 1 :(得分:-1)
为什么要做什么?
以userInput
为16和exponent
为4
的开头。 2**4
== 16
。
16
是!= 0
,因此您的while 2**exponent == 0
永远不会触发,也永远不会进入其阻止...
您需要
while exponent > 0:
获得结果。您正在减少每个循环的指数,因此一旦它越过0变成负数,就可以完成-不会一次使2 **指数变大。