2017-02-22 96 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迭代和檢查,看是否元素rlistsymdict中的鍵匹配。如果是這樣,我想交換列表元素爲它匹配的字典值。因此,如果在列表中找到10,它將在詞典中找到,並且該列表中的元素將更改爲"A"匹配的詞典值。我不知道該從哪裏出發

+0

使用'十六進制()'函數出了問題?十六進制()方法可以轉換爲int,例如,十六進制(4512)'輸出'0x11a0' –

+0

十六進制()方法絕對有用,但我正在通過將整數轉換爲小數來完成此工作,以便更好地瞭解轉換的工作原理。另外這是編碼的好習慣。 –

回答

1

您可以使用enumerate遍歷(index, value)元組。對於每個值,您可以使用dict.getsymdict獲取值或使用作爲第二個參數傳遞的默認值。然後,只需指定無論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

非常好,謝謝!那就是訣竅。我將通過代碼運行並詳細瞭解枚舉。這似乎是我未來可以利用的東西。 –