Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Daniel Bedialauneta
- #Manera 1
- def decimar1(cadena):
- hexa="0123456789abcdef"
- numero=0
- if cadena[0]=="-":
- if cadena[1]=="b":
- for i in range(-1,-len(cadena[2:])-1,-1):
- numero+=(2**(-i-1))*int(cadena[i])
- return -numero
- elif cadena[1]=="o":
- for i in range(-1,-len(cadena[2:])-1,-1):
- numero+=(8**(-i-1))*int(cadena[i])
- return -numero
- elif cadena[1]=="x":
- for i in range(-1,-len(cadena[2:])-1,-1):
- numero+=(16**(-i-1))*hexa.index(cadena[i])
- return -numero
- else:
- return -int(cadena[2:])
- else:
- if cadena[0]=="b":
- for i in range(-1,-len(cadena[1:])-1,-1):
- numero+=(2**(-i-1))*int(cadena[i])
- return numero
- elif cadena[0]=="o":
- for i in range(-1,-len(cadena[1:])-1,-1):
- numero+=(8**(-i-1))*int(cadena[i])
- return numero
- elif cadena[0]=="x":
- for i in range(-1,-len(cadena[1:])-1,-1):
- numero+=(16**(-i-1))*hexa.index(cadena[i])
- return numero
- else:
- return int(cadena[2:])
- #Manera 2, en esta no hay tantos if's
- def decimar2(cadena):
- todo="0123456789abcdef"
- sistema="bodx" #binario, octadecimal, decimal y hexadecimal
- nums=2,8,10,16
- numero=0
- if cadena[0]=="-":
- 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
- for i in range(-1,-len(cadena[2:])-1,-1):
- numero+=(x**(-i-1))*todo.index(cadena[i])
- return -numero
- else:
- x=nums[sistema.index(cadena[0])]
- for i in range(-1,-len(cadena[1:])-1,-1):
- numero+=(x**(-i-1))*todo.index(cadena[i])
- return numero
- #En cuanto a la eficiencia, seguramente, la primera manera sea un pelín mejor,
Add Comment
Please, Sign In to add comment