Python - Duda: Cómo puedo manejar este tipo de listas?

   
Vista:

Duda: Cómo puedo manejar este tipo de listas?

Publicado por Jose Gomez (5 intervenciones) el 07/10/2015 15:11:18
Hola que tal, necesito manejar una lista del tipo [1,2,3] como elementos separados.
La cuestión es que el usuario debe ingresar un vector en la forma que arriba describí, pero tengo problemas para que mi programa diferencie las comas.
Cabe mencionar que apenas logro entender el raw_input() , así que espero su ayuda sea muy clara o me puedan proporcionar un tutorial que lo explique de manera clara, pues llevo buscando y no encuentro algo que atrrice en mi dilema.

No se si me explique en el primer parrafo;
EL programa debe decir algo asi:
Ingresa el primer vector, a lo que le usuario debe ingresar: (supongamos) 'x,y,z'
pero para realizar las operaciones necesarias, no se como convertir la x, en un elemento separado para poder operar y mas aún, no se como estar seguro de tomar la x (tenga 1, 2 o n cifras) sin que se considere la coma.
O como estar seguro de que las comas separan mis valores.

Gracias, y disculpen mi nivel neofito de python.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Duda: Cómo puedo manejar este tipo de listas?

Publicado por xve (1229 intervenciones) el 07/10/2015 16:08:04
Hola Jose, no se muy bien a que te refieres, pero si te insertan una cadena separada por comas, lo puedes convertir en una lista simplemente con la instrucción split()

1
2
3
x="a,b,c"
resultado=x.split(",");
print resultado

Este código devolverá una lista:
1
['a', 'b', 'c']

Es esto lo que buscas?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda: Cómo puedo manejar este tipo de listas?

Publicado por David Gonzalez (5 intervenciones) el 21/10/2015 22:32:16
al final asi lo dejé, pues no pude hacerlo de otra forma.
Les agradecería si me dijesen una forma de simplificar las tantas lineas que puse :)




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
# -*- coding: utf-8 -*-
"""
Created on Sun Oct 04 08:50:43 2015

@author: Josue
"""
 
#Programa creado por Carlo Josue Hernandez
#Notas iniciales:
#Estoy consciente que muchas de las lineas en este codigo podrian ser sustituidas y se notaria mayor eficacia en la programacion. 
#Pero aun no me siento seguro con funciones mas audaces, por lo que fui a lo seguro y trabajoso, ya pronto espero usar fuicniones mas vanzadas por mi bien y el de mi tiempo.
#Aunque no fue pedido, en muchas opciones se exige al usuario ingresar cierto tipo de datos para la comodidad de todos.
#Aunque muchos raw_input parecen inutiles, sirven para darle cierta pausa al programa. 
import math as m #Importacion de la biblioteca math, que debido a que no uso todas las funciones math, preferí darle el prefijo "m."
 
print'Programa de calculo para vectores, Presiona enter para continuar...' #presentacion o saludo  de bienvenida al usuario
raw_input()
print'Las instrucciones se daran para cada caso.Presiona enter para continuar...' #Tan solo es necesario que usuario lea las intruscciones para que todo quede mas claro.
raw_input() # este y los muchos "raw_input" que pululan en mi codigo, son ingresados con el fin de que los resultados y pantallas tengan la duración que usuario desee.
print'Para que este programa funcione de forma correcta, es necesario que digites numeros enteros,.. Presiona enter para continuar.'
raw_input() #pues muchas veces los resultados se ven amontonados y resulta poco practico trabajar con ellos
print'Cabe mencionar, que para que pueda calcular los valores requeridos, cada vector me lo debes dar eje por eje... Presiona enter para continuar.'
raw_input()#Por esa razon, le hago ver al usuario que pra continuar debe presionar enter.
print'Es decir, que para que tome como valido tu vector, debes darme el valor de x,pulsar enter; luego el de y,pulsar enter; y luego el de z y pulsar enter... Presiona enter para continuar.'
raw_input()
print'Se te informara cuando el valor halla sido aceptado mostrando un"valor guardado". Presiona enter para continuar... '
raw_input()
print'Y así, con los dos vectores... Presiona enter para continuar.'
raw_input()
print'Es importante advertirte, que si no ingresas valores correctos, no podremos lograr nada. Aun asi, te avisare cuando algo este mal :) ... Presiona enter para continuar.'
raw_input()
print'Despues de obteneer tu resultado,presiona enter y podras seleccionar otras opciones. Presiona enter para continuar...'
raw_input()
print'Muy bien, ahora si, listos!! :D ... Presiona enter para continuar.'
raw_input()
print'Dame los valores de vector 1, entrada por entrada. Despues de cada valor, presiona enter para guardarlo.'#Hasta aqui acaba el saludo-instruccion
print'Digita el primer vector'
while True:#Este while me permite hacer regresar al usuario a este sitio cuantas veces desee, mietras entre sus opciones no invoque algun "break" que lo rescate del ciclo infinito
    x1=raw_input()#el primer valor y todos son pedidos en enteros y evitan algunos errores posteriores.
    if x1.isdigit(): #Aqui se da la condicionde verificar que sea un digito y si no, se pasa a las siguientes condiciones.
        print'valor guardado'#Mensaje que indica al usario que puede continuar ingresando valores como loco.
        break#con este "break" termina el posible ciclo infinito y se pasa al siguiente valor.
    elif x1.startswith ('-') and x1[1:].isdigit():#esto permite ingresar valores negativos, pues si al inicio posee un "-" pero a continuacion encuentra un digito, lo tomara como bueno. 
        print'valor guardado'
        break
   #de aqui hasta que se pide el ingreso de la tercer entrada del segundo vector, las cosas no cambian mucho, por ello no veo necesario especificar de nuevo cada funcion.
    else:
        print'dame un valor numerico!'
while True:
    y1=raw_input()
    if y1.isdigit():
        print'valor guardado'
        break
    elif y1.startswith ('-') and y1[1:].isdigit():
        print'valor guardado'
        break
 
    else:
        print'dame un valor numerico!'
while True:
    z1=raw_input()
    if z1.isdigit():
        print'valor guardado'
        break
    elif z1.startswith ('-') and z1[1:].isdigit():
        print'valor guardado'
        break
 
    else:
        print'dame un valor numerico!' #si el valor ingresado no cumple con ninguna de las opciones anteriores se imprime el mensaje de rechazo y aquí no hay "break" que salve al usario de salir del bucle infinito:)
print'Ahora dame los valores de vector 2 entrada por entrada.Despues de cada valor, presiona enter para guardarlo.'#Mensaje para indicar al usario que podemos seguir con el vector 2.
print'Digita el segundo vector'
while True:
    x2=raw_input()
    if x2.isdigit():
        print'valor guardado'
        break
    elif x2.startswith ('-') and x2[1:].isdigit():
        print'valor guardado'
        break
 
    else:
        print'dame un valor numerico!'
while True:
    y2=raw_input()
    if y2.isdigit():
        print'valor guardado'
        break
    elif y2.startswith ('-') and y2[1:].isdigit():
        print'valor guardado'
        break
 
    else:
        print'dame un valor numerico!'
while True:
    z2=raw_input()
    if z2.isdigit():
        print'valor guardado'
        break
    elif z2.startswith ('-') and z2[1:].isdigit():
        print'valor guardado'
        break
 
    else:
        print'dame un valor numerico!'
# a partir de aqui se podria decir que comienza lo bueno, pues ya que se comprobo que los datos son validos para trabajar, se comienza a trabajar
ax1=int(x1)#
ay1=int(y1)#
az1=int(z1)#Los valores antes ingrsados en cada entrada en fomra de cadena, ahora son convertidos
ax2=int(x2)#en enteros para poder operar numericamente con ellos
ay2=int(y2)#
az2=int(z2)#
a1='a.'#
a2='b.'#
a3='c.'#
a4='d.'#Ahora se declaran las cadenas a las que debera ser igual la opcion que posteriormente el usario ingrese
a5='e.'#
a6='f.'#
a7='f.1'#
a8='f.2'#
a9='0'#
#Si, un "while True:" de nuevo. Disculpa si lo uso tantas veces, pero hasta ahora es la panacea para mis dilemas, en este punto de mi vida "while True:" es algo casi magico para mi.
while True:#"while True:" haciendo de las suyas de nuevo. Ahora nos permite forzar al usuario a ingresar opciones correctas y tambien será el punto de reunion de las opciones elegidas, para así permitir que pueda elegir todo lo que quiera el usuario.
    print'Te presento el menu de opciones:'####################################
    print'OP a. Quiero Calcular la suma'#####Todo esto es el menu de opciones##
    print'OP b. Quiero Calcular la resta'#####Cabe destacar que las opciones,##
    print'OP c. Quiero Calcular el producto escalar'##Deben ser ingresadas#####
    print'OP d. Quiero Calcular el producto vectorial'######### 'tal cual'#####
    print'OP e. Quiero Calcular el angulo(en grados) entre ellos'##############
    print'OP f. Quiero calcular la longitud del vector'########################
    print'0 Salir'
#"while True:" nos arrojara el menu de opciones un sinfin de veces.
    nor1=float(m.sqrt((ax1**2)+(ay1**2)+(az1**2)))####Estas son las normas del vector que de una vez son 
    nor2=float(m.sqrt((ax2**2)+(ay2**2)+(az2**2)))####calculadas para poder usarse después.
 
    op=raw_input('Que quieres calcular?')#aqui el usario elgie y los "elif's" posteriores evaluaran si su ellecion es correcta y le daran resultados distintos
    if (op==a1): #Esto evalua si "op" es igual a la cadena "a1" que arriba declare, y pasa lo mismo con cada uno de los sguientes "elif's"
        s1= ax1 + ax2###
        s2= ay1 + ay2#####Asi se realiza la suma.
        s3= az1 + az2###
        print'LA suma de los vectores es (',s1,',',s2,',',s3,')'#arroja el resultado de la suma pero orndenado y con formato dado por el programador, Yo.
        raw_input()
    elif (op==a2):
        r1= ax1 - ax2
        r2= ay1 - ay2#LA resta 
        r3= az1 - az2
        print'LA resta de los vectores es (',r1,',',r2,',',r3,')'
        raw_input()
    elif (op==a3):#La opcion "c.", quien nos lleva al producto punto. 
        e1= float(ax1 * ax2)#
        e2= float(ay1 * ay2)#Los valores necesarios para el producto punto
        e3= float(az1 * az2)#
        print'El producto escalar es:' ,e1+e2+e3 #el producto punto organizado
        raw_input()
 
    elif (op==a4):#Se muy bien que "numpy" pudo ahorrarme bastante trabajo en este punto,
    #pero debido a que aun no me siento muy familiarizado con su sintaxis y fuinciones, decidí ir a lo seguro y hacer las cosas un poco mas manuales.
        i=(ay1 * az2)-(az1 * ay2)# asi es como se resuelven los determiantes y de la forma "sucia" y sin recurrir a   numpy. 
        j=(ax1 * az2)-(az1 * ax2)# como explique, aun no maejo fielmente las funciones de numpy.
        k=(ax1 * ay2)-(ay1 * az2)#
        print'El producto vectorial es: i',i,'+ j',j,'+ k',k #el resultado organizado.
        raw_input()
    elif(op==a5):
        ang=m.degrees(m.acos((e1+e2+e3)/(nor1*nor2)))#el uso de la biblioteca math en su maxima expresion en mi programa. 
#.degrees funciona pra convertir los radianes (que es con lo que python trabaja de primera mano)a grados; acos() fuacniona para calcular la inversa del coseno y asi obtener el angulo, que como dije, python arroja en radianes.        
        print'El angulo entre los vectores es de:',ang,'grados.'#el resultado ordenado
        raw_input()
    elif (op==a6):#Submenu de la nomra del ctor, que es lo mismo que la longitud.
        print'OPCION F ELEGIDA:'
        while True:#"while True:" nos permite volver aquí si no da un opcion valida
            print'Ingresa el valor al cual calcular su longitud'
            print'OP f.1 VECTOR 1'
            print'OP f.2 VECTOR 2'
            opf=raw_input()
            if (opf==a7):
                print'LA longitud del vector 1 es:',nor1
                raw_input()
                break# debido a que el programa no explica si aqui se debe dar algun bucle y dar opciones al usaurio para terminarlo, decidi que usuario solo conozca la norma de un vector,
                #pero si quiera los dos, deberia de volver a digitar la opción "f." en el menu principal.
            elif (opf==a8):
                print'La longitud del vector 2 es:',nor2
                raw_input()
                break#cabe destacar que tanto este "break" como elanterior, ahora aparecen para cortar el while interno y asi llevarnos al menu principal despues de ver el resultado.
            else:
                print'elige una opcion valida.' #si el suario no ingresa un valor valido, de nuevo gracias al "while True:" volvera al inicio de este submenu, no sin antes ser regañado. 
 
    elif (op==a9):#si el usario ya calculo todo o lo necesario o no quiere calcular nada, la opcion 9 o "0" le permite salir sin ningun remordimiento.
        break
    else:
        print'elige una opcion valida!' #si el suario no ingresa un valor valido, de nuevo gracias al "while True:" volvera al inicio del menu, no sin antes ser regañado. 
 
print'Hasta la proxima' #finalmente el mensaje de  despedida.
raw_input()  #con este raw_input() se cerrara la ventana cuando el usuario presione enter.   
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar