我正在尝试创建十进制到二进制转换器,但是,我注意到有些值被忽略,最后一个值没有输入到我创建的列表中。
#Here we create a new empty list.
binary = []
n = int(input("Enter number: "))
while n > 1:
n = n//2
m = n%2
binary.append(m)
binary.reverse()
print( " ".join( repr(e) for e in binary ))
答案 0 :(得分:1)
这是纠正后的代码:
binary = []
n = int(input("Enter number: "))
while n > 0:
m = n%2
n = n//2
binary.append(m)
if len(binary)==0:
binary.append(0)
binary.reverse()
print( " ".join( repr(e) for e in binary ))
您的问题与此stackoverflow question重复检查链接。
祝你好运:)答案 1 :(得分:1)
n = int(input("Enter number: "))
print("{0:0b}".format(n)) # one-line alternate solution
if n == 0: # original code with bugs fixed
binary = [0]
else:
binary = []
while n > 0:
m = n%2
n = n//2
binary.append(m)
binary.reverse()
print("".join( repr(e) for e in binary ))
答案 2 :(得分:1)
正如PM 2Ring所说,元组分配可能是要走的路。使您的代码更短: - ) ...也改变 n> 1 到 n> = 1
binary = []
n = int(input("Enter number: "))
while n >= 1:
n, m = n // 2, n % 2
binary.append(m)
binary.reverse()
print( " ".join( repr(e) for e in binary ))
答案 3 :(得分:0)
您的算法很接近,但您需要在执行除法之前保存余下的。您还需要更改while
条件,并在n
的输入值为零时进行特殊处理。
我已经修复了你的代码&把它放在循环中以便于测试。
for n in range(16):
old_n = n
#Here we create a new empty list.
binary = []
while n:
m = n % 2
n = n // 2
binary.append(m)
# If the binary list is empty, the original n must have been zero
if not binary:
binary.append(0)
binary.reverse()
print(old_n, " ".join(repr(e) for e in binary))
<强>输出强>
0 0
1 1
2 1 0
3 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1
8 1 0 0 0
9 1 0 0 1
10 1 0 1 0
11 1 0 1 1
12 1 1 0 0
13 1 1 0 1
14 1 1 1 0
15 1 1 1 1
正如Blckknght在评论中提到的那样,有一个标准函数可以一步为你提供商和余数
n, m = divmod(n, 2)
它可以很方便,但除了使代码更具可读性之外,它并没有真正提供太多好处。另一种选择是使用元组赋值来并行执行操作:
n, m = n // 2, n % 2
这是一个很好的做法,特别是当你刚接触编码时,在纸上完成算法以了解它正在做什么。如果您的代码没有提供预期的输出,那么在战略位置添加一些print
调用是个好主意,以检查变量的值是否符合您的预期。或者学习使用适当的调试器。 ;)