ReSuMen
Diseña un programa que calcule la menor de cinco palabras dadas; es decir, la primera
palabra de las cinco en orden alfabético. Se acepta que las mayúsculas sean
menores que las minúsculas, de acuerdo con la tabla ASCII.
· 82 Diseña un programa que calcule la menor de cinco palabras dadas; es decir, la primera palabra
de las cinco en orden alfabético. No aceptaremos que las mayúsculas sean
Las comparaciones pueden incluir cualquier expresión cuyo resultado sea interpretable en
términos de cierto o falso. Se pueden incluir, pues, expresiones lógicas tan complicadas como
deseemos
La fórmula C0 = C · (1 + x/100)n nos permite obtener el capital final que lograremos a
partir de un capital inicial (C), una tasa de intereses anual (x) en tanto por cien y un número
de años (n). Si lo que nos interesa conocer es el número de años n que tardaremos en lograr
un capital final C0 partiendo de un capital inicial C a una tasa de intereses anual x, podemos
despejar n en la fórmula del ejercicio 67 de la siguiente manera:
n =
log(C0) − log(C)
log(1 + x/100)
Diseña un programa Python que obtenga el numero de años que se tarda en conseguir un
capital final dado a partir de un capital inicial y una tasa de intereses anual también dados. El
programa debe tener en cuenta cuando se puede realizar el cálculo y cuando no en función
del valor de la tasa de intereses (para evitar una división por cero, el calculo de logaritmos de
valores negativos, etc) con una excepción: si C y C0 son iguales, el número de años es 0
independientemente de la tasa de intereses (incluso de la que provocaría un error de división por
cero).
(Ejemplos: Para obtener 11 000 ¤ por una inversión de 10 000 ¤ al 5% anual es necesario
esperar 1.9535 años. Obtener 11 000 ¤ por una inversión de 10 000 ¤ al 0% anual es imposible.
Para obtener 10 000 ¤ con una inversión de 10 000 ¤ no hay que esperar nada, sea cual sea el
interés.)
· 87 Diseña un programa que, dado un número real que debe representar la calificación
numérica de un examen, proporcione la calificación cualitativa correspondiente al número dado.
La calificación cualitativa será una de las siguientes: ((Suspenso)) (nota menor que 5),
((Aprobado)) (nota mayor o igual que 5, pero menor que 7), ((Notable)) (nota mayor o igual
que 7, pero menor que 8.5), ((Sobresaliente)) (nota mayor o igual que 8.5, pero menor que 10),
((Matricula de Honor)) (nota 10).
· 88 Diseña un programa que, dado un carácter cualquiera, lo identifique como vocal minúscula,
vocal mayúscula, consonante minúscula, consonante mayúscula u otro tipo de carácter.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Evaluación con cortocircuitos
La evaluación de expresiones lógicas es algo especial. Observa la condición de este if :
94 Introducción a la Programación con Python
c 2003 Andrés Marzal e Isabel Gracia 4 Estructuras de control
De Morgan
Las expresiones lógicas pueden resultar complicadas, pero es que los programas hacen, en
ocasiones, comprobaciones complicadas. Tal vez las más difíciles de entender son las que
comportan algún tipo de negación, pues generalmente nos resulta más difícil razonar en
sentido negativo que afirmativo. A los que empiezan a programar les l´ıan muy frecuentemente
las negaciones combinadas con or o and. Veamos algún ejemplo ((de juguete)). Supón que
para aprobar una asignatura hay que obtener más de un 5 en dos exámenes parciales,
y que la nota de cada uno de ellos esta disponible en las variables parcial1 y parcial2,
respectivamente. Estas líneas de programa muestran el mensaje ((Has suspendido.)) cuando
no has obtenido al menos un 5 en los dos exámenes:
if not (parcial1 >= 5.0 and parcial2 >= 5.0):
print ’Has suspendido.’
Lee bien la condición: ((si no es cierto que has sacado al menos un 5 en ambos (por eso el
and) parciales. . . )). Ahora fíjate en este otro fragmento:
if not parcial1 >= 5.0 or not parcial2 >= 5.0:
print ’Has suspendido.’
Leámoslo: ((si no has sacado al menos un cinco en uno u otro (por eso el or) parcial. . . )).
O sea, los dos fragmentos son equivalentes: uno usa un not que se aplica al resultado de
una operación and; el otro usa dos operadores not cuyos resultados se combinan con un
operador or. Y sin embargo, dicen la misma cosa. Los lógicos utilizan una notación especial
para representar esta equivalencia:
¬(p ^ q) ! ¬p _ ¬q,
¬(p _ q) ! ¬p ^ ¬q.
(Los5 # Menú
6 print ’Escoge una opción: ’
7 print ’a) Calcular el diámetro.’
8 print ’b) Calcular el perímetro.’
9 print ’c) Calcular el ´área.’
10 opción = raw_input(’Teclea a, b o c y pulsa el retorno de carro: ’)
11
12 if opción == ’a’: # Calculo del diámetro.
13 diametro = 2 * radio
14 print ’El diámetro es’, diámetro
15 else:
16 if opcion == ’b’: # C´alculo del per´ımetro.
17 perimetro = 2 * pi * radio
18 print ’El perímetro es’, perímetro
19 else:
20 if opcion == ’c’: # C´alculo del ´area.
21 area = pi * radio ** 2
22 print ’El ´area es’, area
Ejecutemos el programa y seleccionemos la segunda opci´on:
Dame el radio de un c´ırculo: 3
Escoge una opci´on:
a) Calcular el di´ametro.
b) Calcular el per´ımetro.
c) Calcular el ´area.
Teclea a, b o c y pulsa el retorno de carro: b
El per´ımetro es 18.8495559215
Ejecut´emoslo de nuevo, pero seleccionando esta vez la tercera opci´on:
Dame el radio de un c´ırculo: 3
Escoge una opci´on:
a) Calcular el di´ametro.
b) Calcular el per´ımetro.
c) Calcular el ´area.
Teclea a, b o c y pulsa el retorno de carro: c
El ´area es 28.2743338823
lógicos usan ‘¬’ para not, ‘^’ para and y ‘_’ para or.) Estas relaciones se deben al
matem´atico De Morgan, y por ese nombre se las conoce. Si es la primera vez que las ves,
te resultar´an chocantes, pero si piensas un poco, ver´as que son de sentido com´un.
Hemos observado que los estudiantes comet´eis errores cuando hay que expresar la condici
´on contraria a una como ((a and b)). Muchos escrib´ıs ((not a and not b)) y est´a mal.
La negaci´on correcta ser´ıa ((not (a and b))) o, por De Morgan, ((not a or not b)). ¿Cu´al
ser´ıa, por cierto, la negaci´on de ((a or not b))?
if a == 0 or 1/a > 1:
Un ´ultimo problema: men´us de usuario
5 # Men´u
6 print ’Escoge una opci´on: ’
7 print ’a) Calcular el di´ametro.’
8 print ’b) Calcular el per´ımetro.’
9 print ’c) Calcular el ´area.’
10 opcion = raw_input(’Teclea a, b o c y pulsa el retorno de carro: ’)
11
12 if opcion == ’a’: # C´alculo del di´ametro.
13 diametro = 2 * radio
14 print ’El di´ametro es’, diametro
15 else:
16 if opcion == ’b’: # C´alculo del per´ımetro.
17 perimetro = 2 * pi * radio
18 print ’El per´ımetro es’, perimetro
19 else:
20 if opcion == ’c’: # C´alculo del ´area.
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario