Как я могу исправить ошибку "int" is not iterable "с помощью Python? - PullRequest
0 голосов
/ 28 февраля 2019
def square_each(nums):
    import math
    for i in range(len(nums)):
        nums[i] = nums[i]**2

def sum_list(nums):
    for values in nums:
        sums = sum(values)
        print(sums)

def to_numbers(str_list):
    numbers = [int(strings) for strings in str_list]
    return numbers

def main():
    print("This program computes the sum of the squares of numbers read from a file.")
    filename = input("Please enter the file name:")
    file = open(filename, 'r')
    line = file.readline()
    list1 = line.split(" ")
    numbers = to_numbers(list1)
    square_each(numbers)
    sums = sum_list(numbers)
    print("The sum of the squares of the numbers in the file is{0}".format(sums))

    main()



Traceback (most recent call last):

File "C:\Users\kathe\Desktop\csc161\lab_function.py", line 35, in <module>

 File "C:\Users\kathe\Desktop\csc161\lab_function.py", line 32, in main
sums = sum_list(numbers)

 File "C:\Users\kathe\Desktop\csc161\lab_function.py", line 16, in sum_list
sums = sum(values)

TypeError: 'int' object is not iterable

Я открыл файл со списком строк (цифр).Затем я использовал три функции для преобразования строки в числа, возведения в квадрат каждого числа и суммирования списка чисел.Последняя функция main () включала эти три функции.Но у меня объект 'int' не является повторяемой ошибкой.Как я могу исправить эту ошибку здесь?

1 Ответ

0 голосов
/ 01 марта 2019

Чтобы пояснить комментарий выше, вам не нужно запускать свой список через цикл for, так как функция sum справится с этим за вас.На самом деле, ваша функция sum_list довольно избыточна.Рабочая функция выглядит следующим образом:

def sum_list(nums):
    sums = sum(nums)
    return sums

Я бы исключил эту функцию и просто сделал бы:

def square_each(nums):
    import math
    for i in range(len(nums)):
        nums[i] = nums[i]**2

def to_numbers(str_list):
    numbers = [int(strings) for strings in str_list]
    return numbers

def main():
    print("This program computes the sum of the squares of numbers read from a file.")
    filename = input("Please enter the file name:")
    file = open(filename, 'r')
    line = file.readline()
    list1 = line.split(" ")
    numbers = to_numbers(list1)
    square_each(numbers)
    sums = sum(numbers) # <- this instead of your function presuming that you are feeding a list
    print("The sum of the squares of the numbers in the file is{0}".format(sums))

main()

Некоторое чтение для функции суммы в python:
http://interactivepython.org/runestone/static/pythonds/Recursion/pythondsCalculatingtheSumofaListofNumbers.html

Причина, по которой я выбрал этот пример, заключается в том, что он показывает то, что, по моему мнению, ваша функция пытается достичь - если ваши входные данные еще не были списком;но в вашем случае это на самом деле не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...