2017-02-22 13 views
1

私は整数を16進数に変換する関数を作成しています。 2つの褒め言葉とネガを扱うためにはもっと多くの作業が必要ですが、今はコアロジックが機能するよう取り組んでいます。ここで私が持っているものです。リスト要素をループ内の辞書キーに置き換えます

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がリストにある場合、それは辞書にあり、リスト内のその要素は一致するdict値"A"に変更されます。ここからどこに行くのかわかりません

+0

は論外 '進()'関数を使用していますか?申し訳ありませんが、あなたが自分自身をロールしたいと思っているのかどうかは分かりませんが、 'hex()'メソッドはintを変換することができます。例えば 'hex(4512)'が '0x11a0'を出力する –

+0

hex()私はintを小数点に変換するためにこれをやっているので、変換の仕組みをよく理解しています。さらに、これはコーディングに適しています。 –

答えて

1

enumerateを使用して(index, value)タプルを反復することができます。それぞれの値に対して、dict.getを使用してsymdictから値を取得するか、または2番目のパラメータとして渡されたデフォルト値を使用できます。 symdictのキーが同様に整数であるので、私は、文字列の代わりに整数を含むように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のインデックスにどんなgetリターンを割り当てます。

あなたはちょうどあなたがhex組み込み使用できる16進数表現にintを変換したい場合:

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

優秀、ありがとう!それがトリックでした。私はコードを実行し、列挙についてもっと学びます。これは、将来私が使うことのできるもののようです。 –

関連する問題