2017-02-22 9 views
1

Я работаю над функцией, которая скрывает целое число до шестнадцатеричного. Есть еще много работы, которая должна быть выполнена с комплиментом двух человек и обработкой негативов, но сейчас я просто работаю над тем, чтобы заставить основную логику работать. Вот что у меня есть:Заменить элемент списка ключом словаря в цикле

def intToHexaBin(num): 
    num = abs(num) 
    symdict={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"} 
    rlist=[] 
    while(num!=0): 
     rlist.append(str(num%16)) 
     num//=16 
    rlist=rlist[::-1] 
    for i in rlist: 
     if int(i) in symdict: 
      print("Not sure how to swap list element for a dict value") 

    print(''.join(rlist)) 


intToHexaBin(4512) 

Я хочу, чтобы выход выглядеть следующим образом для этого примера:

11A0 

Я пытаюсь использовать цикл для перебора rlist и проверить, если элемент в rlist соответствует ключу в symdict. Если это так, я хочу поменять элемент списка на значение словаря, которое оно сопоставлено. Итак, если в списке найдено 10, оно будет найдено в словаре, и этот элемент в списке будет изменен на "A" соответствующее значение dict. Я не знаю, куда идти

+0

использует 'шестигранник)' функции (из вопроса? Извините, не уверен, хотите ли вы использовать roll-your-own, но метод 'hex()' может преобразовать int, в качестве примера, 'hex (4512)' output' 0x11a0' –

+0

Метод hex() определенно полезен, но Я делаю это, чтобы преобразовать ints в десятичные знаки, чтобы лучше понять, как работает преобразование. Плюс это хорошая практика для кодирования. –

ответ

1

Вы можете использовать enumerate для перебора более (index, value) кортежей. Для каждого значения вы можете использовать dict.get либо получить значение от symdict, либо использовать значение по умолчанию, переданное в качестве второго параметра. Тогда просто присвоить независимо от конкретных get возвращается к индексу в rlist:

def intToHexaBin(num): 
    num = abs(num) 
    symdict={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"} 
    rlist=[] 
    while(num!=0): 
     rlist.append(num%16) 
     num//=16 
    rlist=rlist[::-1] 
    print(rlist) 
    for idx, val in enumerate(rlist): 
     rlist[idx] = symdict.get(val, str(val)) 

    print(''.join(rlist)) 

Обратите внимание, что я изменил rlist содержать целые числа вместо строк, так как ключи в symdict являются целыми числами, а также.

В случае, если вы просто хотите конвертировать int в шестнадцатеричное представление вы можете использовать hex: встроенную команду

>>> hex(4512) 
'0x11a0' 
+0

Отлично, спасибо! Это сделал трюк. Я собираюсь запустить код и узнать больше о перечислении. Это похоже на то, что я мог бы использовать в будущем. –

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

  • Нет связанных вопросов^_^