Python 有没有办法在列表中循环并将所有内容转换为整数?

Python 有没有办法在列表中循环并将所有内容转换为整数?,python,python-3.x,Python,Python 3.x,我正在写一个程序,计算一系列分数的平均值,并将其与学生姓名一起打印出来,但当我试图将所有分数相加并除以列表长度时,我遇到了一个类型错误。这就是我所拥有的: def average_grade(afile): aline = afile.readline() grades = [] while aline: info = aline.split() grades = info[1:] average = sum(grades)

我正在写一个程序,计算一系列分数的平均值,并将其与学生姓名一起打印出来,但当我试图将所有分数相加并除以列表长度时,我遇到了一个类型错误。这就是我所拥有的:

def average_grade(afile):
    aline = afile.readline()
    grades = []
    while aline:
        info = aline.split()
        grades = info[1:]
        average = sum(grades) / len(grades)
        print(info[0],average)
        aline = afile.readline()

my_file = open('studentdata.txt','r')

average_grade(my_file)

my_file.close()
这是文件的内容:

joe 10 15 20 30 40
bill 23 16 19 22
sue 8 22 17 14 32 17 24 21 2 9 11 17
grace 12 28 21 45 26 10
john 14 32 25 16 89
这是我收到的错误消息:

Traceback (most recent call last):
  File "averagegrade.py", line 13, in <module>
    average_grade(my_file)
  File "averagegrade.py", line 7, in average_grade
    average = sum(grades) / len(grades)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
回溯(最近一次呼叫最后一次):
文件“averagegrade.py”,第13行,在
平均成绩(我的成绩档案)
文件“averagegrade.py”,第7行,平均等级
平均值=总和(等级)/长度(等级)
TypeError:不支持+:“int”和“str”的操作数类型
是否可以使用列表遍历将
等级中的所有内容转换为整数,或者我需要再写几行?

是。使用

在代码中,您只需使用:

average = sum(map(int, grades)) / len(grades)
对。使用

在代码中,您只需使用:

average = sum(map(int, grades)) / len(grades)

问题是您将数字作为字符串读取,必须先将其转换为
int
s,然后再添加:

grades = [int(x) for x in info[1:]]
average = sum(grades) / len(grades)

问题是您将数字作为字符串读取,必须先将其转换为
int
s,然后再添加:

grades = [int(x) for x in info[1:]]
average = sum(grades) / len(grades)

正如其他人所提到的,当您从文件中读取时,您会返回字符串,而不管文件中是否有实际的数字

下面是一个更像Python的清理版本(需要Python 3):

通过这种方式,您可以使用studentdata文件作为参数调用脚本:

python3 avg.py studentdata.txt

正如其他人所提到的,当您从文件中读取时,您会返回字符串,而不管文件中是否有实际的数字

下面是一个更像Python的清理版本(需要Python 3):

通过这种方式,您可以使用studentdata文件作为参数调用脚本:

python3 avg.py studentdata.txt

如果列表理解能起作用,为什么要在
map
上使用
list
。我的编辑(可能是在你的评论之后?不确定),在没有
列表的代码中显示它
@Hyperboreus,在那里,我刚刚删除了前面的示例,这对我来说更好(通常是我)。虽然我认为
sum(int(grade)表示等级中的等级)
更具可读性和直观性。正如
import这个
所说的:“可读性很重要。”。如果列表理解能起作用,为什么要在
map
上使用
list呢?因为我通常是在处理标题。我的编辑(可能是在你的评论之后?不确定),在没有
列表的代码中显示它
@Hyperboreus,在那里,我刚刚删除了前面的示例,这对我来说更好(通常是我)。虽然我认为
sum(int(grade)表示等级中的等级)
更具可读性和直观性。当导入时,这个
会说:“可读性很重要。”。谢谢!我知道问题是数字是字符串,但我不知道如何转换它们,而不必编写另一个4-5行函数。谢谢!我知道问题是数字是字符串,但我不知道如何转换它们,而不必编写另一个4-5行函数。