2017-02-22 89 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

非常好,谢谢!那就是诀窍。我将通过代码运行并详细了解枚举。这似乎是我未来可以利用的东西。 –