Как получить более одного входа из одной функции input () в Python? - PullRequest
1 голос
/ 23 февраля 2020

Я узнал, что, используя * перед аргументом пользовательской функции, я могу передать более одного или неопределенное количество данных в качестве аргумента. Для добавления функции чисел или чего-то в этом роде я могу передавать неограниченное количество данных при вызове функции. Но я хочу получить эти цифры от пользователя. Поскольку я не знаю, сколько чисел я собираюсь получить, я не могу объявить переменную для каждого из них ранее. Теперь, как я могу получить много чисел в качестве ввода и добавить их вместе с пользовательской функцией? Моя идея очень похожа на калькулятор в реальной жизни.

Вот мой код. Я хочу получить числа в качестве входных данных вместо того, чтобы вводить их вручную при написании кода. Буду благодарен, если кто-нибудь даст мне код о том, что я пытался сделать.

def add_number(*args):
    total = 0
    for number in args:
        total += number
    print(total)


add_number(2, 3, 6, 9)

1 Ответ

1 голос
/ 23 февраля 2020

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