【问题标题】:Converting a list to integers将列表转换为整数
【发布时间】:2020-01-23 01:06:38
【问题描述】:

问题来了: 编写一个程序,计算并打印文本文件中数字的平均值。您应该使用两个高阶函数来简化设计。

程序输入输出示例如下:

输入输入文件名:numbers.txt

平均值为 69.83333333333333

这里是 numbers.txt 中的数字: 45 66 88 100 22 98

这是我的代码:

    file = input("Enter the input file name: ")
    with open(file) as f:
        from functools import reduce
        def add(x, y): return x + y
        data = [45, 66, 88, 100, 22, 98]
        total = reduce(add, data)
        avg = total / len(data)
        print("The average is: ", avg)

if __name__ == "__main__":
    main()

问题是,当我在列表中手动输入项目时,这工作正常,但是当我添加 line.strip 函数并尝试将其放入列表中,然后使用 map 进行转换时,这是我的代码:

    file = input("Enter the input file name: ")
    with open(file) as f:
        for line in f:
            line = line.strip()
            data = [line]
        data = list(map(int, data))
        from functools import reduce
        def add(x, y): return x + y
        total = reduce(add, data)
        avg = total / len(data)
        print("The average is: ", avg)

if __name__ == "__main__":
    main()

我收到此错误:

Traceback (most recent call last):
  File "average.py", line 15, in <module>
    main()
  File "average.py", line 7, in main
    data = list(map(int, data))
ValueError: invalid literal for int() with base 10: '100 22 98'

我在编码方面很糟糕,请你帮我理解 1) 错误是什么 2) 列表没有将字符串转换为整数有问题吗?

谢谢!

【问题讨论】:

  • 更改此行:data = list(map(int, data))data = list(map(int, data.split()))

标签: python-3.x string list replace integer


【解决方案1】:

下面的代码行有问题,这不是拆分行并将每个项目添加到列表中。它正在将整行作为字符串添加到列表中。

data = [line]

例如

data = [line]

['11 12 123 123']

data = line.split()

['11', '12', '123', '123']

您需要像下面这样更改您的代码,它应该可以工作。

file = input("Enter the input file name: ")
with open(file) as f:
    for line in f:
        line = line.strip()
        data = line.split()
    data = list(map(int, data))
    from functools import reduce
    def add(x, y): return x + y
    total = reduce(add, data)
    avg = total / len(data)
    print("The average is: ", avg)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-04
    • 2022-10-15
    • 2010-10-21
    • 2012-12-04
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多