如何让我的列表读取某些值?

How do I get my list to read certain values?

我是 python 的初学者。我有一个代码可以从我的计算机读取一个文本文件并将所有文本转换为 int。我正在为分析高尔夫得分功能的最后几行而苦苦挣扎。

我需要告诉代码,对于低于 280 的分数,要获取这些值并获取金额,我知道要使用 Len(score) 但我一开始就出错了。它应该打印出低于 180 的分数,但我不断出错,我迷路了!非常感谢任何帮助!非常感谢!!!

我的错误在最后六行代码!我不知道如何让它读取列表中 280 以下的值:(

错误是:

TypeError: '<' not supported between instances of 'str' and 'int'##

在线:

    if score < 280:
def open_and_read_golf_scores():
    raw_scores = open("golfscores.txt", "r")
    scores = []

    for current_line in raw_scores:
        values = current_line.split(",")
        scores.append(values[2])

    raw_scores.close()

    return scores

def analyze_golf_scores():

    scores = open_and_read_golf_scores()
    total = 0
    for score in scores:
        score = score[0:3]
        total = total +int(score)

    ave = total/len(score)

print("Average score =", ave)

for score in scores:
    if score < 280:
        scores.append(values)
        below_par = total + len(score)
print("The number of scores below par is ", below_par)

这段代码看起来有问题:

    for score in scores:
        score = score[0:3]
        total = total +int(score)

        ave = total/len(score)

    print("Average score =", ave)

    for score in scores:
        if score < 280:
            scores.append(values)
            below_par = total + len(score)
    print("The number of scores below par is ", below_par)
  • 您计算的 ave 不是分数的平均数,而是总分除以每个分数的位数(即 3)。那是你要计算的吗?您是想除以 len(scores) 吗?
  • 您的 scores 是字符串,您正试图将它们与数字 280 进行比较,这就是您得到 TypeError 的原因。您应该像上面那样将它们转换为 int,或者更好的是,首先将它们 open_and_read_golf_scores return 转换为 ints
  • 在你遇到那个错误之后,你尝试用 values 做一些事情,它在这个范围内是未绑定的。也许你打算使用 score?

如果您的 open_and_read_golf_scores 函数只是 return 将分数作为整数:

,那么很多问题可能会消失
from typing import List

def open_and_read_golf_scores() -> List[int]:
    with open("golfscores.txt", "r") as raw_scores:
        return [
            int(current_line.split(",")[2][:3]) 
            for current_line in raw_scores
        ]

注意:我保留了将每个 score 切成前三个字符的逻辑,但我不知道为什么需要这样做,因为我看不到文件的内容 - - 感觉它实际上可能会导致错误。每个分数真的都是三位数,并有适当的零填充吗?乐谱后有没有额外的东西?那是什么东西?有没有比假设数字总是 3 位长的更安全的方法来摆脱它?

现在您的 analyze_golf_scores 函数可以简单得多,因为您可以对 scores 进行基本的数学运算,而不必在循环中转换每一项:

from statistics import mean


def analyze_golf_scores() -> None:
    scores = open_and_read_golf_scores()
    ave = mean(scores)
    below_par = sum(score < 280 for score in scores)

    print(f"Average score = {ave}")
    print(f"The number of scores below par is {below_par}")