Deux valeurs d'une entrée en python?

C'est une question assez simple et je déteste la poser ici, mais je ne peux pas trouver la réponse ailleurs: est-il possible d'obtenir plusieurs valeurs de L'utilisateur dans une ligne de Python?

Par exemple, en C, je peux faire quelque chose comme ceci: scanf("%d %d", &var1, &var2). Cependant, je n'arrive pas à comprendre ce qu'est L'équivalent en Python de cela. J'ai pensé que ce serait quelque chose comme var1, var2 = input("Enter two numbers here: "), mais ça ne marche pas et je ne me plains pas parce que ça n'aurait pas beaucoup de sens si ça faire.

est-ce que quelqu'un là-bas connaît une bonne façon de faire cela avec élégance et concision?

26
demandé sur Jonta 2009-06-07 09:27:53

13 réponses

Le Python moyen de la carte

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

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

notez qu'il n'est pas nécessaire de spécifier explicitement split(' ') parce que split() utilise des caractères espace comme délimiteur par défaut. Cela signifie que si nous avons simplement appelé split() alors l'utilisateur aurait pu séparer les nombres en utilisant des onglets, s'il le voulait vraiment, et aussi des espaces.,

Python a typage dynamique, donc il n'est pas nécessaire de spécifier %d. Toutefois, si vous avez exécuté le dessus puis var1 et var2 serait les deux chaînes. Vous pouvez les convertir en int utiliser une autre ligne

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

Ou vous pouvez utiliser compréhension de liste

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

pour résumer, vous auriez pu faire tout le truc avec cette doublure:

# 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()]
45
répondu kizzx2 2018-01-23 02:06:47

vous ne pouvez pas vraiment le faire de la manière C (je pense) mais une façon pythonique de le faire serait (si vos 'inputs' ont des espaces entre eux):

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

donc vous pouvez réécrire votre essayer de:

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

notez qu'il est un peu moins flexible que d'utiliser la 'première' solution (par exemple, si vous ajoutez un espace à la fin, cela se cassera déjà).

soyez également conscient que var1 et var2 seront toujours des chaînes avec cette méthode lorsqu'ils ne seront pas moulés à int.

8
répondu ChristopheD 2009-06-07 05:45:34

Python 2.*,input permet à l'utilisateur d'entrer n'importe quelle expression, par exemple un tuple:

>>> 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.*,input2.*raw_input, vous retourner une chaîne de caractères que l'utilisateur a tapé (plutôt que evaling 2.* utilisé pour faire la input), donc vous devrez .split et/ou eval, & c mais vous serez aussi beaucoup plus en contrôle de l'ensemble.

8
répondu Alex Martelli 2009-06-07 06:19:06

si vous avez besoin de prendre deux entiers disent a,b en python vous pouvez utiliser la fonction map.

Supposons que l'entrée est,

1
5 3
1 2 3 4 5

où 1 représente le cas d'essai, 5 représente le nombre de valeurs et 3 représente une valeur de tâche et à la ligne suivante donné 5 valeurs, nous pouvons prendre une telle entrée en utilisant cette méthode dans PYTH 2.x Version.

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

vous pouvez remplacer ' int ' dans map() par un autre type de données nécessaire.

6
répondu Rishabh Prasad 2015-05-24 07:42:18

toutes les entrées se feront par une chaîne de caractères. C'est à vous de traiter cette chaîne après l'avoir reçue. Sauf si c'est le cas, vous utilisez la méthode eval(input ()), mais ce n'est pas recommandé pour la plupart des situations de toute façon.

input_string = raw_input("Enter 2 numbers here: ")
a, b = split_string_into_numbers(input_string)
do_stuff(a, b)
3
répondu sykora 2009-06-07 06:26:38

Vous devez utiliser le split() méthode qui divise l'entrée en deux entrées différentes. Tout ce que vous passez dans le split est recherché et les entrées sont divisées à partir de là. Dans la plupart des cas, il est l'espace blanc.

Par exemple, Vous donnez l'entrée 23 24 25. Vous attendez 3 entrées différentes comme

num1 = 23
num2 = 24
num3 = 25

donc en Python, vous pouvez faire

num1,num2,num3 = input().split(" ")
3
répondu DeeJay 2017-01-24 05:40:02

Cochez cette fonction très pratique:

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

# usage:
a, b, c = gets(int, float, str)
2
répondu Mikołaj Rozwadowski 2014-02-16 21:15:48

La solution que j'ai trouvée est la suivante:


Demander à l'utilisateur d'entrer deux nombres séparés par une virgule ou un autre caractère

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

puis, la chaîne est fendue:n prend la première valeur et m le second

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

Enfin, pour les utiliser comme des entiers, il est nécessaire de les convertir

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


2
répondu E. Zavala 2017-09-05 21:46:50

la façon la plus facile que j'ai trouvé pour moi-même était d'utiliser la fonction de division avec entrée Comme vous avez deux variables a,b

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

c'est tout. il y a une méthode(méthode explicite) Eg-vous voulez prendre entrée dans trois valeurs

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

FACILE..

1
répondu user8258851 2017-07-08 10:06:51

ceci est un exemple de code pour prendre deux entrées séparées par une commande split et délimiter comme ","


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

>>>enter two numbers:2,3

>>> var1

'2'

>>> var2

'3'


les autres variantes de délimiteurs qui peuvent être utilisées sont les suivantes: :

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
répondu Jagannath Banerjee 2017-07-12 13:48:57

n nombre d'entrées déclarer la variable comme une liste vide et utiliser la même syntaxe:

>>> x=input('Enter value of a and b').split(",")
Enter value of a and b
1,2,3,4
>>> x
['1', '2', '3', '4']
1
répondu Premgi kumar 2018-06-28 14:26:43
a,b=[int(x) for x in input().split()]
print(a,b)

Sortie

10 8

10 8

0
répondu Siddharth jha 2018-07-07 17:34:13

En Python 3,raw_input() a été renommé input().

input([prompt])

si l'argument prompt est présent, il est écrit en sortie standard sans une fuite de saut de ligne. La fonction lit une ligne de l'entrée, le convertit en chaîne (effacement d'une nouvelle ligne de départ), et retourne que. Quand EOF est lu, EOFError est soulevé.

alors vous pouvez faire cela

x, y = input('Enter two numbers separating by a space: ').split();
print(int(x) + int(y))

Si vous ne mettez pas deux nombres à l'aide d'un espace, vous obtiendrez une ValueError exception. Donc ce qui est bon pour aller.

N.B. Si vous avez besoin à l'ancien comportement de input(), utilisez eval(input())

0
répondu unclexo 2018-07-22 07:18:32