Laboratorio 7. Listas y tuplas. Paso de argumentos por la línea de

Anuncio
Nota: 100
UNIVERSIDAD DE COSTA RICA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA ELÉCTRICA
PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117
LABORATORIO 7
I CICLO 2012
Laboratorio 7. Listas y tuplas. Paso de argumentos por la línea de comandos
Estudiante: José David Vargas Quirós
Carné: B16945
1. Se modificaron los programas creados anteriormente para que ahora reciban los sus argumentos a través
de la línea de comandos, en el momento de ejecución. Estos parámetros se especifican tras el nombre del
archivo, al correr el programa y son almacenados en el vector sys.argv. A continuación el código del programa cuadraticaArgv.py que calcula las soluciones reales de una ecuación cuadrática con sus comentarios:
# ! / u s r / b i n / python
# −*− coding : l a t i n −1 −*−
i m p o r t math
i m p o r t sys
# S i l a c a n t i d a d de argumentos no es c o r r e c t a se muestra un e r r o r
i f l e n ( sys . argv ) ! = 4 :
p r i n t "Número de argumentos i n c o r r e c t o "
p r i n t " Uso : %s a b c " % ( sys . argv [ 0 ] )
sys . e x i t ( 1 )
#Se
a =
b =
c =
o b t i e n e n l o s c o e f i c i e n t e s d e l v e c t o r sys . argv
f l o a t ( sys . argv [ 1 ] )
f l o a t ( sys . argv [ 2 ] )
f l o a t ( sys . argv [ 3 ] )
# S i a es cero l a e c u a c i ón no es cuadr á t i c a y se muestra un e r r o r
i f a == 0 :
p r i n t " La e c u a c i ón no es cuadr á t i c a "
sys . e x i t ( 1 )
#Se c a l c u l a e l d i s c r i m i n a n t e
d i s c = f l o a t ( b * b−4* a * c )
# S i e l d i s c r i m i n a n t e es menor que 0 se da e r r o r
i f disc < 0:
p r i n t " Las s o l u c i o n e s no son r e a l e s "
# S i e l d i s c r i m i n a n t e es 0 se c a l c u l a l a ú n i c a s o l u c i ón
e l i f d i s c == 0 :
s o l = f l o a t (−b / 2 * a )
p r i n t " La s o l u c i ón es %.2 f " % ( s o l )
UNIVERSIDAD DE COSTA RICA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA ELÉCTRICA
PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117
LABORATORIO 7
I CICLO 2012
#Si e l d i s c r i m i n a n t e
else :
s o l 1 = f l o a t (( −b +
s o l 2 = f l o a t (( −b −
p r i n t " La s o l u c i ón
es mayor que 0 se c a l c u l a n l a s 2 s o l u c i o n e s
math . s q r t ( d i s c ) ) / ( 2 * a ) )
math . s q r t ( d i s c ) ) / ( 2 * a ) )
1 es %.2 f \ nLa s o l u c i ón 2 es %.2 f " % ( sol1 , s o l 2 )
Seguidamente el código de complejosArgv.py que calcula las raíces reales o complejas de una ecuación de
segundo grado:
# ! / u s r / b i n / python
# −*− coding : l a t i n −1 −*−
i m p o r t math
i m p o r t sys
# S i l a c a n t i d a d de argumentos no es c o r r e c t a se muestra un e r r o r
i f l e n ( sys . argv ) ! = 4 :
p r i n t "Número de argumentos i n c o r r e c t o "
p r i n t " Uso : %s a b c " % ( sys . argv [ 0 ] )
sys . e x i t ( 1 )
#Se
a =
b =
c =
o b t i e n e n l o s c o e f i c i e n t e s d e l v e c t o r sys . argv
f l o a t ( sys . argv [ 1 ] )
f l o a t ( sys . argv [ 2 ] )
f l o a t ( sys . argv [ 3 ] )
# S i a es cero l a e c u a c i ón no es cuadr á t i c a y se muestra un e r r o r
i f a == 0 :
p r i n t " La e c u a c i ón no es cuadr á t i c a "
sys . e x i t ( 1 )
#Se c a l c u l a e l d i s c r i m i n a n t e
d i s c = f l o a t ( b * b−4* a * c )
# S i e l d i s c r i m i n a n t e es menor que 0 se c a l c u l a n l a s s o l u c i o n e s complejas
i f disc < 0:
a1 = (−b ) / ( 2 * a )
b1 = f l o a t ( ( math . s q r t (− d i s c ) ) / ( 2 * a ) )
p r i n t " Las s o l u c i o n e s complejas son : \ n %.2 f + %.2 f i \ n %.2 f − %.2 f i " % ( a1 , b1 ,
a1 , b1 )
# S i e l d i s c r i m i n a n t e es 0 se c a l c u l a l a ú n i c a s o l u c i ón
e l i f d i s c == 0 :
s o l = f l o a t (−b / 2 * a )
p r i n t " La s o l u c i ón es %.2 f " % ( s o l )
# S i e l d i s c r i m i n a n t e es mayor que 0 se c a l c u l a n l a s 2 s o l u c i o n e s
else :
s o l 1 = f l o a t (( −b + math . s q r t ( d i s c ) ) / ( 2 * a ) )
s o l 2 = f l o a t (( −b − math . s q r t ( d i s c ) ) / ( 2 * a ) )
UNIVERSIDAD DE COSTA RICA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA ELÉCTRICA
PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117
LABORATORIO 7
I CICLO 2012
p r i n t " La s o l u c i ón 1 es %.2 f \ nLa s o l u c i ón 2 es %.2 f " % ( sol1 , s o l 2 )
Por último, el código de progresionArgv.py que calcula los términos de una progresión geométrica:
# ! / u s r / b i n / python
# −*− coding : l a t i n −1 −*−
i m p o r t sys
# S i l a c a n t i d a d de argumentos no es c o r r e c t a se muestra un e r r o r
i f l e n ( sys . argv ) ! = 4 :
p r i n t "Número de argumentos i n c o r r e c t o "
p r i n t " Uso : %s a r n " % ( sys . argv [ 0 ] )
sys . e x i t ( 1 )
#Se
a =
r =
n =
o b t i e n e n l a s c a n t i d a d e s n e c e s a r i a s d e l v e c t o r sys . argv
f l o a t ( sys . argv [ 1 ] )
f l o a t ( sys . argv [ 2 ] )
f l o a t ( sys . argv [ 3 ] )
# E l c i c l o crea una cadena con l o s t é rminos de l a p r o g r e s i ón .
cont = 0
cadena = " "
while cont < n :
termino = a* r * * cont
cadena += " %.2 f , " % ( t e r m i n o )
c o n t += 1
#Se imprime l a cadena con l a p r o g r e s i ón
p r i n t cadena
2. Se escribió un programa que recibe una lista por medio de la terminal y la imprime ordenada. Si todos los
valores son enteros, se ordenan como tales, es decir en orden numérico común (9 antes que 10). Si uno
solo de los elementos no es entero, entonces se ordenan como cadenas, es decir, en orden alfabético, con
los números antes que las létras, pero este órden solo toma en cuenta el primer digito de un número (10 va
antes que 9). El código es el siguiente (archivo lista.py):
# ! / u s r / b i n / python
# −*− coding : l a t i n −1 −*−
i m p o r t sys
# Este c i c l o se encarga de r e v i s a r l o s v a l o r e s que se pasan a l programa .
contador = 1
lista = []
w h i l e c o n t a d o r < l e n ( sys . argv ) :
t e r m i n o = sys . argv [ c o n t a d o r ]
# S i un v a l o r es d í g i t o se c o n v i e r t e a t i p o de dato e n t e r o .
i f termino . i s d i g i t ( ) :
termino = i n t ( termino )
UNIVERSIDAD DE COSTA RICA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA ELÉCTRICA
PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117
LABORATORIO 7
I CICLO 2012
#Los v a l o r e s se agregan a l a l i s t a .
l i s t a . append ( t e r m i n o )
c o n t a d o r += 1
#La l i s t a se ordena . Por d e f e c t o Python l o s ordena como e n t e r o s s i todos t i e n e n
t i p o de dato e n t e r o y como cadenas s i no es as í .
l i s t a . sort ()
# Este o t r o c i c l o simplemente imprime l o s v a l o r e s , uno por l í nea .
contador = 0
while contador < len ( l i s t a ) :
p r i n t l i s t a [ contador ]
c o n t a d o r += 1
3. Se modificó el programa anterior para que ahora sea posible ordenar los elementos de forma ascendiente
o descendiente. Para esto se añade un parámetro más que debe pasarse al programa antes de la lista. a
indica ascendiente y d descendiente. El código del archivo listaOrden.py es el siguiente:
# ! / u s r / b i n / python
# −*− coding : l a t i n −1 −*−
i m p o r t sys
# Este c i c l o se encarga de r e v i s a r l o s v a l o r e s que se pasan a l programa .
contador = 2
lista = []
w h i l e c o n t a d o r < l e n ( sys . argv ) :
t e r m i n o = sys . argv [ c o n t a d o r ]
# S i un v a l o r es d í g i t o se c o n v i e r t e a t i p o de dato e n t e r o .
i f termino . i s d i g i t ( ) :
termino = i n t ( termino )
#Los v a l o r e s se agregan a l a l i s t a .
l i s t a . append ( t e r m i n o )
c o n t a d o r += 1
#La l i s t a se ordena . Por d e f e c t o Python l o s ordena como e n t e r o s s i todos t i e n e n
t i p o de dato e n t e r o y como cadenas s i no es as í .
l i s t a . sort ()
# E l orden , ya sea " a " o " d " e s t á e s p e c i f i c a d o en l a p o s i c i ón 1 d e l v e c t o r sys .
argv . S i e s t e es " d " entonces l a l i s t a se i n v i e r t e . S i no es " d " se muestra
ascendiente .
orden = sys . argv [ 1 ]
i f orden == " d " :
l i s t a . reverse ( )
# Este o t r o c i c l o simplemente imprime l o s v a l o r e s , uno por l í nea .
contador = 0
while contador < len ( l i s t a ) :
UNIVERSIDAD DE COSTA RICA
FACULTAD DE INGENIERÍA
ESCUELA DE INGENIERÍA ELÉCTRICA
PROGRAMACIÓN BAJO PLATAFORMAS ABIERTAS IE-0117
LABORATORIO 7
I CICLO 2012
p r i n t l i s t a [ contador ]
c o n t a d o r += 1
Descargar