Python 嵌套列表:如何打印特定元素并附加到每个子列表

Python Nested List: How to print specific elements and append to each sublist

quizes = [["Andrew"], ["Amy"], ["Jared"], ["Bob"], ["Sarah"]]

for i in range(len(quizes)):
    grade = eval(input("Enter", quizes[i][0],"grade:"))
    quizes[i].append(grade)
    print(quizes[i])

大家好,过去一周我一直在处理这个问题,但无法解决这个问题。我试图让我的程序询问“输入 [person1] 成绩:”等等,并将第二个元素附加到每个子列表,这将是他们的成绩,然后打印整个列表的内容。感谢任何帮助

既然我在看,你做错了什么?

quizes = [["Andrew"], ["Amy"], ["Jared"], ["Bob"], ["Sarah"]]

for quiz in quizes:
    grade = eval(input("Enter " + quiz[0] + " grade:"))
    quiz.append(grade)
    print(quiz)

print(quizes)

您需要更改:

    grade = eval(input("Enter", quizes[i][0],"grade:"))

    grade = eval(input("Enter " + quizes[i][0] + " grade:"))

input 的行为与 print 不同。您不能在任何其他函数中使用逗号连接文本(非常小 数量的自定义函数和模块除外),如果这让您感到困惑,您应该远离它们只是偶尔使用它们。

进行了更改后,您的代码现在可以工作了吗?您没有告诉我们为什么它没有按您预期的方式工作。

主要问题是 input() 只接受一个参数作为输入提示,不像 print 可以接受任意数量的参数 - 你给输入函数 3 个参数 - "Enter"quizes[i][0]"grade:"

您可以尝试连接它们 - 如 input("Enter "+str(quizes[i][0])+" grade:")(如果您知道所有 quizes[i][0][=40=,则不需要 str() 转换] 已经是字符串了), 甚至使用字符串格式 - "Enter {} grade".format(quizes[i][0])f"Enter {quizes[i][0]} grade:"

这应该足够了,但如果您愿意,您还可以对代码进行 2 处更改 -

  • 直接遍历嵌套列表(for sub_list in quizes:)
  • 使用 int()float() 转换包含数字的返回输入字符串也可以代替 eval

例如

for quiz in quizes:
   grade = eval(input("Enter {} grade:".format(quiz[0])))
   quiz.append(grade)
   print(quiz)

编辑:Python docs on string formatting f"..." 语法仅适用于 Python 3.6+

问题是输入将 1 个字符串作为参数,而您传递的是 3 个。所以:

quizes = [["Andrew"], ["Amy"], ["Jared"], ["Bob"], ["Sarah"]]

for l in quizes:
    grade = eval(input(f"Enter {l[0]} grade:"))
    l.append(grade)
    print(l)

不过,恕我不明白这里使用eval的意义。 Eval 将数据转化为代码。对用户输入使用 eval 会造成很大的安全漏洞。在上面的代码中,如果用户输入 quizes.clear() 怎么办?整个数组将被清空。如果他输入更邪恶的东西怎么办?

考虑(假设有效成绩只包含数字):

quizes = [["Andrew"], ["Amy"], ["Jared"], ["Bob"], ["Sarah"]]

for l in quizes:
    while True:
        try:
            grade = float(input(f"Enter {l[0]} grade:"))
        except ValueError:
            print("Please input a number.")
        else:
            l.append(grade)
            break
print(quizes)