Я хочу сделать программу, которая принимает целочисленные данные от пользователя и суммирует их.Там нет фиксированного количества параметра - PullRequest
0 голосов
/ 17 мая 2018

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

Код:

def sum(*args):
    tmp = 0
    for number in args:
        tmp = tmp + number
    return tmp

temp = [int(i) for i in input().split()]
sum(temp)
print(temp)

Ошибка:

10 20 30
Traceback (most recent call last):
  File "D:/PyCharm/test2.py", line 8, in <module>
    sum(temp)
  File "D:/PyCharm/test2.py", line 4, in sum
    tmp = tmp + number
TypeError: unsupported operand type(s) for +: 'int' and 'list'

Process finished with exit code 1 

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

Ваша sum() функция помещает все передаваемые ей аргументы в кортеж, потому что вы использовали *args. Вы вызвали функцию sum() с одним аргументом, который является списком. Итак, args - это кортеж с одним элементом, списком:

>>> def demo(*args): return args
...
>>> demo([42, 81])
([42, 81],)

Затем вы перебираете кортеж и пытаетесь суммировать объект списка.

Либо удалите * из параметра args (и просто примите один аргумент), либо передайте значения вашего списка в sum(), используя * в вызове тоже:

def sum(args):
    # ... all the same code

# ...
result = sum(temp)

или

result = sum(*temp)

Вы также игнорируете возвращаемое значение функции sum() и печатаете входные данные. Если вы хотите напечатать результат, передайте этот результат в print(). В приведенных выше примерах я добавил переменную result, напечатав эту переменную.

0 голосов
/ 17 мая 2018

Есть две ошибки:

после вызова sum(temp), вы должны присвоить результат переменной и распечатать его.

sum должен занимать список, а не * список.

Ваш код должен выглядеть следующим образом:

def sum(args):
    tmp = 0
    for number in args:
        tmp = tmp + number
    return tmp

temp = [int(i) for i in input().split()]
result = sum(temp)
print(result)

Отпечатки:

$ python3 suminputs.py
3 4 5
12 
$
0 голосов
/ 17 мая 2018

Вы должны развернуть свой список перед передачей:

sum(*temp)

Таким образом, args будет списком [10, 20, 30].Вместо этого, если вы просто вызовете sum(temp), тогда args будет списком аргументов, поэтому он просто окажется списком из одного элемента списка [[10, 20, 30]], что не то, что вы хотите

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