2016-01-23 27 views
0

我试着将3个最近的分数保存到一个列表中,然后将该列表附加到一个主类列表中,创建一个列表,每个学生和他们的分数作为一个单独的列表。该代码设法将分数附加到现有列表,但不显示第一个分数并在添加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

得分是什么样子? len(str(分数))对我来说非常令人不安 – Dionys

+0

它只是一个测试完成后产生的整数 –

+0

'len(str(分数))'返回分数位数。我不认为这就是你想要测试的。也许'len(学生)+ 1> = max_scores'? – Dionys

回答

2

除非你正在编写类,否则你不应该在Python中使用Camelcase符号。阅读代码时会变得混乱。请阅读Python中关于命名约定的PEP8准则。 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]} 

所以,现在事情更容易处理,我猜你的查询也被回答了。我没有解决你的问题,但我想你可以从这个暗示中解决你的问题。

+0

谢谢,我想我会实现字典而不是列表,他们似乎更容易操作,如删除和添加数据。 –

+1

maxlen = 3的'deque'会让维护只有最后3个结果更容易 – M4rtini

+0

这是真的。编辑我的答案。谢谢。 – ishaan

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] 
+1

return [self.Name,self.Grades [-3:]]会更具可读性;) – Dionys

+0

我应该在哪里实现此代码?@Dionys –

+0

@Jagraj Singh,'def last3grade(self):return [self.Name ...' – Dionys