Python:如何从作为列表的数字(分数)文件中读取,得到高分、低分和平均分,并分组成十分位数

2024-06-16 09:35:31 发布

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

好的,我需要帮助解决这个问题,这是我大学的最后一个项目,我不是主修csc的,所以我真的需要一些帮助!!我需要从一个随机数的文件中读取,找出最大值、最小值和平均值,然后将0-100的每一个十分位(10%)中有多少分数分组。不知道为什么我的代码没有运行,我只尝试获取最小值、最大值和平均值。在

我已经在阅读文件列表问题上寻求帮助,但是很多解决方案都包括一些“with”循环的东西,我还没有学会。另外,我在考虑也许有单独的函数/方法来进行排序,然后是百分比/星。谢谢你的帮助!在

输出示例:

高分是:100分

最低分是:0分

平均值是:55.49

范围数百分比

=========================================

0-9 75 7.5%*****

10-19 82 8.2%*****

等等。。。。在

输入文件是一个.txt文件,每个分数都在新行上。在

33 99 14 52
76
78

This is the error that comes out:
Traceback (most recent call last):
  File "/Users/meganhorton/Desktop/Python/hw5.py", line 36, in <module>
    main()
  File "/Users/meganhorton/Desktop/Python/hw5.py", line 20, in main
    avgScore = float(sum(scoresList)/len(scoresList))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> 

Tags: 文件inpymainlineusers分数大学
2条回答

下面是使用纯Python解决问题的另一种方法:

with open("scores.txt", "r") as inFile:
    scores = [int(line) for line in inFile]
    maximum = max(scores)
    minimum = min(scores)
    average = sum(scores) / len(scores)

    deciles = [0 for i in range(10)]
    for score in scores:
        for i in range(0,100,10):
            if score in range(i, i+10):
                deciles[int(i/10)] += 1

    print("The high score is: %d" % maximum)
    print("The low score is: %d" % minimum)
    print("The average is: %.2f" % average)

    print("=========================================")

    for i in range(10):
        print("%d - %d" % (i*10, i*10+9), end=" ")
        print(deciles[i], end=" ")
        print("%.2f %s" % (((deciles[i] / sum(deciles)) * 100.0), "%"), end=" ")
        print("*" * deciles[i])

您提供的示例数据的输出:

^{2}$

在python中有很多方便的数据处理工具。我建议使用pandas,因为它可以通过一个函数调用完成很多工作。在

import pandas as pd
import numpy as np

df = pd.read_csv("OldScores.txt", header=None, names=["scores"])
high_score = df["scores"].max()
low_score = df["scores"].min()
mean_score = df["scores"].mean()
median_score = df["scores"].median()
counts, divisions = np.histogram(df["scores"], bins=list(range(0,101,10)))
relative_counts = counts/df["scores"].shape[0]

相关问题 更多 >