2012-08-01 136 views
1

我已經編寫了一個程序來將十進制轉換爲十六進制,這相當於python中的十六進制()函數。該程序打印正確的值直到'2559'。如何爲較大的數字獲得正確的十六進制值。代碼無法從2600十進制值中給出正確的十六進制表示。這裏是我的代碼:用於大數字的十進制到十六進制的Python

  ######################################### 
       #Decimal to Hexadecimal Conversion # 
      ######################################### 


def DectoHex(n): 

    if n <= 16: 
     return n 

    elif n>16:   

     if n%16 == 10: 
      x = 'A' 
     elif n%16 == 11: 
      x = 'B' 
     elif n%16 == 12: 
      x = 'C' 
     elif n%16 == 13: 
      x = 'D' 
     elif n%16 == 14: 
      x ='E' 
     elif n%16 == 15: 
      x = 'F' 
     else: 
      x = n%16    
     print x  
     n = n/16   
     print n 

     if n == 10: 
      n = 'A' 
     elif n == 11: 
      n = 'B' 
     elif n == 12: 
      n = 'C' 
     elif n == 13: 
      n = 'D' 
     elif n == 14: 
      n ='E' 
     elif n == 15: 
      n = 'F' 

     elif n>=16: 

      if n%16 == 10: 
       n = str(n/16) + 'A' 
      elif n%16 == 11: 
       n = str(n/16) + 'B' 
      elif n%16 == 12: 
       n = str(n/16) + 'C' 
      elif n%16 == 13: 
       n = str(n/16) + 'D' 
      elif n%16 == 14: 
       n = str(n/16) + 'E' 
      elif n%16 == 15: 
       n = str(n/16) + 'F' 
      else: 
       n = str(n/16) + str(n%16) 
      print n 
     return str(n) + str(x) 


print "Would you like to continue:" 
print "Enter 'Y' to continue, 'N' to quit" 
Str = str (raw_input("> ")) 

while True: 

     if Str == 'Y': 
      print "Enter a decimal number:" 
      dec = int (raw_input("> ")) 

      Hex = DectoHex(dec) 

      print "The number in base 16 is:", Hex 

      print "Enter 'Y' to continue, 'N' to quit" 
      Str = str (raw_input("> ")) 

     elif Str == 'N': 
      print "Good Bye!" 
      break 
     else: 
      print "Plesae Enter 'Y' or 'N'" 
      Str = str (raw_input("> ")) 
+0

我想你可以使用Python的十六進制()http://docs.python.org/library/functions.html#hex這就是你在找什麼?還是你要求我們修復你的代碼? – irrelephant 2012-08-01 08:19:26

回答

0

如果你超過一個實驗編寫任何代碼,你應該使用Python的十六進制()(docs.python.org/library/functions.html#hex)。這就是說,我會幫你修復你自己的實現。

您正在使用案例來將小數轉換爲基本16位字符,並且這樣做的次數是有限的,這就解釋了爲什麼您的代碼工作達到極限。我建議在定義類似下面的一個單獨的函數十進制爲十六進制轉換:

def toHex(n): 
    if n % 16 == 10: 
     x = 'A' 
    elif n % 16 == 11: 
     x = 'B' 
    elif n % 16 == 12: 
     x = 'C' 
    elif n % 16 == 13: 
     x = 'D' 
    elif n % 16 == 14: 
     x = 'E' 
    elif n % 16 == 15: 
     x = 'F' 
    else: 
     x = n % 16    
    return x 

注意,N%16可能被存儲在一個臨時變量。

做同樣的事情短得多的方式是直接從字符串基於其索引抓取人物:

DEC_TO_HEX_SINGLE_DIGIT = "ABCDEF" 
def toHex(n): # 0 < n < 16 
    return DEC_TO_HEX_SINGLE_DIGIT[n] 

在你DectoHex功能,您要添加的十六進制數字在有限數量的倍。您應該使用遞歸或循環來構建您的十六進制字符串。遞歸示例如下:

def DectoHex(n): 
    if n < 16: 
     return toHex(n) 
    mod = n % 16 
    n /= 16 
    return DectoHex(n) + str(toHex(mod)) 
-1

爲什麼不使用int函數的base關鍵字參數?

def decToHex(n): 
    return int(n,base=16) 

或者,hex()函數也將執行您正在查找的內容。

+2

該函數不會將十進制轉換爲十六進制,它會將十六進制字符串轉換爲整數。同樣,OP知道'hex()'(讀取問題的第一行)。 – DSM 2012-11-05 20:11:38