首页 > 解决方案 > 索引超出范围,没有找到确切的错误

问题描述

我基本上是编码新手,并且一直在阅读有关 Python 的内容。但我似乎没有在我的代码中找到错误。如果你能帮助我,那就太好了。也欢迎任何纠正或观察。我有这个错误:

代码导致错误

if ((lista1[1] >= lista1[2]) and (lista1[2] >= 0)):

错误:

IndexError: list index out of range

我的代码:

import math
import numpy as np

lista1=[1,3]

def von_mises(sigma_A, sigma_B, tao_XY):
    print("Las unidades de los valores ingresados se encuentran en kpsi")
    print("Ingresar el valor del esfuerzo en X:\n")
    sigma_A = input() #Input regresa una cadena de caracteres, no valores numéricos
    sigma_A = int(sigma_A)
    print("Ingresar el valor del esfuerzo en Y:\n")
    sigma_B = input()
    sigma_B = int(sigma_B)
    print("Ingresar el valor del esfuerzo cortante Tao:\n")
    tao_XY = input()
    tao_XY = int(tao_XY)
    sigma_von = math.sqrt((pow(sigma_A, 2))-(sigma_A*sigma_B)+(pow(sigma_B, 2))+(3*(pow(tao_XY, 2))))
    lista1 = np.array([sigma_von, sigma_A, sigma_B])
    return lista1 #para simplificar el llamado de los valores que arroja esta función

def ED(res_ced, lista1):
    print("Ingresar el valor de la resistencia a la cedencia:\n")
    res_ced = input()
    res_ced = int(res_ced)
    n_ED = res_ced/lista1[0] #se invoca a la función de von mises para simplificar
    print("El factor de seguridad ED es:")
    print(n_ED)

def ECM(lista1, res_ced):
    if ((lista1[1] >= lista1[2]) and (lista1[2] >= 0)):
        n_ECM = res_ced/lista1[1]
    elif ((lista1[1] >= 0) and (lista1[2] <= 0)):
        n_ECM = res_ced/(lista1[1]-lista1[2])
    else: 
        n_ECM = res_ced/(-lista1[2])
    print("El factor de seguridad ECM es:")
    print(n_ECM)
#MAIN
res_ced=0
tao_XY=0
sigma_A=0
sigma_B=0

ED(res_ced,von_mises(sigma_A, sigma_B, tao_XY))
ECM(lista1, res_ced)

标签: pythonpython-3.x

解决方案


在 python 中,列表索引从 0 开始。如果您将代码更改为,它应该可以工作

if ((lista1[0] >= lista1[1]) and (lista1[1] >= 0))

推荐阅读