web-dev-qa-db-fra.com

Deux valeurs d'une entrée en python?

C'est une question assez simple et je déteste le poser ici, mais je ne peux pas sembler 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 ne peux pas comprendre quel est l'équivalent Python. Je pensais que ce serait juste 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 marchait. 

Est-ce que quelqu'un sait comment faire cela avec élégance et concision? 

30
Donovan

La façon python de mapper

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

serait 

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

Notez qu'il n'est pas nécessaire de spécifier explicitement split(' ') car split() utilise des caractères d'espacement comme délimiteur par défaut. Cela signifie que si nous appelions simplement split(), l’utilisateur aurait pu séparer les nombres à l’aide de tabulations, s’il le voulait vraiment, ainsi que les espaces.

Python a un typage dynamique, il n’est donc pas nécessaire de spécifier %d. Cependant, si vous avez exécuté ce qui précède, var1 et var2 seraient les deux chaînes. Vous pouvez les convertir en int en utilisant une autre ligne

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

Ou vous pouvez utiliser comprendre la liste

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

Pour résumer, vous auriez pu tout faire avec ce one-liner:

# 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()]
51
kizzx2

Vous ne pouvez pas vraiment le faire en C (je pense) mais une façon de le faire en Pythonique serait (si vos 'entrées' ont des espaces entre elles):

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

Vous pouvez donc réécrire votre tentative pour:

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

Notez que cela est un peu moins flexible que l’utilisation de la "première" solution (par exemple, si vous ajoutez un espace à la fin, cela casse déjà).

Sachez également que var1 et var2 seront toujours des chaînes avec cette méthode si elles ne sont pas converties en int.

10
ChristopheD

Dans Python 2.*, input permet à l'utilisateur de saisir 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

Dans Python 3.*, input est semblable au 2.* de raw_input, vous renvoyant une chaîne correspondant à ce que l'utilisateur a saisi (plutôt que eval comme étant le 2.* utilisé auparavant par input), vous devrez donc .split et/ou eval Vous aurez aussi BEAUCOUP plus de contrôle sur l'ensemble.

8
Alex Martelli

Si vous avez besoin de prendre deux entiers, dites a, b en python, vous pouvez utiliser la fonction map.
Supposons que l’entrée soit,

 1 
 5 3 
 1 2 3 4 5 

où 1 représente le scénario de test, 5 représente le nombre de valeurs et 3 représente une valeur de tâche et, à la ligne suivante, 5 valeurs, nous pouvons effectuer cette 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
Rishabh Prasad

Toutes les entrées se feront par une chaîne. 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 de toute façon pas recommandé dans la plupart des situations.

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

Vous devez utiliser la méthode split() qui divise l’entrée en deux entrées différentes. Tout ce que vous passez dans la scission est recherché et l'entrée est scindée à partir de là. Dans la plupart des cas, c'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
devDeejay

Vérifiez cette fonction 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
Mikołaj Rozwadowski

Le moyen le plus simple que j’ai trouvé pour moi-même était d’utiliser la fonction split avec inputVous avez deux variables a, b

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

C'est ça . Il y a encore une méthode (méthode explicite) Par exemple, vous voulez prendre une entrée dans trois valeurs

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

FACILE.. 

1
user8258851

Pour n nombre d'entrées, déclarez la variable sous forme de liste vide et utilisez la même syntaxe pour procéder:

>>> 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
Premgi kumar

si nous voulons deux entrées sur une seule ligne, le code est le suivant: enter code here 

x,y=input().split(" ")

print(x,y)

après avoir donné de la valeur en entrée, nous devons laisser des espaces entre eux à cause de la fonction ou de la méthode split ("").

mais ces valeurs sont de type chaîne si, pour effectuer des opérations arithmétiques, nous devons convertir le type de x, y est comme suit int (x), int (y)

nous pouvons le faire aussi à l'aide de list in python .enter code here

list1=list(map(int,input().split()))
print(list1)

cette liste donne les éléments de type int

0
JATIN BEHUNE

Cette solution est utilisée pour convertir plusieurs chaînes telles que ("22 44 112 2 34") en une liste entière et vous pouvez accéder aux valeurs d'une liste. 

n = input("") # Like : "22 343 455 54445 22332"

if n[:-1] != " ":
n += " "

char = ""
list = []

for i in n :
    if i != " ":
        char += i
    Elif i == " ":
        list.append(int(char))
        char = ""

print(list) # Be happy :))))
0
Ali Montajebi

J'ai essayé cela en Python 3, semble fonctionner correctement.

a, b = map(int,input().split())

print(a)

print(b)

Entrée: 3 44

Sortie:

3

44

0
user10564553
a,b=[int(x) for x in input().split()]
print(a,b)

Sortie

10 8

10 8

0
Siddharth jha

Deux entrées séparées par un espace:

x,y=input().split()
0
Zeinab

Tu peux faire comme ça 

a, b = map(int, input().split())

OR

a, b = input().split()
print(int(a))

OR

MyList = list(map(int, input().split()))
a = MyList[0]
b = MyList[1]
0
vishwaraj

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

input([Prompt])

Si l'argument Invite est présent, il est écrit dans la sortie standard sans fin de ligne. La fonction lit ensuite une ligne à partir de l'entrée, le convertit en chaîne (en supprimant une nouvelle ligne) et renvoie cette. Lorsque EOF est lu, EOFError est déclenché.

Donc tu peux faire comme ça

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

Si vous ne mettez pas deux nombres en utilisant un espace, vous obtiendrez une exception ValueError. Donc c'est bon pour aller. 

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

0
unclexo