TypeError:在python中重新呈现2d数组时,'int'对象不可订阅

时间:2017-10-06 10:00:31

标签: python typeerror

我试图在参赛者数量和分数列表中找到最低分。在第6行,我收到错误:

if score[u[1]] == score[0]:
TypeError: 'int' object is not subscriptable

我试图通过循环检查整个2d数组,找出哪个得分与获得的最低分数匹配并检索参赛者编号

for x in range(contestants):
    CN = x+1
    score1.insert(x,[[CN],[score[x]]])
    score.sort
    for u in score:
        if score[u[1]] == score[0]:
            KO = score[u[0]]
            print (KO)

分数看起来像这样:

 for i in range (contestants):
    j1 = int(input("Judge 1 enter your score for the contestant: "))
    j2 = int(input("Judge 2 enter your score for the contestant: "))
    j3 = int(input("Judge 3 enter your score for the contestant: "))
    j4 = int(input("Judge 4 enter your score for the contestant: "))
    j5 = int(input("Judge 5 enter your score for the contestant: "))
    print("Round over, next contstant")
    scores = [j1,j2,j3,j4,j5]

    scoreJ1.append(scores[0])
    scoreJ2.append(scores[1])
    scoreJ3.append(scores[2])
    scoreJ4.append(scores[3])
    scoreJ5.append(scores[4])


    scores.sort()
    scores.pop(0)
    scores.pop(3)
    #proud of this
    score.insert(i,scores[1]+scores[2]+scores[0])

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您收到的错误消息是TypeError: 'int' object is not subscriptable。让我们打破这个:

  • TypeError告诉您,您正在尝试在某处应用不当操作
  • is not subscriptable告诉您,不恰当的操作会在事后添加一对[ ]
  • 'int' object is not subscriptable告诉您,您正在尝试将其转换为int。

现在让我们考虑生成此错误的代码行:

if score[u[1]] == score[0]:

请注意,有三对[ ]直接放置在某些东西之后:其中一个必须具有int类型。因此有3名候选人

  1. score
  2. u
  3. score
  4. 因此,我们得出结论:scoreu是一个整数。

    查看您提供的上下文

    for u in score:
    

    如果score不是可迭代的,那么这一行就会失败。 int不可迭代,因此我们得出结论score不是整数。这导致我们得出结论:u(它是容器score的某个元素)是一个整数。

    有关您的代码的其他评论(包含许多问题):

    1. 可疑的是,在下一行使用score1时,您会在一行上引用score(其他地方没有引用)。你确定前者不应该只是score吗?

    2. score.sort访问sort的{​​{1}}方法,但不会调用它。如果你想在某个地方存储那个方法,或者把它传递到某个地方,这在Python中是有意义的,但你不是那样做的。因此,您几乎肯定忘记调用该函数:您可以在其后面添加score,如下所示:()

    3. 在您的第二个代码块store.sort()中,朋友似乎无法在任何地方定义,因此此代码无法使用,除非您还有其他内容未显示。

    4. 这应该给你足够的思考。