Cap 3
Cap 3
Cap 3
Hasta el momento, todos nuestros ejemplos han sido programas que no re-
quieren o solicitan información del usuario. Esto tiene la limitación que el pro-
grama es estático y siempre se va a comportar de la misma manera. Por ejemplo,
el programa multint.py siempre dará como resultado 6, y si queremos hacer
una multiplicación diferente, nos toca escribir un nuevo programa.
genera una variable txt con caracteres (una variable tipo string). La función
float(txt) convierte la variable txt en una variable real o float. Note que
si el usuario responde con letras o símbolos, el programa generará un error, es
decir se espera un número como respuesta.
Como se ve en el programa anterior, solicitar información del usuario es
bastante sencillo en Python. El siguiente programa muestra una variación al
programa multint.py de tal forma que los números a ser multiplicados sean
definidos por el usuario.
usuariomult.py
c = a*b
print(a,"x",b," = ",c)
Este código tiene dos llamadas para pedirle al usuario que digite los números
a multiplicar. También es importante notar que al poner
c = a*b
print(a,"x",b," = ",c)
vez de dos) se genera un error. Puede pensar en alguna alternativa para evitar
este error?
for i in range(1000):
intxt = input(’Digite dos enteros (ceros para parar) ’)
a,b = intxt.split()
a = int(a)
b = int(b)
if (a==0 and b==0):
break
c = a*b
print(a,"x",b," = ",c)
Este código puede no ser el mas óptimo, ya que en Python no se permite hacer
for loops de manera indefinida, por lo que hay que decirle que lo haga en un
rango definido (en este caso hasta 1000 veces). Esta es una manera muy clásica
de Fortran de hacer loops indefinidos, hasta que cierta condición se cumpla, y
el programa hace un break que ordena a salir del for loop. Note que el código
dentro del loop está indentado. Esto es una exigencia de Python.
El programa seguirá pidiendo al usuario los 2 números y imprimiendo el
resultado, hasta que el usuario lo detenga. Una forma poco elegante de parar un
3.2 for y while loops, condicionales if 23
programa es con CTRL+C, pero el programa solicita que si se quiere detener, los
dos valores deben ser ceros (0) y se detiene de manera limpia con el condicional:
.eq. == == == == equals
.or. .or. || | or or
En Python el for loop procesa cada item dentro de una secuencia, asi que
puede ser usado en cualquier secuencia de datos de diferente tipo (arreglos,
strings, listas, tuples, etc.). La variable del loop (i en nuestro ejemplo) se le
asigna en cada iteración el valor correspondiente de la variable y el cuerpo
(indentado) dentro del loop es ejecutado. La forma general de un for loop en
Python es
Note que los comandos tienen un encabezado (header) que termina con dos
puntos (:) y un cuerpo con una serie de comandos que se encuentran indentados.
La indentación puede ser uno, dos, o cualquier número de espacios, siempre de
igual cantidad a la derecha del encabezado.
En lenguajes modernos se tiene la opción de utilizar el comando while, en
lugar de un for loop. El while es un comando compuesto, que tiene un header
y un cuerpo, y tiene el siguiente formato general
24 Interacción con Python
while expresión_lógica:
Comandos a ejecutar
a=None
b=None
while (a!=0 or b!=0):
intxt = input(’Digite dos enteros (ceros para parar) ’)
a,b = intxt.split()
a = int(a)
b = int(b)
c = a*b
print(a,"x",b," = ",c)
Note que para iniciar el while loop, es necesario tener definidos a y b, para
que el programa pueda realizar la verificación del condicional la primera vez.
El primer caso se conoce como una iteración definida, mientras que el se-
gundo caso es conocida como iteración indefinida – no sabemos de antemano
cuantas iteraciones son requeridas.
if (expresión_lógica):
(bloque de código)
elif (expresión_lógica):
(bloque de código)
elif (expresión_lógica):
(bloque de código)
...
else:
(bloque de código)
Cada bloque de código puede tener tantas líneas como sea requiera. Tantas
condiciones elif (else if) bloques como se requiera, y máximo un else. Cuando
una condición se cumple, ese bloque de código se ejecuta, sin seguir mirando las
otras condiciones posteriores. Es decir, el orden importa en este caso (Python no
revisa lo que sigue). El último else será ejecutado si ninguna condición anterior
es verdadera.
El siguiente programa muestra un ejemplo donde el usuario debe adivinar
un número entre 1 y 1000 y el programa le va informando en cada intento si
el número introducido por el usuario es mayor o menor que el número que se
busca. Adicionalmente se cuenta el número total de intentos del usuario.
adivine_entero.py
import numpy as np
# Empiece el juego
guess = int(input(’Adivine un número del 1 al 999: ’))
guesses = 1
if (guess>number):
print(guess," es muy alto")
elif(guess<number):
print(guess," es muy bajo")
usuarioraiz.py
import numpy as np
x = None
while (x!=0.0):
x = float(input("Digite un número real y positivo "))
if (x<0.0):
print("Número negativo")
continue
else:
y = np.sqrt(x)
print(’sqrt(’,x,’) = ’,y)
La tarea es buscar entre todos los valores posibles, cuáles son un común
divisor, y cuál de estos es el mayor.
a = None
b = None
while (a!=0 or b!=0):
txt = input(’Digite dos enteros (ceros para terminar) ’)
a,b = txt.split()
a = int(a)
b = int(b)
amin = min(a,b)
if (amin<1):
print(’Sólo se aceptan números > 0’)
break
mcd = 1
for j in range(2,amin+1):
if (a%j==0 and b%j==0):
mcd = j
Este programa no es muy eficiente si los números investigados son muy gran-
des, pero funciona muy bien para números pequeños. Algunas cosas nuevas en
este programa:
min(a,b) calcula el mínimo entre a y b, usando funciones internas de Python. Tam-
bién existe la función max. Pueden tener más de dos argumentos de entra-
da.
3.4 Ejemplo: Máximo común divisor 29
Problemas
3.1. Escriba un programa que imprima una lista de números del 2 al 20, y que
muestra si el número es divisible por 2, por 3, por ambos o por ninguno.
La salida en pantalla se puede ver algo así
rand_ej.py
import numpy as np
for i in range(20):
a = np.random.random()
print (a)
0 1009
1 1048
2 1001
3 1038
4 1008
5 959
6 993
7 925
8 1017
9 1002