存储最近3个分数?

时间:2016-01-23 16:17:55

标签: python list append pop

我尝试将最近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]]有没有办法做到这一点,或者我必须重建我的方式我存储数据?

2 个答案:

答案 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]