还有别的办法吗?我已经尝试了6个版本的代码,我似乎不能得到一个结果,当我运行我

2024-04-19 08:50:32 发布

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

我对这个很陌生。我在过去的6个小时里试图做这个作业(:(),这是我正在尝试的第7个版本的代码,我有一个输入文件,里面有学生的名字和成绩(10个学生的名字,每个学生有3个成绩,我试着输入,但是直到出现错误我才看到任何结果,我似乎在努力分配成绩,并从中得到一个平均数。我还有别的办法吗

我试着把输入分成不同的学生,然后试着让程序读名字和年级,最后是平均分

with open('grades1.txt') as f:
 content = [line.split() for line in f]

 keys = content[0]

 lst = list(zip([keys]*(len(content)-1), content[1:]))
  x = [zip(i[0], i[1]) for i in lst]
  z = [dict(i) for i in x]


  Name,grade1,grade2,grade3 = x.split()
   subjects = [float(name), float(grade1), float(grade2), 
   float(grade3)]
   sum = 0
    zero_count = 0
    for subject in subjects:
   sum += subject
  if subject is 0:
     zero_count +=
   print(i,  sum/(len(subjects)-zero_count)

我试过的都没用, 我经常遇到语法错误等。下面是作业的链接:

https://i.stack.imgur.com/cu0q1.png\

输入: 汤姆4.5 戴恩 钍 梅里亚多克1.0 2.3 4.5 山姆2.4 6.5 4.7 戈勒姆1.8 6.7 5.3 佛罗多9.1 3.7 8.5 甘道夫5.1 5.5 6.9 Peregrijn第3.0节第8.5节第3.1节 布鲁因2.0 6.0 2.5

输出: 汤姆的平均成绩是 丹的平均成绩是x 钍的平均品位是x 梅里亚多克的平均成绩是x 萨姆的平均成绩是x Gollem的平均成绩是x 弗罗德的平均成绩是x 甘道夫的平均成绩是x 佩雷格里恩的平均成绩是x 布鲁因的平均成绩是x 报告结束


Tags: inforcount作业linecontentfloat名字
1条回答
网友
1楼 · 发布于 2024-04-19 08:50:32

我不确定我是否理解你的代码,但这里有一个相当简单的方法。解释见注释:

with open('grades1.txt') as f:
    for line in f:
        # Split on underscore to get name and grades (filtering out empty strings)
        # Grades will be in one string, ex: "1.0 5.0 7.7"
        name, grades_string = filter(None, line.split('_'))
        # Split grades string on space and convert to each float
        grades = [float(x) for x in grades_string.split(' ')]
        # Calc average
        average = sum(grades) / len(grades)
        # Print results (TODO: formatting/rounding)
        print name + ' has an average grade of ' + str(average)

相关问题 更多 >