Python的二维列表

2024-09-29 20:33:09 发布

您现在位置:Python中文网/ 问答频道 /正文

函数avgavg()接受一个列表作为输入,该列表的项是三个数字的列表。每个三个数字的列表代表一个特定的学生在一门课程中获得的三个年级。例如,这是一个四个学生的班级的输入列表(你永远不知道你将要处理多少学生):

^{1}$

函数avgavg()应该在屏幕上打印两行。第一行将包含一个包含每个学生平均成绩的列表。第二行只包含一个数字:班级平均成绩,定义为所有学生平均成绩的平均值。在

给出上述数据的输出:

^{pr2}$

(这是我的作业问题。我尝试了几种不同的方法来开始这项工作,但我似乎无法让我的输入与任何东西连接起来。我该怎么解决这个问题呢?这是我最近的尝试: 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)

Tags: the函数in列表for数字student学生
3条回答

我意识到这是一项任务,在现实世界中,我会毫不犹豫地使用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

这是为了详细说明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))

要得到一个列表的平均值,比如[1, 2, 3],可以这样做:

a = [1, 2, 3]
print sum(a)/float(len(a))

希望这足以让你开始。我会让你弄清楚具体情况的。此外,我只会张贴完整的解决方案,一旦你已经充分证明,你已经尝试解决这个问题,并不能让它发挥预期的作用。在

既然你已经付出了一些努力:

工作溶液

^{pr2}$

相关问题 更多 >

    热门问题