python正在跳过我的if语句

时间:2016-05-05 20:18:23

标签: python binary

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

这个程序将int转换为二进制,但它跳过第8-13行为什么?

3 个答案:

答案 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 ......太多了)