在Python中得到这个错误TypeError:不支持的操作数类型为:'str'和'int'

问题描述:

我试图编写一个软件,可以计算统计方差,我在python中使用列表,问题是python将输入数据识别为字符串而不是整数(因为它们是数字,我必须用'em'来计算) 这导致我出现以下错误:在Python中得到这个错误TypeError:不支持的操作数类型为:'str'和'int'

TypeError:不支持的操作数类型/:'str'和'int'

下面是代码,所以你可以给它看一下,它使用西班牙语单词作为变量(我是墨西哥人),但我希望你能理解它。

def varianza(finn , datos): 
    import array 
    from array import array 
    import time 
    ind = 1 
    nind = int(ind) 
    intervaloss = 1 
    intervalossn = int(intervaloss) 
    intervalo = 1 

    rango1 = array('i') 
    rango1 = [0] * 100 

    rango2 = array('i') 
    rango2 = [0] * 100 

    frecuencia = [0] * 100 
    for i in range(0,finn): 
     print("Dime el RANGO del (%d) intervalo", intervalo) 
     print("De") 
     rango1[nind] = input(">") 

     print("A") 
     rango2[nind] = input(">") 

     print("Dime la FRECUENCIA del (%d) intervalo" , intervalossn) 
     frecuencia[nind] = input(">") 
     nind = nind + 1 
     intervalossn = intervalossn + 1 
     intervalo = intervalo + 1 
    nind = ind 
    numindice = int(ind) 
    numindice2 = int(ind) 
    print("De acuerdo ahora calcularé las marcas de clase") 
    time.sleep(2) 
    nind = 1 
    numindice2 = 1 
    indice = 1 


    marca = [0] * 100 

    while nind <= finn: 

     marca[nind] = ((rango1[nind] + rango2[nind])/2) 
     print(marca[nind]) 
     nind = nind + 1 
    marcanum = int(marca) 
    print("Listo!") 
    print("Lo siguiente es calcular la multiplicacion de las frecuencias por las marcas de clase") 
    time.sleep(2) 
    nind = 1 
    while nind <= finn: 
     fx[nind] = frecuencia[nind] * marca[nind] 

     print(fx[nind]) 
     nind = nind + 1 

    print("Listo") 
    print("Ya casi terminanamos!") 
    print("Ahora debo calcular la media aritmetica") 
    print("Espera, se estan realizando los calculos") 
    print("Para esto necesitare que me des una pequeña ayuda") 

    print(fx[1:fin]) 
    resultado = input("¿Puedes sumar todos los numeros de arriba e indicarmelo aqui abajo? \n>") 
    print("Gracias!") 
    time.sleep(1) 
    print("Siguiendo con el calculo") 
    aritmetica = resultado/datos 
    print(aritmetica, "es tu media aritmetica") 
    time.sleep[1] 

    print("Realizando siguientes calculos...") 
    time.sleep(2) 

    nind = 1 

    while nind <= finn: 
     xmenxnum[nind] = (marca[nind] - aritmetica) * (marca[nind] - aritmetica) 

     print(xmenxnum[nind]) 
     nind = nind + 1 
    os.system('cls') 
    print(" Equis menos media aritmetica al cuadrado: ") 
    print(xmenxnum[1:fin]) 


    nind = 1 
    while nind <= finn: 
     xmenxnum[nind] = (marca[nind] - aritmetica) * (marca[nind] - aritmetica) 
     fxx2[nind] = xmenxnum[nind] * frecuencia[nind] 
     print(fxx2[nind]) 
     nind = nind + 1 
    print("¿Puedes decirme la suma de los siguientes numeros?") 
    sumatoriafinal = input(">") 
    varianza = sumatoriafinal/datos 
    varianzanum = int(varianza) 
    desviacion = math.sqrt(varianzanum) 

    print("Tu varianza es", varianzanum) 
    print("Y tu desviacion estandar es", desviacion) 
+0

只投你想参选作为这样一个int:INT( “4”)。具体来说,用户输入的任何内容都应该作为int来投射。 – digitaLink

+0

在附注上,为什么要在函数定义中导入?这将导致每次调用函数时都会导入这些导入,这是浪费和不必要的。只需在脚本的顶部导入所需的所有内容即可。 –

我相信你的问题在这里。

sumatoriafinal = input(">") 
varianza = sumatoriafinal/datos 

input()函数接受用户的输入和converts it to a string。这就是为什么你收到你的TypeError: unsupported operand type(s) for /: 'str' and 'int'错误 - 你试图分割一个字符串(sumatoriafinal)和一个整数(datos)。

尝试这样做,而不是:

sumatoriafinal = input(">") 
varianza = int(sumatoriafinal)/datos 
+1

注意:如果这是Python 3,那么是的,这就是'input'的作用(它不一定是AFAICT;打印是Py3样式,但是'__future__'导入可以在Py2中使用,并且可能会被省略。在Py2中,它做了一些愚蠢的事情(相当于将Py3的'input'包装在'eval'中),并且OP可能会看到一个使用Py2的'input'并且不正确地借用Py3的例子。 – ShadowRanger