如何在此代码上修复“'int'对象不可下标”

时间:2019-05-16 15:45:15

标签: python-3.x

我正在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()

1 个答案:

答案 0 :(得分:2)

此行print(sistemas[x](int(dec))[2:])仅在sistemas[x]hexoctbin时才有效,所有这些都返回带有前缀的字符串。当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)