我在尝试找出正在编写的程序的代码时遇到麻烦。我得到了一个具有以下格式的文件:
student_firstname
student_lastname
student_number
assignment_mark
midterm_mark
exam_grade
final_mark
这是一个示例:
Marilyn
Malone
136238
88
72
70
Esther
Mulcahy
194563
25
45
91
William
Gray
110031
33
38
62
我正在尝试寻找一种方法来从所有学生中返回最高和最低的final_mark。到目前为止,我所做的是:
infile = open(fileName, "r")
myList = []
name = infile.readline().strip()
passingGrades = 0
failingGrades = 0
avGrade = 0
while name != '':
highestGrade = [0, 'studentName']
lowestGrade = [99, 'studentName']
lastName = infile.readline().strip()
studentNum = infile.readline().strip()
assignGrade = infile.readline().strip()
midGrade = infile.readline().strip()
examGrade = infile.readline().strip()
averageGrade = ((int(assignGrade) * 0.25) + (int(midGrade) * 0.25) +
(int(examGrade) * 0.50))
def lowGrade(x):
if x < lowestGrade[0]:
lowestGrade.pop(0)
lowestGrade.pop(0)
lowestGrade.append(x)
lowestGrade.append(name)
lowestGrade.append(lastName)
return lowestGrade
if averageGrade >= 50 and int(examGrade) >= 50:
#print(name)
passingGrades += 1
avGrade += averageGrade
if averageGrade > highestGrade[0]:
highestGrade.pop(0)
highestGrade.pop(0)
highestGrade.append(averageGrade)
highestGrade.append(name)
highestGrade.append(lastName)
else:
pass
else:
failingGrades += 1
avGrade += averageGrade
lowGrade(averageGrade)
name = infile.readline().strip()
finalAverage = avGrade / (passingGrades + failingGrades)
highFinal = ' '.join(str(x) for x in highestGrade)
lowFinal = ' '.join(str(x) for x in lowestGrade)
当使用文本文件之一运行程序时,我得到:
Number of passes: 9
Number of fails: 1
Average final grade: 64.55
The Highest Grade: 79.5 Patty Marshall
The Lowest Grade: 79.5 Patty Marshall
任何帮助深表感谢!
每次阅读新学生时,您都会将highestGrade
和重置lowestGrade
为其初始值(分别为0
和99
)。
while name != '':
# stuff that happens for each 'name'
highestGrade = [0, 'studentName']
lowestGrade = [99, 'studentName']
# ... do stuff ...
# read new name
name = infile.readline().strip()
通过在循环外初始化这些值可以轻松解决此问题。
highestGrade = [0, 'studentName']
lowestGrade = [99, 'studentName']
while name != '':
# stuff that happens for each 'name'
另外,您的lowGrade
方法不必要地复杂且多余。无需从列表中删除项目然后添加新项目,只需创建一个新列表即可。实际上,尽管atuple
都可以list
,但a比a更合适。
lowestGrade = (99, 'studentName')
def lowGrade(x):
if x < lowestGrade[0]:
lowestGrade = (x, name, lastName)
您不需要从此方法返回tuple
/ list
,因为根本不用返回的值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句