Два значения из одного входа в Python? - PullRequest
32 голосов
/ 07 июня 2009

Это довольно простой вопрос, и мне неприятно задавать его здесь, но я не могу найти ответ где-либо еще: возможно ли получить несколько значений от пользователя в одной строке Python?

Например, в C я могу сделать что-то вроде этого: scanf("%d %d", &var1, &var2). Тем не менее, я не могу понять, что это за эквивалент Python. Я подумал, что это будет что-то вроде var1, var2 = input("Enter two numbers here: "), но это не работает, и я не жалуюсь, потому что это не имело бы большого смысла, если бы это произошло.

Кто-нибудь знает хороший способ сделать это элегантно и лаконично?

Ответы [ 18 ]

54 голосов
/ 07 июня 2009

Python путь к карте

printf("Enter two numbers here: ");
scanf("%d %d", &var1, &var2)

будет

var1, var2 = raw_input("Enter two numbers here: ").split()

Обратите внимание, что нам не нужно явно указывать split(' '), поскольку split() использует любые пробельные символы в качестве разделителя по умолчанию. Это означает, что если бы мы просто позвонили split(), то пользователь мог бы разделить числа, используя табуляции, если он действительно хотел, а также пробелы.,

Python имеет динамическую типизацию, поэтому нет необходимости указывать %d. Однако, если вы запустили вышеописанное, тогда var1 и var2 будут обеими строками. Вы можете преобразовать их в int, используя другую строку

var1, var2 = [int(var1), int(var2)]

Или вы можете использовать понимание списка

var1, var2 = [int(x) for x in [var1, var2]]

Подводя итог, вы могли бы сделать все это с помощью одной строки:

# Python 3
var1, var2 = [int(x) for x in input("Enter two numbers here: ").split()]

# Python 2
var1, var2 = [int(x) for x in raw_input("Enter two numbers here: ").split()]
10 голосов
/ 07 июня 2009

Вы не можете сделать это по-C (я думаю), но питонский способ сделать это (если ваши «входы» имеют пробелы между ними):

raw_answer = raw_input()
answers = raw_answer.split(' ') # list of 'answers'

Чтобы вы могли переписать вашу попытку:

var1, var2 = raw_input("enter two numbers:").split(' ')

Обратите внимание, что это несколько менее гибко, чем использование «первого» решения (например, если вы добавите пробел в конце, это уже сломается).

Также помните, что var1 и var2 по-прежнему будут строками с этим методом, если они не приводятся к int.

8 голосов
/ 07 июня 2009

В Python 2.*, input позволяет пользователю ввести любое выражение, например, кортеж:

>>> a, b = input('Two numbers please (with a comma in between): ')
Two numbers please (with a comma in between): 23, 45
>>> print a, b
23 45

В Python 3.*, input похоже на 2.* * raw_input, возвращая вам строку, которая была введена пользователем (вместо eval, как 2.*, используемый для input), так что вам придется .split и / или eval, & c, но вы также НАМНОГО больше будете контролировать все это.

6 голосов
/ 24 мая 2015

Если вам нужно взять два целых числа, скажем, a, b в python, вы можете использовать функцию карты.
Предположим, что ввод,

1
5 3
1 2 3 4 5

, где 1 представляет тестовый пример, 5 представляет количество значений, а 3 представляет значение задачи, а в следующей строке, учитывая 5 значений, мы можем получить такой ввод, используя этот метод в версии PYTH 2.x

testCases=int(raw_input())
number, taskValue = map(int, raw_input().split())
array = map(int, raw_input().split())

Вы можете заменить int в map () другим необходимым типом данных.

4 голосов
/ 24 января 2017

Вы должны использовать метод split(), который разделяет вход на два разных входа. Все, что вы передаете в разделение, ищется, а вход разделяется оттуда. В большинстве случаев это пробел.

Например, вы даете ввод 23 24 25. Вы ожидаете 3 различных входа, как

num1 = 23
num2 = 24
num3 = 25

Так в Python можно сделать

num1,num2,num3 = input().split(" ")
3 голосов
/ 07 июня 2009

Весь ввод будет через строку. Это ваша задача - обработать эту строку после того, как вы ее получили. Если это не так, вы используете метод eval (input ()), но в любом случае это не рекомендуется для большинства ситуаций.

input_string = raw_input("Enter 2 numbers here: ")
a, b = split_string_into_numbers(input_string)
do_stuff(a, b)
3 голосов
/ 06 сентября 2017

Я нашел следующее решение:


Попросить пользователя ввести два числа, разделенных запятой или другим символом

value = input("Enter 2 numbers (separated by a comma): ")

Затем строка разделяется: n принимает первое значение и m второе значение

n,m = value.split(',')

Наконец, чтобы использовать их как целые числа, необходимо преобразовать их

n, m = int(n), int(m)


2 голосов
/ 28 июня 2018

Для n количества входов объявите переменную как пустой список и используйте тот же синтаксис, чтобы продолжить:

>>> x=input('Enter value of a and b').split(",")
Enter value of a and b
1,2,3,4
>>> x
['1', '2', '3', '4']
2 голосов
/ 17 февраля 2014

Проверьте эту удобную функцию:

def gets(*types):
    return tuple([types[i](val) for i, val in enumerate(raw_input().split(' '))])

# usage:
a, b, c = gets(int, float, str)
1 голос
/ 16 ноября 2018

Два входа разделены пробелом:

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