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?
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()]
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.
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.
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.
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)
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(" ")
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)
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..
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']
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
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 :))))
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
a,b=[int(x) for x in input().split()]
print(a,b)
Sortie
10 8
10 8
Deux entrées séparées par un espace:
x,y=input().split()
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]
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())