Este documento presenta el desarrollo de un programa en Python para realizar operaciones con vectores tridimensionales. Propone dividir el programa en módulos para las operaciones de suma, diferencia, producto escalar, producto vectorial, cálculo del ángulo y longitud. Incluye un módulo principal y uno de menú para interactuar con el usuario. Explica el diseño básico de cada módulo y provee pseudocódigo para su implementación.
Original Description:
Original Title
Desarrollo de Un Programa en Python Para Operar Con Vectores
Este documento presenta el desarrollo de un programa en Python para realizar operaciones con vectores tridimensionales. Propone dividir el programa en módulos para las operaciones de suma, diferencia, producto escalar, producto vectorial, cálculo del ángulo y longitud. Incluye un módulo principal y uno de menú para interactuar con el usuario. Explica el diseño básico de cada módulo y provee pseudocódigo para su implementación.
Este documento presenta el desarrollo de un programa en Python para realizar operaciones con vectores tridimensionales. Propone dividir el programa en módulos para las operaciones de suma, diferencia, producto escalar, producto vectorial, cálculo del ángulo y longitud. Incluye un módulo principal y uno de menú para interactuar con el usuario. Explica el diseño básico de cada módulo y provee pseudocódigo para su implementación.
Camilo Bernal 22 de agosto de 2014 ndice 1. Introduccin 1 2. Anlisis preliminar 2 3. Diseo bsico 3 3.1. Mdulo main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.2. Mdulo suma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.3. Mdulo diferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.4. Mdulo p_escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.5. Mdulo p_vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.6. Mdulo angulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.7. Mdulo longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3.8. Mdulo menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4. Pseudo-Cdigo 5 4.1. Mdulo main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.2. Mdulo suma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.3. Mdulo diferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.4. Mdulo p_escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4.5. Mdulo p_vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4.6. Mdulo angulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4.7. Mdulo longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4.8. Mdulo menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5. Cdigo Python 8 5.1. Mdulo main . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.2. Mdulo suma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.3. Mdulo diferencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.4. Mdulo p_escalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.5. Mdulo p_vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5.6. Mdulo angulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5.7. Mdulo longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 5.8. Mdulo menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 6. Conclusiones 16 I 7. Lecturas recomendadas 17 II 1. Introduccin Lo primero que se debe aclarar es que no soy un experto en programacin ni mucho menos. Si eres un aprendiz (como yo) este manual puede ayudarte. Si eres un experto, quizs slo te sirva para aprender cmo "no hacer las cosas como un aprendiz". Se presentan las operaciones bsicas sobre dos vectores tridimensionales. El documento presenta un ejemplo de resolucin del problema partiendo desde un diseo muy bsico y concluyendo con un programa en lenguaje Python, que si bien no es perfecto, al menos funciona como prototipo. 1 2. Anlisis preliminar Se desea realizar diversas operaciones sobres dos vectores tridimensionales v1 y v2. Se quiere adems que el usuario elija la operacin que quiere realizar. Las operaciones que se pueden realizar son las siguientes: Suma: (x 1 , y 1 , z 1 ) + (x 2 , y 2 , z 2 ) = (x 1 + x 2 , y 1 + y 2 , z 1 + z 2 ) Diferencia: (x 1 , y 1 , z 1 )(x 2 , y 2 , z 2 ) = (x 1 x 2 , y 1 y 2 , z 1 z 2 ) Producto escalar: (x 1 , y 1 , z 1 ) (x 2 , y 2 , z 2 ) = x 1 x 2 + y 1 y 2 + z 1 z 2 Producto vectorial: (x 1 , y 1 , z 1 )(x 2 , y 2 , z 2 ) = (y 1 z 2 z 1 y 2 , z 1 x 2 x 1 z 2 , x 1 y 2 y 1 x 2 ) Angulo entre (x 1 , y 1 , z 1 ) y (x 2 , y 2 , z 2 ) = 180
arc cos
x 1 x 2 +y 1 y 2 +z 1 z 2
( x 2 1 +y 2 1 +z 2 1 )
( x 2 2 +y 2 2 +z 2 2 )
Longitud de (x, y, z):
x 2 + y 2 + z 2 Se recomienda hacer un trabajo de programacin incremental, esto es ir realizando pe- queos cambios al programa y volver a llamar al intrprete para tareas de depuracin, a n de que cuando se concluya la tarea no se tenga una cantidad desconocida de errores. Una de las mayores frustraciones que en lo personal he tenido realizando programas, se relaciona con el bloqueo mental ante una cantidad excesiva de cdigo y excepciones. Lo que recomiendo es realizar un diseo previo y escribir todo el pseudocdigo. Antes de escribir una sola lnea de cdigo, es muy conveniente tener perfectamente claro cmo resolver el problema; este pequeo truco ahorrar muchas horas de trabajo y mucha frustracin (De otro modo, puedes terminar dando "palos de ciego"). 2 3. Diseo bsico El programa se construir en mdulos, a n de evitar que los cheros individuales tengan una cantidad excesiva de cdigo. Se construirn 8 mdulos: Uno para cada operacin, <menu> y el mdulo <main>. En el mdulo <main> se llama los dems componentes del programa. El mdulo <angulo> se har en ltimo lugar, puesto que necesita de resultados provistos por los dems mdulos. Una vez hechos todos los mdulos de operaciones, se empieza a hacer el mdulo <menu>, que permite al usuario elegir entre una serie de opciones para operar con los vectores. A continuacin se presenta un bosquejo bsico de lo que contendr cada mdulo. 3.1. Mdulo main De f i ni r f unci on main Expl i car l o que hace s o l i c i t a r parmetros Llamar a l a f unci n Mostrar r e s ul t ado I nvocar f unci on main 3.2. Mdulo suma De f i ni r f unci on f_suma Expl i car l o que hace Hacer l a suma de ve c t or e s Retornar r e s ul t ado 3.3. Mdulo diferencia De f i ni r f unci on f _di f e r e nc i a Expl i car l o que hace Hacer di f e r e nc i a de ve c t or e s Retornar r e s ul t ado 3.4. Mdulo p_escalar 3 De f i ni r f unci on f _p_escal ar Expl i car l o que hace Hacer producto e s c a l a r Retornar r e s ul t ado 3.5. Mdulo p_vectorial De f i ni r f unci on f _p_vect or i al Expl i car l o que hace Hacer producto v e c t o r i a l Retornar r e s ul t ado 3.6. Mdulo angulo De f i ni r f unci on f _angul o Expl i car l o que hace Hacer c a l c ul o de ngul o Retornar r e s ul t ado 3.7. Mdulo longitud De f i ni r f unci on f _l ongi t ud Expl i car l o que hace Hacer c a l c ul o de l ongi t ud Retornar r e s ul t ado 3.8. Mdulo menu De f i ni r f unci on des pl egar _opci ones Expl i car l o que hace de s pl e gar l a s opci ones al us uar i o Retornar opci on e l e g i da De f i ni r f unci on ej ecut ar _opci on Expl i car l o que hace Ej ecut ar l a opci on e l e gi da 4 4. Pseudo-Cdigo Una vez realizado el diseo bsico, se puede empezar a escribir el pseudo-cdigo. Para esto es suciente con utilizar el diseo previo y empezar a realizar pequeas adiciones, que servirn como pistas y evitarn el bloqueo mental ms adelante. 4.1. Mdulo main De f i ni r f unci on main Invoca a ot r os componentes del programa para c a l c ul a r y determi nar e l r e s ul t ado Es t abl e c e r parmetros Llamar a l a f unci n que corresponda Mostrar r e s ul t ado I nvocar f unci on main 4.2. Mdulo suma De f i ni r f unci on f_suma Suma dos ve c t or e s t r i di me ns i onal e s Hacer l a suma de ve c t or e s usando un c i c l o f o r I r guardando cada coordenada en l a l i s t a r_suma Retornar r e s ul t ado 4.3. Mdulo diferencia De f i ni r f unci on f _di f e r e nc i a Cal cul a l a di f e r e nc i a ent r e dos ve c t or e s t r i di me ns i onal e s Hacer di f e r e nc i a de ve c t or e s usando un c i c l o f o r I r guardando cada coordenada en l a l i s t a r _di f e r e nc i a Retornar r e s ul t ado 4.4. Mdulo p_escalar 5 De f i ni r f unci on f _p_escal ar Cal cul a e l producto e s c a l a r de dos ve c t or e s t r i di me ns i onal e s Hacer producto e s c a l a r usando un c i c l o f o r I r guardando e l acumulado en r_p_escal ar Retornar r e s ul t ado 4.5. Mdulo p_vectorial De f i ni r f unci on f _p_vect or i al Cal cul a e l producto v e c t o r i a l de dos ve c t or e s t r i di me ns i onal e s Hacer producto v e c t o r i a l Retornar r e s ul t ado 4.6. Mdulo angulo De f i ni r f unci on f _angul o Cal cul a e l angul o de dos ve c t or e s t r i di me ns i onal e s Hacer c al c ul o de ngul o Cal cul ar producto e s c a l a r Cal cul ar Longi tud de vect or 1 Cal cul ar Longi tud de vect or 2 Cal cul ar denominador ( mul ti p . l o s 2 a nt e r i o r e s ) d i v i d i r producto e s c a l a r ent r e denominador Apl i car arcocoseno a l a di v i s i n ant e r i or Mul t i pl i c ar r e s ul t ado ant e r i o r por 180/ pi ( ) Retornar r e s ul t ado 4.7. Mdulo longitud De f i ni r f unci on f _l ongi t ud Cal cul a l a l ongi t ud de un vect or t r i di me ns i onal Hacer c al c ul o de l ongi t ud Retornar r e s ul t ado 4.8. Mdulo menu 6 De f i ni r f unci on des pl egar _opci ones Des pl i ega una s e r i e de opci ones para e l e g i r de s pl e gar l a s opci ones al us uar i o pedi r que e l i j a una val i dar e l e c c i n Retornar l a e l e c c i n obteni da De f i ni r f unci on ej ecut ar _opci on Ej ecuta una acci n e l e gi da en l a f unci n des pl egar _opci ones Crear bucl e i nde f i ni do Llamar a l a f unci n des pl egar _opci ones Ej ecut ar l a opci on e l e gi da Si l a opci on e l e gi da es 9 , romper e l bucl e Retornar 7 5. Cdigo Python Creo que no es intil repetirlo: El cdigo se escribe NICAMENTE cuando ya se tenga alguna idea de cmo resolver el problema y se haya planteado la solucin con alguna claridad. Lanzarse a escibir cdigo de manera irreexiva es la receta perfecta para la frustracin: ojal no caigan en ese error. A continuacin se presenta una propuesta del cdigo en Python, talvez est plagada de errores, ingenuidades e inconsistencias, pero incluso de eso podemos aprender, y aprender es el nico objetivo de este documento. 5.1. Mdulo main #! / usr / bi n/env python # encodi ng : Lati n1 i mport menu def main ( ) : " " " Invoca a ot r os componentes del programa para c a l c ul a r y determi nar e l r e s ul t ado " " " # Es t abl e c e r parmetros # Llamar a l a f unci n ej ecut ar _opci on del mdulo # menu menu. ej ecut ar _opci on ( ) main ( ) 5.2. Mdulo suma #! / usr / bi n/env python # encodi ng : Lati n1 def f_suma( v1 , v2 ) : " " " Suma dos ve c t or e s t r i di me ns i onal e s " " " # Hacer l a suma de ve c t or e s usando un c i c l o f or r_suma = [ ] f or i i n xrange ( 3 ) : # I r guardando cada coordenada en l a l i s t a r_suma r_suma . append ( v1 [ i ]+v2 [ i ] ) # Retornar r e s ul t ado r et ur n r_suma ## v1 = ( 10 , 10 , 10) 8 ## v2 = ( 4 , 4 , 6) ## pr i nt f_suma( v1 , v2 ) 5.3. Mdulo diferencia #! / usr / bi n/env python # encodi ng : Lati n1 def f _di f e r e nc i a ( v1 , v2 ) : " " " Cal cul a l a di f e r e nc i a ent r e dos ve c t or e s t r i di me ns i onal e s " " " # Hacer di f e r e nc i a de ve c t or e s usando un c i c l o f o r # I r guardando cada coordenada en l a l i s t a r _di f e r e nc i a r _di f e r e nc i a = [ ] f or i i n xrange ( 3 ) : r _di f e r e nc i a . append ( v1 [ i ] v2 [ i ] ) # Retornar r e s ul t ado r et ur n r _di f e r e nc i a ## v1 = ( 1 , 2 , 3) ## v2 = ( 3 , 2 , 1) ## pr i nt f _di f e r e nc i a ( v1 , v2 ) 5.4. Mdulo p_escalar #! / usr / bi n/env python # encodi ng : Lati n1 def f _p_escal ar ( v1 , v2 ) : " " " Cal cul a e l producto e s c a l a r de dos ve c t or e s t r i di me ns i onal e s " " " # Hacer producto e s c a l a r usando un c i c l o f o r # I r guardando e l acumulado en r_p_escal ar r_p_escal ar = 0 f or i i n xrange ( 3 ) : r_p_escal ar += v1 [ i ] v2 [ i ] # Retornar r e s ul t ado r et ur n r_p_escal ar ## v1 = ( 2 , 1 , 4) ## v2 = ( 7 , 1 , 5) ## pr i nt f _p_escal ar ( v1 , v2 ) 5.5. Mdulo p_vectorial 9 #! / usr / bi n/env python # encodi ng : Lati n1 def f _p_vect or i al ( v1 , v2 ) : " " " Cal cul a e l producto v e c t o r i a l de dos ve c t or e s t r i di me ns i onal e s " " " # Hacer producto v e c t o r i a l pv_x = v1 [ 1 ] v2 [ 2 ] v1 [ 2 ] v2 [ 1 ] pv_y = v1 [ 2 ] v2 [ 0 ] v1 [ 0 ] v2 [ 2 ] pv_z = v1 [ 0 ] v2 [ 1 ] v1 [ 1 ] v2 [ 0 ] r e s ul t ado = [ pv_x , pv_y , pv_z ] # Retornar r e s ul t ado r et ur n r e s ul t ado ## v1 = ( 31 , 40 , 3) ## v2 = (3 , 0 , 63) ## pr i nt f _p_vect or i al ( v1 , v2 ) 5.6. Mdulo angulo #! / usr / bi n/env python # encodi ng : Lati n1 i mport p_escal ar i mport l ongi t ud from math i mport acos , pi def f _angul o ( v1 , v2 ) : " " " Cal cul a e l angul o de dos ve c t or e s t r i di me ns i onal e s " " " # Hacer c a l c ul o de ngul o # Cal cul ar producto e s c a l a r prod_escal ar = p_escal ar . f _p_escal ar ( v1 , v2 ) # Cal cul ar Longi tud de vect or 1 long_v1 = l ongi t ud . f _l ongi t ud ( v1 ) # Cal cul ar Longi tud de vect or 2 long_v2 = l ongi t ud . f _l ongi t ud ( v2 ) # Cal cul ar denominador ( mul ti p . l o s 2 a nt e r i o r e s ) denominador = long_v1 long_v2 # di v i di r producto e s c a l a r ent r e denominador vl or = prod_escal ar / denominador # Apl i car arcocoseno a l a di v i s i n ant e r i or vl or 1 = acos ( vl or ) # Mul t i pl i c ar r e s ul t ado a nt e r i or por 180/ pi ( ) r e s ul t ado = 180 / pi vl or 1 # Retornar r e s ul t ado r et ur n r e s ul t ado 10 ## v1 = ( 1 , 0 , 1) ## v2 = (1 , 0 , 1) ## pr i nt f _angul o ( v1 , v2 ) 5.7. Mdulo longitud #! / usr / bi n/env python # encodi ng : Lati n1 from math i mport s qr t def f _l ongi t ud ( v ) : " " " Cal cul a l a l ongi t ud de un vect or t r i di me ns i onal " " " # Hacer c a l c ul o de l ongi t ud usando c i c l o f o r s_l ongi tud = 0 f or i i n xrange ( 3 ) : s_l ongi tud += v [ i ] 2 r e s ul t ado = s qr t ( s_l ongi tud ) # Retornar r e s ul t ado r et ur n r e s ul t ado ## v=(10 , 10 , 10) ## pr i nt f _l ongi t ud ( v) 5.8. Mdulo menu #! / usr / bi n/env python # encodi ng : Lati n1 i mport suma i mport di f e r e nc i a i mport p_escal ar i mport p_vect or i al i mport angul o i mport l ongi t ud def des pl egar _opci ones ( ) : " " " Des pl i ega una s e r i e de opci ones para e l e g i r " " " # de s pl e gar l a s opci ones al us uar i o pr i nt \n\n\n\n\n\n\n\n pr i nt ============================= pr i nt VECTORES pr i nt ============================= pr i nt \ n1 . I nt r oduc i r e l pri mer vector pr i nt 2. I nt r oduc i r e l segundo vector pr i nt 3. Cal cul ar l a suma pr i nt 4. Cal cul ar l a di f e r e nc i a 11 pr i nt 5. Cal cul ar e l producto e s c al ar pr i nt 6. Cal cul ar e l producto ve c t or i al pr i nt 7. Cal cul ar e l ngul o ( en grados ) ent r e e l l o s pr i nt 8. Cal cul ar l a l ongi t ud pr i nt 9. Fi nal i z ar # pedi r que e l i j a una whi l e True : pr i nt \n\nPor f avor , e l i j a una de l a s opci ones mostradas : \ n e l e c c i o n = raw_input ( ) # val i dar e l e c c i n # I nt e nt ar c onve r t i r en ent er o t r y : e l e c c i o n = i nt ( e l e c c i o n ) i f e l e c c i o n i n xrange ( 1 , 1 0 ) : break except : pr i nt "\nERROR: Debe i nt r o duc i r un nmero ent er o " # Ve r i f i c a r que s e encuentra en e l rango c or r e c t o i f e l e c c i o n < 1 or e l e c c i o n > 9: pr i nt "\nERROR: Debe i nt r o duc i r un ent er o ent r e 1 y 9" # Retornar e l e c c i n obteni da r et ur n e l e c c i o n def ej ecut ar _opci on ( ) : " " " Ej ecuta una acci n e l e gi da en l a f unci n des pl egar _opci ones " " " # I n i c i a l i z a r ve c t or e s 1 y 2 v1 = [ ] v2 = [ ] # Crear bucl e i nde f i ni do whi l e True : # Obtener una opci on opci on = des pl egar _opci ones ( ) # Ej ecut ar l a opci on e l e gi da i f opci on == 1: # >Se ha e l e g i do i nt r o duc i r e l pri mer vect or # I nt r oduc i r val or e s a t r av s de c i c l o f o r f o r i i n [ x , y , z ] : whi l e True : pr i nt \ nI ntroduzca val or de , i , en e l pri mer vect or : \ n val or = raw_input ( ) # Val i dar val or 12 #I nt e nt ar c onve r t i r a f l o t a nt e t r y : val or = f l o a t ( val or ) break except : pr i nt "\nERROR: Debe i ngr e s ar un nmero " pr i nt "\ nPresi one l ongi t ud v1 : ENTER para cont i nuar : \ n" raw_input ( ) v1 . append ( val or ) pr i nt "\ nVector I nt r oduci do con xi t o " pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l i f opci on == 2: # >Se ha e l e g i do i nt r o duc i r e l segundo vect or # I nt r oduc i r val or e s a t r av s de c i c l o f o r f o r i i n [ x , y , z ] : whi l e True : pr i nt \ nI ntroduzca val or de , i , en e l segundo vect or : \ n val or = raw_input ( ) # Val i dar val or #I nt e nt ar c onve r t i r a f l o t a nt e t r y : val or = f l o a t ( val or ) break except : pr i nt "\nERROR: Debe i ngr e s ar un nmero " pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) v2 . append ( val or ) pr i nt "\ nVector I nt r oduci do con xi t o " pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l i f opci on == 3: # >Se ha e l e g i do c a l c ul a r l a suma de ve c t or e s # Ve r i f i c a r que e xi s t e n l o s dos ve c t or e s i f l en ( v1 ) != 3 and l en ( v2 ) != 3: pr i nt "\nERROR: Los dos ve c t or e s no es t n di s po ni bl e s " pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l s e : r_suma = suma . f_suma( v1 , v2 ) pr i nt "\nLa suma es : " , r_suma 13 pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l i f opci on == 4: # >Se ha e l e g i do c a l c ul a r l a di f e r e nc i a de ve c t or e s # Ve r i f i c a r que e xi s t e n l o s dos ve c t or e s i f l en ( v1 ) != 3 and l en ( v2 ) != 3: pr i nt "\nERROR: Los dos ve c t or e s no es t n di s po ni bl e s " pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l s e : r _di f e r e nc i a = di f e r e nc i a . f _di f e r e nc i a ( v1 , v2 ) pr i nt "\nLa di f e r e nc i a es : " , r _di f e r e nc i a pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l i f opci on == 5: # >Se ha e l e g i do c a l c ul a r e l producto e s c a l a r # Ve r i f i c a r que e xi s t e n l o s dos ve c t or e s i f l en ( v1 ) != 3 and l en ( v2 ) != 3: pr i nt "\nERROR: Los dos ve c t or e s no es t n di s po ni bl e s " pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l s e : r_p_escal ar = p_escal ar . f _p_escal ar ( v1 , v2 ) pr i nt " El producto e s c a l a r es : " , r_p_escal ar pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l i f opci on == 6: # >Se ha e l e g i do c a l c ul a r e l producto v e c t o r i a l # Ve r i f i c a r que e xi s t e n l o s dos ve c t or e s i f l en ( v1 ) != 3 and l en ( v2 ) != 3: pr i nt "\nERROR: Los dos ve c t or e s no es t n di s po ni bl e s " pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l s e : r_p_vectori al = p_vect or i al . f _p_vect or i al ( v1 , v2 ) pr i nt " El producto v e c t o r i a l es : " , r_p_vectori al pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l i f opci on == 7: # >Se ha e l e g i do c a l c ul a r e l angul o # Ve r i f i c a r que e xi s t e n l o s dos ve c t or e s i f l en ( v1 ) != 3 and l en ( v2 ) != 3: 14 pr i nt "\nERROR: Los dos ve c t or e s no es t n di s po ni bl e s " pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l s e : r_angul o = angul o . f _angul o ( v1 , v2 ) pr i nt "\ nEl angul o es : " , r_angul o pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l i f opci on == 8: # >Se ha e l e g i do c a l c ul a r l a l ongi t ud # Ve r i f i c a r que e x i s t e al menos un vect or i f l en ( v1 ) == 3 or l en ( v2 ) == 3: i f l en ( v1 ) == 3 : r_l ongi tud = l ongi t ud . f _l ongi t ud ( v1 ) pr i nt "\nLa l ongi t ud de v1 es : " , r_l ongi tud i f l en ( v2 ) == 3 : r_l ongi tud = l ongi t ud . f _l ongi t ud ( v2 ) pr i nt "\nLa l ongi t ud de v2 es : " , r_l ongi tud pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l s e : pr i nt "\nERROR: No hay ve c t or e s " pr i nt "\ nPresi one ENTER para cont i nuar : \ n" raw_input ( ) e l i f opci on == 9: # >Se ha e l e g i do s a l i r break # Sa l i r de l a f unci n r et ur n #des pl egar _opci ones ( ) #ej ecut ar _opci on ( ) 15 6. Conclusiones Antes de acometer la escritura de cdigo, conviene realizar un anlisis bsico, un diseo preliminar y la escritura del pseudocdigo, con lo cual se puede aumentar la productividad y reducir la frustracin en el proceso de depuracin. Python es un estupendo lenguaje para aprender a programar, y si a esto se le suma un cdigo convenientemente distrituido en mdulos y funciones junto con los comentarios pertinentes, es posible disminuir la probabilidad de bloqueo mental que sufre nuestro cerebro ante objetos abstractos y poco intuitivos. La programacin incremental consiste en escribir unas pocas lneas y ejecutar prue- bas constantes sobre ellas. Esto facilita enormemente las tareas posteriores de de- puracin. 16 7. Lecturas recomendadas Hay varios buenos manuales en internet. En lo personal recomiendo que busquen en google los cheros PDF con los siguientes ttulos: 1. "Aprenda a Pensar Como un Programador con Python", de Allen Downey 2. "Inmersin en Python 3", de Mark Pilgrim 3. "El tutorial de Python", de Guido van Rossum 4. "Python Reference Manual", de Guido van Rossum 17