繁体   English   中英

有没有办法遍历列表并将所有内容转换为整数?

[英]Is there a way to loop through a list and convert everything to integers?

我正在编写一个程序,该程序可以计算一系列成绩的平均值并将其与学生的姓名一起打印出来,但是当我尝试对所有成绩进行求和并将其除以长度时,却遇到类型错误清单。 这就是我所拥有的:

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'

是否可以使用列表遍历将grades中的所有内容转换为整数,还是我必须再写几行?

问题是您正在将数字读取为字符串 ,必须在添加数字之前将它们转换为int

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

是。 使用map

在代码中,您只需使用:

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

正如其他人提到的那样,当您从文件中读取时,无论文件中是否有实际数字,您都将返回字符串。

这是一个清理后的版本,有点像Python(需要Python 3):

import fileinput

def average_grades():
    for line in fileinput.input():
        name, *grades = line.split()
        grades = [int(grade) for grade in grades]
        average = sum(grades) / len(grades)
        yield name, average

if __name__ == '__main__':
    avgs = ("{} {:.2f}".format(name, avg) for name, avg in average_grades())
    print(*avgs, sep='\n')

这样,您可以使用studentdata文件作为参数来调用脚本:

python3 avg.py studentdata.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM