2016-11-17 2 views
0

J'ai utilisé input() dans mon programme, pour convertir l'entrée en un type de liste, mais j'ai lu que je devrais utiliser raw_input() à la place.Python 2 raw_input au type de liste

J'essaie de laisser l'utilisateur entrer des vecteurs sous la forme (4,4), (2,5), (1,6) En utilisant input() cela a fonctionné.

J'utilisé:

vectors = list(input('enter vectors\n')) 

après avoir changé à raw_input() Je reçois une liste avec tous les éléments de la str

'(' '4' ',' '4' ')' ',' '(' '2' ',' '5' ')' ',' '(' '1' ',' '6' ')' 

Comment puis-je obtenir l'entrée convertie à une liste Je voudrais obtenir comme si j'utilisais input()? Devrais-je simplement revenir à l'utilisation de input() à la place?

+0

Quelle sortie u devrait obtenir ?? –

+0

'raw_input()' renvoie une chaîne. Faire 'list' sur un' str' crée une liste de caractères qui est ce que vous obtenez. –

+0

Utilisez simplement input(). –

Répondre

0

En supposant que vous saisissez vos données sous forme 1,2 ce qui pourrait faire votre travail:

vectors = [] 
print ('enter vectors') 
while True: 
    a = raw_input('') 
    if a == 'q': 
     break 
    else: 
     vectors.append(tuple(int(c) for c in a.split(','))) 

print vectors 
0

Vous aviez raison de passer à raw_input sur input. Comme expliqué dans this question, input prend le raw_input et effectue ensuite eval, ce qui est généralement une mauvaise pratique et non sécurisé si elle provient d'une source non fiable.

Pour obtenir ce que vous désirez en utilisant raw_input, vous pouvez utiliser le module ast

import ast 

vector = raw_input('Enter Vector:') 
vector = list(ast.literal_eval(vector)) 
print vector 

>>> [(4, 4), (2, 5), (1, 6)] 
+0

cela fonctionne très bien merci – malaki

+0

je viens de remarquer si j'entre un seul tuple comme (3,6) vecteur devient [3,6] mais j'ai besoin de [(3,6)] comme sortie si j'entre 2 comme par exemple (3,6), (4,7) j'obtiens [(3,6), (4, 7)] comment pourrais-je obtenir le premier dans ce format? [(3,6)]? – malaki