【问题标题】:PYTHON STATISTICS AVERAGE AND HIGHEST SCOREPython 统计平均分和最高分
【发布时间】:2014-02-11 06:12:45
【问题描述】:
grade=[]
names=[]
highest=0


#taking number of calues

cases=int(input('Enter number of cases: '))
for case in range(1,cases+1):
    print('case',case)

    #taking number of students

    number=int(input('Enter number of students: '))
    for numbers in range (1,number+1):

        #getting name and marks
        name=str(input('Enter name of student: '))
        names.append(name)
        mark=float(input('Enter mark of student:'))
        grade.append(mark)


    print('Case',case,'result') 

    #printing the results!
    average=float(sum(grade)/number)
    print('Average is: %.2f '%(average))
    print('Highest Score is: %.2f'%(max(grade)))
    print('Student with highest score: ',names[grade.index(max(grade))])

output->Enter number of cases: 2
case 1
Enter number of students: 2
Enter name of student: josh
Enter mark of student:98
Enter name of student: sarah
Enter mark of student:87
Case 1 result
Average is: 92.50 
Highest Score is: 98.00
Student with highest score:  josh
case 2
Enter number of students: 3
Enter name of student: shania
Enter mark of student:78
Enter name of student: arleen
Enter mark of student:89
Enter name of student: zoya
Enter mark of student:89
Case 2 result
Average is: 147.00 
Highest Score is: 98.00
Student with highest score:  josh

我的平均。在 3 种情况下被搞砸了,它也没有显示出最高的!我想知道如果有 2 次相同的事件,我怎样才能获得最高值。最高将仅是第一次出现。你们明白我的意思吗?

【问题讨论】:

  • 你能解释一下你的意思吗?你实际上得到了什么输出,你期望什么输出?你的意见是什么?
  • 如果你看到案例 2 的平均分是 147,最高分是 98。这是不可能的
  • 附带说明,在for numbers in range (1,number+1): 行上,您不需要从1 开始。你可以做for numbers in range (number):numbers 的值无关紧要,因为您从不使用它。
  • 您能否格式化该文本块以使其可读?我看不到里面发生了什么。
  • 好的。谢谢你。我已经编辑了我的输出,让你更清楚!

标签: python statistics case average highest


【解决方案1】:

问题在于,在case 循环的第二次迭代中,您还要查看前一个循环中的姓名和等级,因为您从未清空列表。您需要在循环开始时清空列表。在循环顶部创建空列表:

for case in range(1,cases+1):
    print('case',case)
    grade=[]
    names=[]
    highest=0

您可以(并且应该)这样做而不是在文件顶部定义变量。


要查看出了什么问题(在添加我的修复之前),请执行以下操作:

average=float(sum(grade)/number)
print(grade)
print(names)
print('Average is: %.2f '%(average))
print('Highest Score is: %.2f'%(max(grade)))
print('Student with highest score: ',names[grade.index(max(grade))])

您将看到列表具有上一次循环迭代的值。

【讨论】:

  • 哦,没关系,我明白你刚刚解释了什么。搞砸了!!!谢谢你,但你能解释一下为什么它在“NOOB”语言中工作。真的不知道迭代是什么意思。第一语言泼妇
  • 看看我的建议,看看哪里出了问题,希望你能亲眼看看哪里出了问题。这应该很明显。
  • 循环内的代码发生cases 的次数。每次执行循环中的代码,就是一次迭代。有cases 迭代。
  • @user3295864 你试过我的实验了吗?您发现问题所在了吗?
  • 是的:)。您说上一个循环(即循环 1)中的信息已经存在。因此,如果我按照您所说的进行操作,它将在每个循环中清空列表。非常感谢 :) 你们太棒了
【解决方案2】:

基本上,问题在于列表在循环本身的开头被填充,尝试在循环迭代之前清除列表。为此:

for case in range(1,cases+1):
     print(`case`,case)
     grade=[]
     names=[]
     highest=0

case 循环的第二次迭代在这里出现了问题

【讨论】:

  • 你们太棒了!我感谢你所有的努力。感谢您在“noob”语言中进行解释。
猜你喜欢
  • 2020-04-25
  • 2020-07-16
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
相关资源
最近更新 更多