0

Пока кодирование программы двоичного преобразования для моего друга я продолжал получать ошибку индекса за пределами диапазона при использовании команды X[N] = Y, в которой X был списком, N был номером индекса - это список (представленный переменная под названием Bit) и Y было значением, которое I присваивало переменной в индексе N в списке X.Ошибка индекса вне диапазона, python 3.5. Только в цикле «while»

Ну, я должен был просто поместить код и объяснить, но в основном он говорит, что индекс за пределами, тогда как код Numbers[Bit] = 0 или Number[Bit] = 1 находится в цикле while, однако он работает везде в коде. Переменная Bit равно целому числу 7, и список Numbers содержит переменные a, b, c, d, e, f, g и h все разделяли смысл есть 0-7 индексов. И я попытался с Bit значением 0, и это тоже не сработало. Однако код работал нормально, пока секции кода Numbers[Bit] были помещены вне цикла while. Есть идеи?

a = 0 
b = 0 
c = 0 
d = 0 
e = 0 
f = 0 
g = 0 
h = 0 

def loop(): 
    Bit = 7 
    Numbers = [a, b, c, d, e, f, g, h]; 
    Num = 128 
    Input = int(input("What Number do you want to convert?")) 

    while Input > 0: 
     if Input > Num: 
      Input = Input - Num 
      Numbers[Bit] = 1 
     else: 
      Numbers[Bit] = 0 

     Bit = Bit - 1 
     Num = Num/2 
    Numbers = str(Numbers) 
    print (Numbers) 

loop() 
+0

Он был первоначально установлен 7. – Byard

+0

'Num/2' не использует целочисленное деление, оно использует истинное деление. Вы получите фракции, а не 0. Это не вся проблема, но это не помогает. –

ответ

0

Вы сравниваете с Input > Num, который должен быть Input >= Num.

Чтобы получить биты в правильном порядке, вы можете использовать:

def loop(): 
    number = int(input("What Number do you want to convert?")) 
    bits = [(number>>b) & 1 for b in range(7,-1,-1)] 
    print(bits) 
+0

'Num' также становится долей. –

+0

Спасибо! Это решило проблему, хотя я понял, что список неправильный путь для двоичной, но большой помощи. – Byard

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