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)
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)