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)
3 Réponses :
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^
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 >>>
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
Ouais. Cela fonctionne aussi. Pouvez-vous me dire comment fonctionne cette parenthèse carrée?
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 ])].