【问题标题】:Unknow cause for list index out of range error列表索引超出范围错误的未知原因
【发布时间】:2021-06-20 21:43:45
【问题描述】:

''' 当我运行测试用例时,我的程序的一小部分导致了我的问题。我检查以确保用户输入了三个值。如果用户没有输入三个值,它会显示一条消息,然后再次调用该函数。如果用户第一次输入三个值,它会进行计算并打印并继续。这就是它变得不稳定的地方,如果用户没有输入三个值,它会再次提示用户,直到他们输入三个值,然后它进行并打印计算,然后给我超出索引错误。我在那里有一个打印语句来检查输入列表,并且那里有三个值......我完全不知道为什么我在第二遍而不是第一次得到错误。 '''

def cos_angle():
    get_data = input("Please enter the known two sides and the angle\n" +
                     "across from the unknown side.\n" +
                     "(Entries should be separated by a space) ").split()

    if len(get_data) != 3:
        print("\nIncorrect number of entries.  You should input three numbers.\n")
        cos_angle()

    side_a = int(get_data[0])
    side_b = int(get_data[1])
    angle = int(get_data[2])
    print(get_data)
    c = sqrt((side_a**2 + side_b**2) - 2*side_a*side_b*cos(rad(angle)))
    print("\nThe value of the missing side of the triangle is {:.4f}.\n".format(c))

cos_angle()

【问题讨论】:

  • 使用循环,而不是递归。有多个具有不同值的get_data 变量。
  • 或者递归调用后返回。

标签: python index-error


【解决方案1】:

有多个具有不同值的get_data 变量。

使用循环,而不是递归。

def cos_angle():
    get_data = input("Please enter the known two sides and the angle\n" +
                     "across from the unknown side.\n" +
                     "(Entries should be separated by a space) ").split()

    while len(get_data) != 3:
        print("\nIncorrect number of entries.  You should input three numbers.\n")
        get_data = input("Please enter the known two sides and the angle\n" +
                         "across from the unknown side.\n" +
                         "(Entries should be separated by a space) ").split()

    side_a = int(get_data[0])
    side_b = int(get_data[1])
    angle = int(get_data[2])
    print(get_data)
    c = sqrt((side_a**2 + side_b**2) - 2*side_a*side_b*cos(rad(angle)))
    print("\nThe value of the missing side of the triangle is {:.4f}.\n".format(c))

cos_angle()

【讨论】:

  • 所以效果很好。谢谢你。我在使用递归的程序的另一部分中看到了同样的问题(我现在才发现它)。我肯定也会考虑在这里做一个循环,但我只是好奇,为什么会这样?我已经使用 Python 几年了,断断续续,自学成才……但现在我主修计算机科学,我真的很想找出原因。
  • @Stretch333 每个递归调用都会创建一个新变量get_data,读取用户输入并将输入拆分为 3 个值。但只有最后一次调用包含具有有效输入数据的变量。使用调试器查看发生了什么。
  • 非常感谢您的解释。我一定会进一步调查。我当然可以理解为什么递归会非常棘手。
猜你喜欢
  • 2021-10-13
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多