Преобразование списка в целые числа - PullRequest
0 голосов
/ 23 сентября 2019

здесь проблема: напишите программу, которая вычисляет и печатает среднее число в текстовом файле.Вы должны использовать две функции высшего порядка, чтобы упростить конструкцию.

Пример ввода и вывода программы показан ниже:

Введите имя файла ввода: numbers.txt

Среднее значение составляет 69,83333333333333

вот цифры в числах. Текст: 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 и попытался поместить ее в список, а затем преобразовал ее с помощью карты, это мой код:

    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) что-то не так с тем, что список не преобразуетстроки в целые числа?

Спасибо!

1 Ответ

0 голосов
/ 23 сентября 2019

У вас проблема с строкой кода ниже, это не разделение строки и добавление каждого элемента в список.он добавляет всю строку в виде строки в списке.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...