N1 = int(input("What interger do you wish to turn to binary (from 0 - 7 only!)"))
while (N1 > 7) or (N1 <0) :
N1 = int(input("You input must be from 0 - 7 only!"))
while True:
if N1 == 0:
print ("0 0 0")
break
else:
a = (N1 - 4)
if a < 0:
a = 0
else:
a = 1
N1 = a
b = (N1 - 2)
if b < 0:
b = 0
else:
b = 1
N1 = b
c = (N1 - 1)
if c < 0:
c = 0
else:
c = 1
print(a,b,c)
break
答案 0 :(得分:1)
在这一点:
a = (N1 - 4)
if a < 0:
a = 0
else:
a = 1
N1 = a
在else
之后,首先将a的值设置为1,然后将该值复制到N1。所以,你的程序忘记了N1是什么,b和c的结果总是一样的。 (b和c再次发生同样的问题。)
顺便说一句,有更有效的方法可以找出数字的二进制表示。提示:使用&
运算符查明数字的最后一位是1
,并使用>>
运算符将数字的所有位移到右侧。
答案 1 :(得分:1)
修复它的简单方法是在每种情况下删除N1并在运行if语句时减去不同的值,因为在执行第二个while循环时N1不会更新。您应始终在代码中避免这种情况发生:
N1 = int(input("What interger do you wish to turn to binary (from 0 - 7 only!)"))
而(N1> 7)或(N1 <0): N1 = int(输入(“你输入必须只有0 - 7!”)) 而真: 如果N1 == 0: 打印(“0 0 0”) 破
else:
a = (N1 - 4)
if a < 0:
a = 0
else:
a = 1
b = (N1 - 6)
if b < 0:
b = 0
else:
b = 1
c = (N1 - 7)
if c < 0:
c = 0
else:
c = 1
print(a,b,c)
break
但你可以用迭代的方式做到:
N1 = int(input("What interger do you wish to turn to binary (from 0 - 7 only!)"))
if (N1 > 7) or (N1 <0) :
N1 = int(input("You input must be from 0 - 7 only!"))
else:
binary = []
if N1 == 0:
print ("0 0 0")
for i in range (0,3):
if (N1 - pow(2,(2 - i))) >= 0:
binary.append(1)
N1 = N1 - pow(2,(2 - i))
else:
binary.append(0)
print binary
答案 2 :(得分:0)
...我已经测试过了,它确实有效! (它仅在&lt; 0时才起作用,因此只有N1&lt; 4因为a = N1-4,4-4 = 0,0 = 0,所以0不是&lt; 0,if语句不起作用有4个,自然也没有用5,6,7 ......太多了)