从用户输入创建一个二维列表,包含ID和对应值

0 投票
5 回答
3091 浏览
提问于 2025-04-17 16:57

我需要一个二维列表来存储学生的信息和他们的成绩。

但是当我运行我的程序时,我只得到了一个数字列表,而我需要为每个学生单独的列表。有没有人能帮帮我?

这是我到目前为止所做的:

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

在这里,我们使用了一个生成器,它会不断从用户那里获取新的学生编号,直到用户什么都不输入为止。

撰写回答