0

学生とその成績に関する情報を保存するために、2 次元のリストが必要です。

プログラムを実行すると、数字のリストが 1 つだけ取得されますが、生徒ごとに個別のリストが必要です。誰でも私を助けることができますか?

これは私がこれまでに行ったことです:

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']
>>> 
4

5 に答える 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
于 2013-02-24T18:09:55.583 に答える
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's answer のような辞書であることに注意してください。これにより、データがより適切になり、後でデータを操作しやすくなります。

別のメモとして、入力する学生の数を事前に尋ねるのではなく、ユーザーがこれ以上学生を入力しないことを決定するまでこれを繰り返すことにより、より良いインターフェイスを実現できます。

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

ここでは、ユーザーが何も入力しないまで、ユーザーから取得した新しい学生番号を生成するジェネレーターを使用してこれを実現します。

于 2013-02-24T18:16:57.600 に答える
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)
于 2013-02-24T17:58:50.657 に答える
0

2 次元リスト (リストのリスト) の代わりにリストの辞書を使用する方がよいと思います。入力と後でアクセスするためのデータへのアクセスがより簡単になり、読みやすくなるためです。これらと同じ理由で、コードに含まれるものをよりよく反映するために、コード内の名前を以下のnumberコードに変更しました。grades

COLS = int(input("number of students: "))
ROWS = int(input("number of grades per student: "))

grades = {}

def main():
    for c in range(COLS):
        student = int(input("enter student ID: "))
        grades[student] = []  # initialize to empty row of grades

        for r in range(ROWS):
            grade = int(input("Enter grade for module: "))
            grades[student].append(grade)

    for student in grades.keys():
        print 'student:{}, grades:{}'.format(student, grades[student])

サンプルデータを入力した後の出力:

student:2345, grades:[34, 56, 78, 99]
student:1234, grades:[55, 66, 43, 33]
于 2013-02-24T22:46:12.210 に答える
0

リストに挿入する前に、リストを作成するだけですnumber

for c in range(COLS):
    student =(input("enter student ID number "))
    temp_arr = [student] # make a temporary array for the student id and their grades

    for r in range (ROWS):
        grades =(input("Enter grade for module: "))
        temp.append(grades) # append to the temp array here

    # after you are done getting the grades
    # insert the entire temp array into the number array
    number.append(temp)

また、と のリストをStudent持つことができるclass を作成した場合、このデータはおそらくより適切な方法で保存されます。idgrades

于 2013-02-24T17:59:12.173 に答える