2016-05-05 2 views
-2
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, почему?

+0

вы должны создать пример минимального, полного и проверяемого ... btw, при этом вы можете узнать, почему его не работает http://stackoverflow.com/help/mcve –

+0

в чем ваш вопрос? – gefei

+0

Вы можете найти [эту статью в Википедии об управлении потоком программного обеспечения] (https://en.wikipedia.org/wiki/Control_flow). По крайней мере, вы можете «вручную» пройти эту программу (вручную), чтобы вывести возможные результаты; и определить логическую ошибку, с которой вы сталкиваетесь. – motoku

ответ

1

в этот бит:

a = (N1 - 4) 
    if a < 0: 
     a = 0 
    else: 
     a = 1 
     N1 = a 

После else, сначала установите значение а 1, а затем скопировать это значение N1. Итак, ваша программа забыла, что такое N1, и результат для b и c всегда будет таким же. (Такая же проблема повторится и для b и c.)

Кстати, есть более эффективные способы определения двоичного представления числа. Подсказка: используйте оператор &, чтобы узнать, является ли последний бит числа 1, и используйте оператор >>, чтобы сдвинуть все биты числа вправо.

+0

wow я чувствую себя глупым! Большое спасибо! Я избавился от N1 = a и добавил N2 = a после a = (N1 - 4), а затем после a = 1 добавил N1 = N2 @ Han-Kwang Nienhuys – darkfenix54

0

... Я тестировал его, и он работает! (он работает только тогда, когда < 0 так только с N1 < 4, потому что a = N1-4, 4 - 4 = 0, 0 = 0, поэтому 0 не < 0, а оператор if не работает с 4, и, естественно, не работает с 5, 6, 7 ... тоже)

1

Наивный способ исправить это - удалить N1 в каждом случае и вычесть разные значения при запуске, если операторы, поскольку N1 не обновляется во время выполнения второго цикла while. Вы всегда должны избежать этого происходит в ваших кодов:

N1 = int(input("What interger do you wish to turn to binary (from 0 - 7 only!)")) 

время (N1> 7) или (N1 < 0): N1 = Int (вход ("Вы вход должен быть от 0 - 7 только!")) в то время как True: если 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 
+0

Мне не разрешено использовать двоичную встроенную функцию. – darkfenix54

Смежные вопросы