comment faire fonctionner l'entrée en python

Je veux entrer un vecteur sous la forme " (x, y, z) "

    s=raw_input("Enter vector (x,y,z): ")
    x,y,z= s.split()
    self.x= float(x)
    self.y= float(y)
    self.z= float(z)

Qu'est-ce qui manque dans le code? Ne devrait pas diviser faire le travail?

J'ai essayé s.split ("(", ",", ")") aussi, mais sans succès.

0

3 Réponses

Une alternative: capturez ce que vous voulez plutôt que de diviser ce que vous n'avez pas.

import re
s = '(44.2, 19, 12.73)'
floats_rgx = re.compile(r'-?\d+(?:\.\d+)?')
x, y, z = map(float, floats_rgx.findall(s))

Cette approche a l'avantage (ou le désavantage, selon vos objectifs) de permettre des formats d'entrée plus ouverts. Si vous voulez quelque chose de plus strict, vous pouvez écrire une expression régulière complète pour valider le format d'entrée précis.

0
ajouté
Vous pouvez également ajouter -? au début du modèle pour gérer les nombres négatifs.
ajouté l'auteur iCodez, source

Vous pouvez utiliser ast.literal_eval pour une telle entrée:

>>> import ast
>>> s = "(1,100,200)"
>>> x, y, z =  ast.literal_eval(s)
>>> type(x)

En utilisant les fonctions de chaîne, vous devez d'abord enlever () , puis diviser sur , :

>>> x, y, z = s.strip('()').split(',')
>>> x, y, z
('1', '100', '200')

Aide sur str.split :

S.split([sep [,maxsplit]]) -> list of strings

Renvoie une liste des mots de la chaîne S, en utilisant sep comme       chaîne de délimitation. Si maxsplit est donné, au plus maxsplit       les scissions sont faites. Si sep n'est pas spécifié ou est , tout       La chaîne blanche est un séparateur et les chaînes vides sont supprimées       à partir du résultat.

0
ajouté

Si vous entrez comme ceci:

Enter vector (x,y,z):
> 2,3,4

Tu voudrais faire

x, y, z = s.split(",")

Si vous entrez les nombres séparés par des virgules et des espaces, procédez comme suit:

x, y, z = s.split(", ")

str.split splits the string into substrings, split on each occurence of the argument supplied (which defaults to " ").

0
ajouté