我正在python上设置新代码,以从系统的十六进制,八进制,二进制或十进制转换。第一个动作是输入一个数字,然后输入其系统,控制台将在不同系统中返回该值。
import msvcrt
entrada=""
Base="10"
dec=0
def peticion():
en= input("ingrese el valor numerico: ")
b= input("ingrese la base del numero ingresado: ")
decimal= int (str(en), int(b))
return(en, b, decimal)
def mostrar(b_s, dec, ent):
sistemas=[hex, int, oct, bin]
for x in range(len(sistemas)):
if b_s==sistemas[x]:
print("usted igreso el numero {} en el sist. {}".format(ent,b_s))
else:
print(sistemas[x](int(dec))[2:])
def cal_base(base):
if base=="10":
b=int
elif base=="16":
b=hex
elif base=="8":
b=oct
else:
if base=="2":
b=bin
return(b)
entrada, base, dec = peticion()
#print("usted igreso el numero {} con base ({})".format(entrada,base))
b=cal_base(base)
mostrar(b, dec, entrada)
msvcrt.getch()
答案 0 :(得分:2)
此行print(sistemas[x](int(dec))[2:])
仅在sistemas[x]
为hex
,oct
或bin
时才有效,所有这些都返回带有前缀的字符串。当sistemas[x]
为int
时,您会得到<some int>[2:]
,这是行不通的。 int不是字符串,因此您无法对其进行切片,即使您无法删除前缀也是如此。
一种可能的解决方法是特殊情况下的代码仅在转换后的数字为字符串时删除前缀:
def mostrar(b_s, dec, ent):
sistemas=[hex, int, oct, bin]
for x in range(len(sistemas)):
if b_s==sistemas[x]:
print("usted igreso el numero {} en el sist. {}".format(ent,b_s))
else:
dec_en_sistema = sistemas[x](int(dec))
if isinstance(dec_en_sistema, str):
print(dec_en_sistema[2:])
else:
print(dec_en_sistema)
这是使用try
/ except
(并且没有index变量)的替代版本,应该多一些pythonic:
def mostrar(b_s, dec, ent):
sistemas = [hex, int, oct, bin]
for sistema in sistemas:
if sistema == b_s:
print("usted igreso el numero {} en el sist. {}".format(ent, b_s))
else:
dec_en_sistema = sistema(int(dec))
try:
# elimina el prefijo
print(dec_en_sistema[2:])
except TypeError:
print(dec_en_sistema)