Вы говорите, что вам нужно использовать один вход. В этом случае мы можем разделить наш ввод, используя метод строки .split(separator)
, который возвращает список частей данной строки. separator
аргумент необязателен: если пользователь вводит числа, разделенные пробельными символами, вам не нужно передавать этот аргумент, в противном случае вам нужно передать разделитель.
numbers = input("Enter the numbers... ").split() # if numbers are separated by any of whitespace characters ("1 2 3 4")
numbers = input("Enter the numbers... ").split(", ") # if numbers are separated by a comma and a space ("1, 2, 3, 4")
Примечание: Я предполагаю, что ваши числа разделены пробелом в следующей части ответа.
Если мы хотим напечатать список numbers
, мы получим следующий вывод:
>>> numbers = input("Enter the numbers... ").split()
Enter the numbers... 1 2 3 4
>>> print(numbers)
['1', '2', '3', '4']
Как видим, все элементы нашего списка строки (из-за кавычек: '1'
, а не 1
). Если мы попытаемся объединить их вместе, мы получим что-то вроде этого: '1234'
. Но если вы хотите объединить их как числа, а не строки, нам нужно преобразовать их в тип int (для целых чисел) или float (для нецелых чисел). Если у нас есть один номер, это можно сделать легко: int(number)
. Но у нас есть список чисел , и нам нужно преобразовать каждый элемент в int
.
Мы можем использовать функцию map(func, iterable)
. Он будет применять func
к каждому элементу iterable
и возвращать объект map
- итератор (НЕ список!) :
numbers = map(int, numbers)
Примечание : если мы хотим представить его как список, мы можем просто сделать:
numbers = list(map(int, numbers))
, хотя здесь это и не нужно.
И теперь мы можем выбросить все числа к вашей add_number(*args)
функции, используя звездочку (*) - pack их:
add_number(*numbers)
Примечание: вы также можете использовать * Функция 1060 * для добавления всех чисел из повторяемых - в этом случае вам не нужно упаковывать аргументы, потому что она получает одну повторяемую из чисел:
sum_ = sum(numbers)
И тогда давайте print
наши результат:
print(sum_)
Важное примечание: sum(iterable)
возвращает сумму чисел и ничего не печатает, а ваша add_number(*args)
функция возвращает None и печатает номер (это не одно и то же!). Здесь - хорошее, подробное объяснение.
Вот весь код, который мы написали:
def add_number(*args):
total = 0
for number in args:
total += number
print(total)
numbers = input("Enter the numbers... ").split() # if numbers are separated by any of whitespace characters ("1 2 3 4")
numbers = map(int, numbers)
add_number(*numbers)
А вот одна строка, которая выполняет то же самое - он использует функцию sum
вместо add_number
и, следовательно, больше ничего не требует в коде:
print(sum(map(int, input("Enter the numbers... ").split())))