2
votes

Problème lors de la prise de plusieurs entrées dans une ligne

Je veux prendre des informations comme + 2 3 ? 1 20 où la première variable est char et la suivante sera des entiers

J'ai fait ceci

sign,m,n = input().split()
[sign,m,n]=[str(sign),int(m),int(n)]

Mais j'obtiens cette erreur

ValueError: pas assez de valeurs pour décompresser (attendu 3, obtenu 0)


5 commentaires

Ne peut pas reproduire! Votre extrait de code fonctionne très bien.


Je n'obtiens pas cette erreur avec votre entrée. Je le fais lorsque j'appuie sur Entrée sans saisir de texte. Peut-être avez-vous oublié d'entrer quelque chose?


@ usr2564301 Je fais face à cela chaque fois que j'appuie sur Entrée avec et sans valeur


@ G-man Cela me donne aussi la même erreur


Vous pouvez également accomplir cette tâche avec cette instruction sur une seule ligne: sign, m, n = [c if i == 0 else int (c) for i, c in enumerate (input (). Split () [: 3 ])] .


3 Réponses :


1
votes

Votre problème réside dans sign, m, n = input (). split () . Vous devez traiter comme une liste, pas comme une fonction qui renvoie 3 valeurs. Voici un extrait de code de ce que vous désirez:

stdin = input().split()
sign,m,n = str(stdin[0]),int(stdin[1]),int(stdin[2])

Stdin est une list^


0 commentaires

0
votes

Si vous souhaitez utiliser votre propre logique pour le faire, voici le chemin.

Ajoutez simplement [: 3] à la fin de la première instruction pour découper la liste.

>>> sign, m, n = [c if i == 0 else int(c) for i, c in enumerate(input().split()[:3])]
+ 2 3 ? 1 20
>>>
>>> sign
'+'
>>> m
2
>>> n
3
>>>

Et voici une autre façon d'accomplir la même chose en une seule ligne.

Pour cela, vous pouvez utiliser le concept de compréhension de liste.

>>> sign, m, n = input().split()[:3]
+ 2 3 ? 1 20
>>>
>>> [sign,m,n] = [str(sign), int(m), int(n)]
>>>
>>> sign
'+'
>>>
>>> m
2
>>>
>>> n
3
>>>


0 commentaires

0
votes

Le simple fait d'ajouter les parenthèses carrées dans votre première instruction fonctionne sur Python 3.6.7:

[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> [sign,m,n] = input().split()
- 2 3
>>> [sign,m,n] = [str(sign),int(m),int(n)]
>>> sign
'-'
>>> m
2
>>> n
3


1 commentaires

Ouais. Cela fonctionne aussi. Pouvez-vous me dire comment fonctionne cette parenthèse carrée?