elcocodrilotito

1.2

Feb 15th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.96 KB | None | 0 0
  1. #Daniel Bedialauneta
  2. #Manera 1
  3. def decimar1(cadena):
  4.     hexa="0123456789abcdef"
  5.     numero=0
  6.     if cadena[0]=="-":
  7.         if cadena[1]=="b":
  8.             for i in range(-1,-len(cadena[2:])-1,-1):
  9.                 numero+=(2**(-i-1))*int(cadena[i])
  10.             return -numero
  11.         elif cadena[1]=="o":
  12.             for i in range(-1,-len(cadena[2:])-1,-1):
  13.                 numero+=(8**(-i-1))*int(cadena[i])
  14.             return -numero
  15.         elif cadena[1]=="x":
  16.             for i in range(-1,-len(cadena[2:])-1,-1):
  17.                 numero+=(16**(-i-1))*hexa.index(cadena[i])
  18.             return -numero
  19.         else:
  20.             return -int(cadena[2:])
  21.        
  22.     else:
  23.         if cadena[0]=="b":
  24.             for i in range(-1,-len(cadena[1:])-1,-1):
  25.                 numero+=(2**(-i-1))*int(cadena[i])
  26.             return numero
  27.         elif cadena[0]=="o":
  28.             for i in range(-1,-len(cadena[1:])-1,-1):
  29.                 numero+=(8**(-i-1))*int(cadena[i])
  30.             return numero
  31.         elif cadena[0]=="x":
  32.             for i in range(-1,-len(cadena[1:])-1,-1):
  33.                 numero+=(16**(-i-1))*hexa.index(cadena[i])
  34.             return numero
  35.         else:
  36.             return int(cadena[2:])
  37.  
  38. #Manera 2, en esta no hay tantos if's
  39. def decimar2(cadena):
  40.     todo="0123456789abcdef"
  41.     sistema="bodx" #binario, octadecimal, decimal y hexadecimal
  42.     nums=2,8,10,16
  43.     numero=0
  44.     if cadena[0]=="-":
  45.         x=nums[sistema.index(cadena[1])] #dependiendo de si sea b,o,d ó x, escojo 2,8,10,16, respectivamente, es decir, las bases correspondientes
  46.         for i in range(-1,-len(cadena[2:])-1,-1):
  47.             numero+=(x**(-i-1))*todo.index(cadena[i])
  48.         return -numero
  49.     else:
  50.         x=nums[sistema.index(cadena[0])]
  51.         for i in range(-1,-len(cadena[1:])-1,-1):
  52.             numero+=(x**(-i-1))*todo.index(cadena[i])
  53.         return numero
  54.  
  55. #En cuanto a la eficiencia, seguramente, la primera manera sea un pelín mejor,
Add Comment
Please, Sign In to add comment