2015-01-06 4 views
0

строка 14, где моя главная проблема is.i нужно циклически перебирать каждый элемент в массиве и использовать его индекс, чтобы определить, является ли оно кратным четыре, поэтому я могу создать правильный интервал для двоичных чисел.Как пройти через индекс массива?

def decimalToBinary(hu): 

    bits = [] 
    h = [] 
    while hu > 0: 
     kla = hu%2 
     bits.append(kla) 
     hu = int(hu/2) 
    for i in reversed(bits): 
     h.append(i) 
    if len(h) <= 4: 
     print (''.join(map(str,h))) 
    else: 
     for j in range(len(h)): 
      h.index(1) = h.index(1)+1 
      if h.index % 4 != 0: 
       print (''.join(map(str,h))) 
      elif h.index % 4 == 0: 
       print (' '.join(map(str,h))) 


decimalToBinary(23)  
+2

К сожалению, это не для меня ясно, что вы хотите сделать. Любой пример даты ввода и ожидаемого результата будет наиболее полезен? – Marcin

+0

не могу использовать встроенный 'bin' ??? – Hackaholic

ответ

0

Если то, что вы ищете, индекс списка из range(len(h)) в цикле for, то вы можете изменить эту строку в for idx,j in enumerate(range(len(h))): где idx является индекс диапазона.

0

Данная строка h.index(1) = h.index(1)+1 неверна. Изменена ваша функция, поэтому, по крайней мере, она выполняет и генерирует вывод, но верно ли это, я не знаю. Во всяком случае, надеюсь, что это помогает:

def decimalToBinary(hu): 

    bits = [] 
    h = [] 
    while hu > 0: 
     kla = hu%2 
     bits.append(kla) 
     hu = int(hu/2) 
    for i in reversed(bits): 
     h.append(i) 
    if len(h) <= 4: 
     print (''.join(map(str,h))) 
    else: 
     for j in range(len(h)): 
      h_index = h.index(1)+1 # use h_index variable instead of h.index(1) 
      if h_index % 4 != 0: 
       print (''.join(map(str,h))) 
      elif h_index % 4 == 0: 
       print (' '.join(map(str,h))) 


decimalToBinary(23)  

# get binary version to check your result against. 
print(bin(23)) 

Это результаты:

#outout from decimalToBinary 
10111 
10111 
10111 
10111 
10111 


#output from bin(23) 
0b10111 
0

Вы пытаетесь присоединиться биты строки и разделить их каждые 4 бита. Вы можете изменить свой код с помощью коррекции Marcin (заменив строку синтаксической ошибки и сделав некоторые другие улучшения), но я предлагаю сделать это более «Pythonically».

Вот моя версия:

def decimalToBinary(hu): 

    bits = [] 
    while hu > 0: 
     kla = hu%2 
     bits.append(kla) 
     hu = int(hu/2) 
    h = [''.join(map(str, bits[i:i+4])) for i in range(0,len(bits),4)] 
    bu = ' '.join(h) 
    print bu[::-1] 

Объяснение линии присваивания ч:

range(0,len(bits),4): список от 0 до длины bits с шагом = 4, например. [0, 4, 8, ...]

[bits[i:i+4] for i in [0, 4, 8]: список списков, чей элемент каждые четыре элемента из битов

например. [[1,0,1,0], [0,1,0,1] ...]

[''.join(map(str, bits[i:i+4])) for i in range(0,len(bits),4)]: преобразовать внутренний список в строку

bu[::-1]: обратный строку

0

Если вы изучаете Python, хорошо делать свой путь. Как @roippi отметил,

for index, value in enumerate(h): 

даст вам доступ к как индекс и значение члена ч в каждом цикле.

Для группы 4 цифр, я бы сделал так:

def decimalToBinary(num): 
    binary = str(bin(num))[2:][::-1] 
    index = 0 
    spaced = '' 
    while index + 4 < len(binary): 
     spaced += binary[index:index+4]+' ' 
     index += 4 
    else: 
     spaced += binary[index:] 
    return spaced[::-1] 

print decimalToBinary(23) 

Результат:

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