2009-06-07 6 views
24

Это несколько простой вопрос, и я ненавижу спрашивать его здесь, но я не могу найти ответ в другом месте: возможно ли получить несколько значений от пользователя в одной строке Python?Два значения от одного входа в python?

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

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

+0

Очень похожий недавний вопрос: http://stackoverflow.com/questions/959412/parsing-numbers-in-python – NicDumZ

ответ

6

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

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

Таким образом, вы могли бы переписать попытаться:

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

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

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

42

Питон способ отображения

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()] 
8

В 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.* «s raw_input, возвращая вам строку, которая только что пользователь набранный (а не eval ИНГ как 2.* используется, чтобы сделать на input), так что вы будете до .split и/или eval, & c, но вы также будете БОЛЬШЕ больше контролировать все это.

+0

Oh noes. Никогда не делайте этого: 'input()' допускает выполнение произвольного кода. Просто введите 'exit ('pwned!')' В приглашении ввода и посмотрите, что произойдет. – 9000

3

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

input_string = raw_input("Enter 2 numbers here: ") 
a, b = split_string_into_numbers(input_string) 
do_stuff(a, b) 
2

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

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

Индекс доступа не требуется! 'return tuple (парсер (значение) для (парсер, значение) в zip (типы, raw_input (prompt) .split ('')))'. – 9000

4

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

 
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() другим необходимым типом данных.

3

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

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

num1 = 23 
num2 = 24 
num3 = 25 

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

num1,num2,num3 = input().split(" ") 
1

Самый простой способ, который я нашел для себя использовал сплит функции с входом Как у вас есть два переменных а, Ь

a,b=input("Enter two numbers").split() 

Всё. есть еще один метод (явный метод) eg-вы хотите принять вход в трех значениях

value=input("Enter the line") 
a,b,c=value.split() 

ЛЕГКО ..

1

Это пример код, чтобы взять два входа разделенных раздельной команды и разделитель как ""


>>> var1, var2 = input("enter two numbers:").split(',')
>>>enter two numbers:2,3
>>> var1
'2'
>>> var2
'3'


Другие варианты разделителей, которые могут быть использованы, как показано ниже:
var1, var2 = input("enter two numbers:").split(',')
var1, var2 = input("enter two numbers:").split(';')
var1, var2 = input("enter two numbers:").split('/')
var1, var2 = input("enter two numbers:").split(' ')
var1, var2 = input("enter two numbers:").split('~')

1

Решение я нашел следующее:


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

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

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

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

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

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


Смежные вопросы