Python 从用户输入创建ID和相应值的二维列表
我需要一个二维列表来存储有关学生及其成绩的信息 当我运行我的程序时,我只得到一个数字列表,但我需要为每个学生提供单独的列表。有人能帮我吗 这就是我到目前为止所做的:Python 从用户输入创建ID和相应值的二维列表,python,python-3.x,list,user-input,Python,Python 3.x,List,User Input,我需要一个二维列表来存储有关学生及其成绩的信息 当我运行我的程序时,我只得到一个数字列表,但我需要为每个学生提供单独的列表。有人能帮我吗 这就是我到目前为止所做的: COLS= int(input("number of students to enter ")) ROWS= int(input("number of grades per student ")) def main(): number =[] for c in range(COLS): stud
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']
>>>
您需要为每行创建一个新列表:
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)
您需要为每行创建一个新列表:
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)
在将列表插入
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)
此外,如果您制作了一个班级
学生
,该班级可能会有一个id
和一个等级列表
,只需在将其插入编号
列表之前建立一个列表,就可以更好地存储这些数据:
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)
此外,如果您创建一个班级
学生
,该班级可能会以更好的方式存储此数据,该班级可能会有一个id
和一个成绩列表
,我会使用一个按学生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
我将使用按学生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
根据我的评论,一个这样做的例子是: 请注意,这是中的词典,而不是列表。这更适合数据,并将使以后更容易使用它 另一个注意事项是,在用户决定不输入更多学生之前,重复此操作可以实现更好的界面,而不是预先询问将输入多少学生:
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()}
在这里,这是通过一个生成器实现的,它生成从用户处获得的新学生编号,直到用户不输入任何内容。根据我的评论,这是一个通过以下方式实现的示例: 请注意,这是中的词典,而不是列表。这更适合数据,并将使以后更容易使用它 另一个注意事项是,在用户决定不输入更多学生之前,重复此操作可以实现更好的界面,而不是预先询问将输入多少学生:
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()}
这是通过一个生成器实现的,该生成器生成从用户处获得的新学生号,直到用户不输入任何内容。我认为最好使用列表字典,而不是二维列表——列表列表——因为它使输入和访问数据的访问更容易和可读。出于同样的原因,我还将其名称从您代码中的
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])
输入样本数据后的输出:
学生:2345,年级:[34,56,78,99]
学生:1234,年级:[55,66,43,33]
我认为最好使用列表字典,而不是二维列表——列表列表——因为它使数据的输入和以后的访问更容易和可读。出于同样的原因,我还将其名称从您代码中的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])
输入样本数据后的输出:
学生:2345,年级:[34,56,78,99]
学生:1234,年级:[55,66,43,33]
+1,这在这里很有意义-请注意,在不太可能的情况下,它们的输入顺序很重要,这不会记录(dict
s无序)。正确!在这种情况下,您可以使用集合.OrderedDict
+1,这在这里很有意义-请注意,在不太可能的情况下,它们的输入顺序很重要,这不会记录这些(dict
无序)。正确!在这种情况下,您可以使用集合。OrderedDict。请注意,您在此处构建列表,一种简单有效的方法是使用。请注意,您在此处构建列表,一种简单有效的方法是使用。这实际上似乎不起作用。。。当grades
附加到number
后,它仍然是空的,grades
本身不是对列表中实际包含的项目的引用,因此更改它不会更新number
中包含的列表。当更新列表之外的grades
时,Python中的所有内容都是引用,它也会影响列表中的内容(因为它们是相同的东西)。啊。对不起,我弄错了--我在测试时漏掉了最后一行。(这很愚蠢,因为理论上我知道Python是通过引用传递的;我只是不总是相信它是通过引用传递的。)这实际上似乎不起作用。。。当grades
附加到number
后,它仍然是空的,grades
本身不是对列表中实际包含的项目的引用,因此更改它不会更新number
中包含的列表。当更新列表之外的grades
时,Python中的所有内容都是引用,它也会影响列表中的内容(因为它们是相同的东西)。啊。对不起,我弄错了--我在测试时漏掉了最后一行。(这是愚蠢的,因为理论上我知道Python是通过引用传递的;不知何故,我并不总是相信它是通过引用传递的。)