Capitulo 3-Interaccion Python
Capitulo 3-Interaccion Python
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.
Para ampliar la capacidad de los programas de Python, el programa puede
solicitar información del usuario a través del teclado. Para esto, se le debe indicar
al usuario que información dar, como en el siguiente ejemplo:
usuario_info.py
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.
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 eviar
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 más ó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 Capítulo 3. Interacción con Python
while BOOLEAN_EXPRESSION:
STATEMENTS
a = 1
b = 1
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.
Pero si, por ejemplo, debe realizar una iteración de un cálculo hasta que una
condición se de, y no puede saber cuando esa condición se va a cumplir, una
mejor opción es el while loop.
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. Tantos
elif (else if) bloques como se requiera, y como 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 órden 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.
adivine_entero.py
import numpy as np
guesses = 1
guess = int(input(’Adivine un número del 1 al 1000: ’))
while guess!=number:
guesses = guesses + 1
if (guess>number):
print(guess," es muy alto")
elif (guess<number):
print(guess," es muy bajo")
import numpy as np
x = 2.
while (x!=0.0):
x = float(input("Digite un número real y positivo: "))
if (x<0.0):
print(’Número es 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.
Abajo un ejemplo
gcf.py
a = 1
b = 1
while (a!=0 or b!=0):
intxt = input(’Digite 2 enteros (ceros para parar) ’)
a,b = intxt.split()
a = int(a)
b = int(b)
amin = min(a,b)
if (amin<1):
break
for j in range(1,amin+1):
if (a%j==0 and b%j==0):
jmax = j
print ("Máximo común divisor = ", jmax)
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:
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í
a ⇤ x2 + b ⇤ x + c = 0,
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
Tcrust = 25
Tmantle = 2900
Tocore = 2250
Ticore = 1196
P =g⇤⇢⇤h