2012-08-01 2 views
1

Decimal을 16 진수로 변환하는 프로그램을 작성했습니다.이 프로그램은 Python의 hex() 함수와 같습니다. 이 프로그램은 '2559'까지 올바른 값을 인쇄합니다. 더 큰 숫자에 대해 16 진수의 올바른 값을 얻는 방법. 코드는 2600 십진수 값에서 올바른 16 진수 표현을 제공하지 못합니다. 여기에 내 코드입니다 : 둘 이상의 실험에 대한 코드를 작성하는 경우큰 숫자의 경우 Python에서 10 진수로

  ######################################### 
       #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

파이썬의 16 진수()를 사용할 수 있다고 생각합니다 http://docs.python.org/library/functions.html#hex 찾고 계신 것이 맞습니까? 아니면 코드를 수정하도록 요청하고 있습니까? – irrelephant

답변

0

, 당신은 파이썬의 진수() (docs.python.org/library/functions.html#hex)를 사용합니다. 즉, 자신의 구현을 수정하도록 도와 줄 것입니다.

10 진수를 16 진수로 변환하는 경우를 사용하여 케이스를 사용하고 있으며, 제한된 횟수만큼 코드를 처리하는 이유는 코드가 최대 한도까지 작동하는 이유입니다. 나는 다음과 같은 별도의 기능을 16 진수 변환에 소수를 정의 제안 :

N의 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 

. 한정된 수에

당신의 DectoHex 기능에서
DEC_TO_HEX_SINGLE_DIGIT = "ABCDEF" 
def toHex(n): # 0 < n < 16 
    return DEC_TO_HEX_SINGLE_DIGIT[n] 

, 당신이 추가하는 16 진수 :

같은 일을 훨씬 짧은 방법은 직접 인덱스를 기반으로 문자열에서 문자를 잡아하는 것 타임스. 재귀 또는 루프를 사용하여 16 진수 문자열을 작성해야합니다. 재귀 예제는 다음과 같습니다.

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

int 함수에 대한 기본 키워드 인수를 사용하지 마십시오.

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

또는 hex() 함수는 사용자가 찾고있는 것을 수행합니다.

+2

해당 함수는 십진수를 16 진수로 변환하지 않으며 16 진수 문자열을 정수로 변환합니다. 뿐만 아니라, OP는'hex()'에 대해서 알고 있습니다 (질문의 첫 번째 줄을 읽으십시오). – DSM

관련 문제