从用户输入创建一个二维列表,包含ID和对应值
我需要一个二维列表来存储学生的信息和他们的成绩。
但是当我运行我的程序时,我只得到了一个数字列表,而我需要为每个学生单独的列表。有没有人能帮帮我?
这是我到目前为止所做的:
COLS= int(input("number of students to enter "))
ROWS= int(input("number of grades per student "))
def main():
number =[]
for c in range(COLS):
student =(input("enter student ID number "))
number.append(student)
for r in range (ROWS):
grades =(input("Enter grade for module: "))
number.append(grades)
print(number)
my result is
number of students to enter 2
number of grades per student 4
enter student ID number 1234
Enter grade for module: 55
Enter grade for module: 66
Enter grade for module: 43
Enter grade for module: 33
enter student ID number 2345
Enter grade for module: 34
Enter grade for module: 56
Enter grade for module: 78
Enter grade for module: 99
['1234', '55', '66', '43', '33', '2345', '34', '56', '78', '99']
>>>
5 个回答
1
我会用一个字典,里面的内容是用学生的ID来索引的:
COLS= int(input("number of students to enter "))
ROWS= int(input("number of grades per student "))
def main():
student_grades = {}
for c in range(COLS):
student =(input("enter student ID number "))
grades = []
for r in range (ROWS):
grade =(input("Enter grade for module: "))
grades.append(grade)
student_grades[student] = grades
1
你需要为每一行创建一个新的列表:
for c in range(COLS):
grades = []
student =(input("enter student ID number "))
number.append(student)
number.append(grades)
for r in range (ROWS):
grade =(input("Enter grade for module: "))
grades.append(grade)
1
根据我的评论,这里有一个使用 列表和字典推导式 的例子:
cols = int(input("Number of students: "))
rows = int(input("Number of grades per student: "))
grades = {input("Enter student ID number: "):
[input("Enter grade for module: ") for _ in range(rows)]
for _ in range(cols)}
请注意,这里使用的是字典,正如 Kyle Strand 的回答 中提到的,而不是列表。这样更适合这些数据,并且以后处理起来会更简单。
另外,使用更好的方式可以让用户不断输入学生信息,直到他们决定不再输入,而不是一开始就问要输入多少个学生:
rows = int(input("Number of grades per student: "))
def get_students():
while True:
value = input("Enter student ID number, or nothing to finish: ")
if not vale:
return
else:
yield value
grades = {student: [input("Enter grade for module: ") for _ in range(rows)]
for student in get_students()}
在这里,我们使用了一个生成器,它会不断从用户那里获取新的学生编号,直到用户什么都不输入为止。