In: Computer Science
Chapter 9 project 1 & 2(these are combined into one project) : Add methods to the Student class that compare two Student objects. One method should test for equality. The other methods should support the other possible comparisons. In each case, the method returns the result of the comparison of the two students' names. Place several Student objects into a list and shuffle it. Then run the sort method with this list and display all of the students' information.
I keep getting error code:
Traceback (most recent call last):
File "C:/Users/talka/Desktop/ITF100/HeatherMorgan.Project9.py",
line 98, in
main()
File "C:/Users/talka/Desktop/ITF100/HeatherMorgan.Project9.py",
line 78, in main
student1 = Student("Heather", 1)
TypeError: Student() takes no arguments
Here is what i have:
import random
class Student(object):
"""Represents a student."""
def __init__(self, name, number):
"""Constructor creates a Student with the given
name and number of scores and sets all scores
to 0."""
self.name = name
self.scores = []
for count in range(number):
self.scores.append(0)
def getName(self):
"""Returns the student's name."""
return self.name
def setScore(self, i, score):
"""Resets the ith score, counting from 1."""
self.scores[i - 1] = score
def getScore(self, i):
"""Returns the ith score, counting from 1."""
return self.scores[i - 1]
def getAverage(self):
"""Returns the average score."""
return sum(self.scores)/ len(self.scores)
def getHighScore(self):
"""Returns the highest score."""
return max(self.scores)
def __str__(self):
"""Returns the string representation of the student."""
return "Name: " + self.name + "\nScores: " + \
" ".join(map(str, self.scores))
def __eq__(self, other):
"""Tests self and other for equality."""
if self is other:
return True
elif type(self) != type(other):
return False
else:
return self.numer == other.numer and \
self.denom == other.denom
def __lt__(self,other):
"""Returns self < other, with respect to names."""
return self.name < other.name
def __ge__(self, other):
"""Returns self >= other, with respect to names."""
return self.names >= other.name
def shuffle(self):
"""Shuffles the list."""
random.shuffle(self.name)
def main():
"""Tests sorting."""
lyst = []
#creates student
student1 = Student("Heather", 1)
student2 = Student("Olivia", 2)
lyst.append(student1)
lyst.append(student2)
for i in range (1,6):
student.setScore(i,100)
random.shuffle(lyst)
print("Unsorted list of students")
for studentName in lyst:
print(studentName)
lyst.sort()
print("\nSorted list of students")
for studentName in lyst:
print(studentName)
if __name__=="__main__":
main()
]
Please find the code below:
class Student(object):
def __init__(self, name, number):
self.name = name
self.scores = []
for count in range(number):
self.scores.append(0)
def getName(self):
return self.name
def setScore(self, i, score):
self.scores[i - 1] = score
def getScore(self, i):
return self.scores[i - 1]
def getAverage(self):
return sum(self.scores) / len(self._scores)
def getHighScore(self):
return max(self.scores)
def __eq__(self,student):
return self.name == student.name
def __ge__(self,student):
return self.name == student.name or self.name>student.name
def __lt__(self,student):
return self.name<student.name
def __str__(self):
return "Name: " + self.name + "\nScores: " + \
" ".join(map(str, self.scores))
def main():
student = Student("Ken", 5)
print(student)
for i in range(1, 6):
student.setScore(i, 100)
print(student)
print("\nSecond student")
student2 = Student("Ken", 5)
print(student2)
print("\nThird student")
student3 = Student("Amit", 5)
print(student3)
print("\nChecking equal student1 and student 2")
print(student.__eq__(student2))
print("\nChecking equal student1 and student 3")
print(student.__eq__(student3))
print("\nChecking greater than equal student1 and student 3")
print(student.__ge__(student3))
print("\nChecking less than student1 and student 3")
print(student.__lt__(student3))
if __name__ == "__main__":
main()
output: