函数avgavg()
将列表中包含三个数字的列表作为输入。每个三位数列表代表特定学生为课程收到的三个等级。例如,这是一个四个学生班级的输入列表(你永远不知道你将需要处理多少学生):
[[95, 92, 86], [66, 75, 54], [89, 72, 100], [34, 0, 0]]
函数avgavg()
应在屏幕上打印两行。第一行将包含一个包含每个学生平均成绩的列表。第二行只包含一个数字:平均班级,定义为所有学生平均成绩的平均值。
根据上述数据输出:
[91.0, 65.0, 87.0, 11.333333333334]
63.5833333333
(这是我的作业问题。我试图以一些不同的方式启动它,我似乎无法获得任何连接的输入。我将如何解决这个问题?这是我最近的尝试: COLS = int(输入("输入学生人数:")) ROWS = int(输入("输入每个学生的成绩数:")
def avgavg():
student_grades = []
for c in range(COLS):
student = input("Enter the number of the student: ")
grades = []
for r in range (ROWS):
grade = eval(input("Enter the grades for the student: "))
grades.append(grade)
student_grades[student] = grades
print(grades)
答案 0 :(得分:1)
要获得列表的平均值,请说[1, 2, 3]
,您可以这样做:
a = [1, 2, 3]
print sum(a)/float(len(a))
希望这足以让你入门。我会让你弄明白具体细节。此外,一旦你充分证明你已经尝试过自己的工作并且无法按预期工作,我将只发布完整的解决方案。
现在你已经付出了一些努力:
a = [[95, 92, 86], [66, 75, 54], [89, 72, 100], [34, 0, 0]]
b = [sum(i)/float(len(i)) for i in a]
>>> print b
[91.0, 65.0, 87.0, 11.333333333333334]
print sum(b)/float(len(b))
63.5833333333
答案 1 :(得分:1)
这是详细说明sshashank124的答案并添加用户输入功能。我还添加了一些错误处理代码(while循环),所以如果用户输入字符串而不是成绩,它会再次询问:
请记住,请勿使用此确切代码进行提交。这可能是您班级中的完整性违规行为。尝试从头开始重写代码并告诉我们什么不顺利
你在代码中做错了,是你自己把这两个for循环。它们需要嵌套。
error = "Non integer input. Try again>> " #Error message
def isfloat(value): #Functon to check if a number can be a grade
try:
float(value)
return True
except ValueError:
return False
n = raw_input("Enter number of students>> ") #Number of students
while not n.isdigit():
n = raw_input(error)
g = raw_input("\nEnter number of grades per student>> ") #Number of Grades per student
while not g.isdigit():
g = raw_input(error)
grades = [] #The two dimensional list
print
#Receiving input from the user
for a in range(int(n)):
temp = []
print "Student %i" % (a+1)
for b in range(int(g)):
grade = raw_input("Grade %i>> " % (b+1))
while not isfloat(grade):
grade = raw_input(error)
temp.append(float(grade))
grades.append(temp)
print
students = [sum(stud)/float(len(stud)) for stud in grades]
#Returning output
print students
print sum(students)/float(len(students))
答案 2 :(得分:0)
我意识到这是一项任务,在现实世界中,我不会犹豫使用numpy:
> grades = [[95, 92, 86], [66, 75, 54], [89, 72, 100], [34, 0, 0]]
> np.average(grades, axis=1)
array([ 91. , 65. , 87. , 11.33333333])
> np.average(grades)
63.583333333333336
答案 3 :(得分:0)
这是工作代码:
lists = eval(raw_input('Enter the class data as a list: '))
def avgavg(lists):
avg = [float(sum(sub))/float(len(sub)) for sub in lists]
everything = [item for sub in lists for item in sub]
allavg = float(sum(everything))/float(len(everything))
return avg, allavg
avg, allavg = avgavg(lists)
print avg
print allavg
运行如下:
bash-3.2$ python lists.py
Enter the class data as a list: [[95, 92, 86], [66, 75, 54], [89, 72, 100], [34, 0, 0]]
[91.0, 65.0, 87.0, 11.333333333333334]
63.5833333333
bash-3.2$
此代码使用eval(raw_input(...))
获取输入以从字符串中删除引号。然后我们使用列表推导来获取每个列表的平均值,然后使用列表推导使列表列表中的所有列表成为一个列表(对所有列表 :)抱歉)。然后我们将其退回,最后打印出来。
不要犹豫,不要在下面提出任何问题!
希望这有帮助。