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?
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()]
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.
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.*
,input
2.*
raw_input
, vous retourner une chaîne de caractères que l'utilisateur a tapé (plutôt que eval
ing 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.
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.
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)
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(" ")
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)
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)
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..
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('~')
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']
a,b=[int(x) for x in input().split()]
print(a,b)
Sortie
10 8
10 8
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())