我尝试将最近3个分数保存到列表中,然后将该列表附加到主类列表中,创建每个学生的列表列表,并将其分数作为单独的列表。代码设法将分数附加到现有列表,但不显示第一个分数,并在添加3个分数之前删除它。有人能帮助我吗?
Student = [] #new list created each time for student
max_scores = 3 #3 scores only at a time in the student's list
if ClassName == "10x1": #if student's input for class is 10x1
for userName in Class10x1:
if userName in Student and len(str(score)) >= max_scores:
Student.pop([1]) #removes second element in list
Student.append(score) #adds most recent score
break #stops code
elif userName in Student and len(str(score)) < max_scores:
Student.append(score)
break
else:
Student.append(userName)
Student.append(score)
break
Class10x1.append(Student) #student's list is appended to main class list
以上代码打印如下:
[[]]
[['Jagraj', 1], ['Jagraj', 1]]
[['Jagraj', 1, 3], ['Jagraj', 1, 3], ['Jagraj', 1, 3]]
但是我希望像这样打印出来:
[['Jagraj', 0, 1, 3]]
然后,一旦学生进行了第4次测试,第一个分数就会被移除,所以它变成[['Jagraj',1,3,5]]有没有办法做到这一点,或者我必须重建我的方式我存储数据?
答案 0 :(得分:2)
你不应该在Python中使用Camelcase符号,除非你正在编写类,你不是。阅读代码时会感到困惑。请阅读PEP8关于Python命名约定的指南。 https://www.python.org/dev/peps/pep-0008/
现在针对您的问题,您的代码似乎有点难以阅读,因此我会尝试检查您所面临的问题。
首先,不要使用嵌套列表,而是使用字典(hashmap)。事情会更容易处理。
我们说我们有一个字典对象:
from collections import deque
a={"ishaan":deque(maxlen=3)}
a['ishaan'].append(1)
a['ishaan'].append(2)
a['ishaan'].append(3)
然后我需要做的就是为此添加一个分数:
new_score=5
a['ishaan'].append(new_score)
print(a)
这将打印
{'ishaan':[2,3,5]}
所以,现在事情更容易处理,我猜你的查询也得到了解答。我没有解决你的问题,但我想你可以从中得到一些暗示并解决你的问题。
答案 1 :(得分:0)
不会更容易将完整的成绩列表存储在学生的对象中,然后只允许它通过索引打印部分成绩吗?
class Student:
def __init__(self, studentname):
self.Name = studentname
self.Grades = []
def last3grade(self):
return [self.Name, Grades[len(self.Grades)-1],Grades[len(self.Grades)-2],Grades[len(self.Grades)-3]