Joelg4dea

Python | Convertir número de base(x) a base(y)

Apr 16th, 2021 (edited)
385
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import pyautogui            # Para obtener los datos
  2. import win32clipboard       # Para copiar el numero convertido
  3.  
  4. #       Datos de entrada
  5. base = pyautogui.prompt('Ingrese la base numerica origen [maximo 36]')
  6. baseF = pyautogui.prompt('Ingrese la base numerica destino [maximo 36]')
  7. num = pyautogui.prompt('Ingrese su numero (se aceptan fraccionarios)')
  8. gloat = 0
  9.  
  10. #       Separacion de las fracciones
  11. if "," in num:
  12.   num, frac = num.split(",")
  13.   gloat = 1
  14.  
  15. if "." in num:
  16.   num, frac = num.split(".")
  17.   gloat = 1
  18.  
  19. #       Proceso de asignacion
  20. car = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  21. numFinalE = ""
  22. numFinalF = ""
  23. numLen = len(num)
  24. base = int(base)
  25. baseF = int(baseF)
  26. decimal = 0
  27. infinito = 0
  28. a = numLen-1
  29.  
  30. #       Proceso [Conversion de la parte ENTERA a base 10]
  31. for b in range(0, numLen, 1):
  32.   numV = int(num[a], base=base)
  33.   decimal = decimal+numV*(base**b)
  34.   a = a-1
  35.  
  36. #       Proceso [Conversion de la parte FRACCIONAL a base 10]
  37. if gloat == 1:
  38.   fracLen = len(frac)
  39.   b = -1
  40.   for a in range(0, fracLen, 1):
  41.     numF = int(frac[a], base=base)
  42.     numF = numF*(base**b)
  43.     decimal = decimal+numF
  44.     b = b-1
  45.  
  46. #       Determinacion de entero y fraccion
  47. decimalE = int(decimal)
  48. decimalF = decimal-decimalE
  49.  
  50. #       Proceso [Conversion de la parte ENTERA a base X]
  51. while decimalE != 0:
  52.   num = decimalE%baseF
  53.   num = car[num]
  54.   numFinalE = num+numFinalE
  55.   decimalE = int(decimalE/baseF)
  56.  
  57. #       Proceso [Conversion de la parte FRACCIONAL a base X]
  58. while decimalF != 0 and infinito < 24# Le asigne un limite de numeros fraccionarios (24) ya que pueden existir fraccionarios infinitos .-.
  59.   if numFinalF == "":
  60.     numFinalF = ","
  61.   num = int(decimalF*baseF)
  62.   decimalF = (decimalF*baseF)-num
  63.   num = car[num]
  64.   infinito = infinito+1
  65.   numFinalF = numFinalF+num
  66.  
  67. #       Informacion de salida
  68. numFinal = numFinalE+numFinalF
  69. pyautogui.alert(numFinal)
  70.  
  71. #       Copiar al portapapeles
  72. win32clipboard.OpenClipboard()
  73. win32clipboard.EmptyClipboard()
  74. win32clipboard.SetClipboardText(numFinal, win32clipboard.CF_TEXT)
  75. win32clipboard.CloseClipboard()
  76.  
  77. #       Fin del algoritmo
  78. exit()
RAW Paste Data