0% encontró este documento útil (0 votos)
176 vistas

Capitulo 3-Interaccion Python

Este documento describe cómo interactuar con el usuario en Python mediante la entrada de datos desde el teclado. Explica cómo solicitar información al usuario usando el comando input y cómo convertir la entrada en variables numéricas usando float o int. También muestra cómo usar bucles for y while para repetir operaciones como multiplicaciones basadas en la entrada del usuario, hasta que este decida detenerse ingresando ceros. Finalmente, compara for y while loops y ofrece una guía sobre cuál usar dependiendo de si se conoce de antemano el número de iteraciones.

Cargado por

David Prada
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
176 vistas

Capitulo 3-Interaccion Python

Este documento describe cómo interactuar con el usuario en Python mediante la entrada de datos desde el teclado. Explica cómo solicitar información al usuario usando el comando input y cómo convertir la entrada en variables numéricas usando float o int. También muestra cómo usar bucles for y while para repetir operaciones como multiplicaciones basadas en la entrada del usuario, hasta que este decida detenerse ingresando ceros. Finalmente, compara for y while loops y ofrece una guía sobre cuál usar dependiendo de si se conoce de antemano el número de iteraciones.

Cargado por

David Prada
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

Capítulo 3

Interacción con 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

# Código que solicita información del usuario


# y reporta los resultados
#

name = input("Cuál es su nombre? ")

txt = input(’Cuál es su altura (m)? ’)


alt = float(txt)

txt = input(’Cuanto pesa Ud. (kg)? ’)


weigh = float(txt)

print (’%s, Ud. mide %4.2f m y pesa %5.1f kg’


% (name,alt,weigh))

que en la terminal da como resultado

Cuál es su nombre? Germán


Cuál es su altura (m)? 1.82
Cuanto peso Ud. (kg)? 87
20 Capítulo 3. Interacción con Python

Germán, Ud. mide 1.82 m y pesa 87.0 kg

El comando input es el encargado de solicitar al usuario que debe digitar


una respuesta con el teclado. El programa no continúa a menos que el usuario
oprime Enter.
Para los valores solicitados de altura o peso, el comando

txt = input(’Cuál es su altura (m)? ’)

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.

3.1. Entrada con el teclado


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ódigo para multiplicar dos números enteros,


# definidos por el usuario.

a = int(input("Digite un primer número entero: "))


b = int(input("Digite un sefundo número entero: "))

c = a*b

print(a,"x",b," = ",c)

que tiene como resultado

Digite un primer número entero: 3


Digite un sefundo número entero: 5
3 x 5 = 15

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

a = int(input("Enter an integer: "))

se le pide al usuario un número entero, por lo que si el usuario digita un numero


real (2,2) o caracteres diferentes a números, el programa mostrará un error:
3.1 Entrada con el teclado 21

Digite un primer número entero: 2.2


-----------
ValueError
Traceback (most recent call last)
<ipython-input-8-7860f1ff099c> in <module>
3 # definidos por el usuario.
4
----> 5 a = int(input("Digite un primer número entero: "))
6 b = int(input("Digite un sefundo número entero: "))
7

ValueError: invalid literal for int() with base 10: ’2.2’

donde la respuesta y explicación del error es bastante clara y muestra el


problema que se generó.
El programa anterior tiene una desventaja, el usuario se le solicita la pareja
de números uno a uno. Esta es una versión más corta, donde se le solicita
al usuario los dos números con una sola llamada. El usuario debe digitar los
números con un espacio entre ellos, no con coma (,), ni otro separador. Tampoco
puede digitar enter entre los números, pues esto generará un error.
usuariomult2.py

# Código para multiplicar dos números enteros,


# definidos por el usuario.
# Una sola solicitud para los dos números.
#

intxt = input("Digite dos números enteros: ")


a,b = intxt.split()
a = int(a)
b = int(b)

c = a*b

print(a,"x",b," = ",c)

con el programa generando el siguiente resultado

Digite dos números enteros: 2 3


2 x 3 = 6

El comando input permite digitar una serie de caracteres. Si éstos caracteres


están separados por espacios, se pueden asignar a múltiples variables con el
comando intxt.split(). Sin embargo, si el usuario digita tres números (en
22 Capítulo 3. Interacción con Python

vez de dos) se genera un error. Puede pensar en alguna alternativa para eviar
este error?

3.2. for y while loops, condicionales if


El programa usuariomult2.py sigue mostrando limitaciones. Aunque el
usuario puede hacer la multiplicación, tiene que volver a correr el programa
si quiere cambiar los números. ¿Qué hacer si queremos hacer más de una ope-
ración?
Cómo hacer un programa que solicite continuamente al usuario por 2 núme-
ros hasta que el usuario quiera detenerse.
usuariomult3.py

# Código para multiplicar dos números enteros,


# definidos por el usuario.
# Operación se repite hasta que el usuario lo determine.
#

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)

Digite dos números enteros (ceros para parar) 2 5


2 x 5 = 10
Digite dos números enteros (ceros para parar) 7 9
7 x 9 = 63
Digite dos números enteros (ceros para parar) 1 2
1 x 2 = 2
Digite dos números enteros (ceros para parar) 0 0

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:

if (a==0 and b==0):

El resultado de correr el programa se muestra arriba, para terminarlo

Digite dos números enteros (ceros para parar) 0 0

Operadores de relación en varios lenguajes

F77 F90 C MATLAB Python meaning

.eq. == == == == equals

.ne. /= != ~= != does not equal

.lt. < < < < less than

.le. <= <= <= <= less than or equal to

.gt. > > > > greater than

.ge. >= >= >= >= greater than or equal to

.and. .and. && & and and

.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

for LOOP_VARIABLE in SEQUENCE:


STATEMENTS

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

El while loop se ejecuta de manera continua siempre y cuando la expre-


sión BOOLEAN_EXPRESSION sea cierta. El programa anterior, se puede escribir
utilizando un while
usuariomult4.py

# Código para multiplicar dos números enteros,


# definidos por el usuario.
# Operación se repite con while loop.
#

a = 1
b = 1

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)

Digite dos números enteros (ceros para parar) 2 5


2 x 5 = 10
Digite dos números enteros (ceros para parar) 7 9
7 x 9 = 63
Digite dos números enteros (ceros para parar) 1 2
1 x 2 = 2
Digite dos números enteros (ceros para parar) 0 0
0 x 0 = 0

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.

3.2.1. Escoger entre for y while loops


Hay entonces dos tipos de loops, y para el programar clásico, el for loop
parece más sencillo y lógico. Una buena guia para decidir que usar, es si Ud.
sabe de antemano el número de iteraciones que debe hacer. O si por ejemplo va
a hacer un loop sobre una lista o arreglo, donde el número total de elementos
es conocido. Por ejemplo, si quiere hacer un modelo y correlo 100 veces, el for
loop es la mejor opción.
3.3 Multiples condicionales if, elif, else 25

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.

3.3. Multiples condicionales if, elif, else


En el ejemplo anterior, una operación es llevada a cabo si una condición se
cumple. Una versión más versátil permite multiples condiciones con la siguiente
estructura

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

# Juego donde el usuario adivina un número


#

import numpy as np

# Genera un número aleatorio entre [1 y 1000)


number = np.random.randint(1,1000)

# Empieze el juego y cuente los intentos.


26 Capítulo 3. Interacción con Python

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")

guess = int(input("Adivine otra vez: "))

print("\nExcelente, adivinaste en ",guesses, ’ intentos’)

Un ejemplo al correr el programa

Adivine un número del 1 al 1000: 501


501 es muy alto
Adivine otra vez: 250
250 es muy alto
Adivine otra vez: 125
125 es muy alto
Adivine otra vez: 62
62 es muy bajo
Adivine otra vez: 90
90 es muy alto
Adivine otra vez: 75
75 es muy bajo
Adivine otra vez: 85
85 es muy bajo
Adivine otra vez: 88
88 es muy alto
Adivine otra vez: 87

Excelente, adivinaste en 9 intentos

Acá otra demostración de un programa que le pide un número real y positivo


al usuario repetidamente. Si el número es negativo, repite la solicitud (ya que sólo
queremos números positivos). Si el número es positivo, calcula la raíz cuadrada
con la función sqrt de numpy. Si el usuario pone 0, el programa se termina.
usuarioraiz.py

# Solicite al usuario un número real y


# calcule la raíz cuadrada.
3.4 Ejemplo: Máximo común divisor 27

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)

Digite un número real y positivo: 2.0


sqrt( 2.0 ) = 1.4142135623730951
Digite un número real y positivo: -1
Número es negativo
Digite un número real y positivo: 3.4
sqrt( 3.4 ) = 1.8439088914585775
Digite un número real y positivo: 0
sqrt( 0.0 ) = 0.0

El programa muestra el uso de un nuevo comando, continue, que le dice a


Python que vaya directamente a la siguiente iteración, es decir no va a imprimir
el resultado y. El comando break hace que el programa salga de un for loop
por completo.

3.4. Ejemplo: Máximo común divisor


El máximo común divisor (o greatest common factor en inglés), de dos ( o
más) números enteros es el mayor número entero que los divide sin dejar residuo.
Pero, cómo se calcula?

Se empieza con dos números a y b.

El GCF puede tomar valores entre 1 y el menor de los números a y b.

La tarea es buscar entre todos los valores posibles, cuáles son un común
divisor, y cuál de estos es el mayor.

Empieze con el ‘1‘, que siempre será un común divisor.

Siga con el 2, 3, etc. Si alguno de estos números no genera residuo, guárdelo


como el GCF.
28 Capítulo 3. Interacción con Python

Continue hasta ‘min(a,b)‘.

Abajo un ejemplo
gcf.py

# encuentre el máximo común divisor (gcf)


# de dos números enteros
#

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)

con resultados para varios números

Digite 2 enteros (ceros para parar) 3 2


Máximo común divisor = 1
Digite 2 enteros (ceros para parar) 7 21
Máximo común divisor = 7
Digite 2 enteros (ceros para parar) 9 24
Máximo común divisor = 3
Digite 2 enteros (ceros para parar) 923 1248
Máximo común divisor = 13
Digite 2 enteros (ceros para parar) 0 0

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

a %i calcula el residuo de la división de los dós números (llamado el módulo).


Para nuestro caso, a %i = 0 si a is divisible por i. Si el valor es diferente
de cero, el valor obtenido es el residuo de dividir los dos números. Note
que el orden importa.

Abajo se muestran otras funciones internas de Python disponibles (lista par-


cial)

abs(a) absolute value


float(a) conversion to real
int(a) conversion to integer
round(a) nearest integer
pow (x,y) Return x to the power y
range(a,b,c) Secuencia desde a hasta b. c es el salto.

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í

Num Div by 2 and/or 3?


--- ------------------
2 by 2
3 by 3
4 by 2
5 neither
6 both
7 neither

3.2. Escriba un programa que repetidamente le pida al usuario tres valores


(reales) a, b, c, para la ecuación cuadrática

a ⇤ x2 + b ⇤ x + c = 0,

Usando la famosa formula para las raíces de este problema, el programa


debe reconocer si hay raíces reales y calcular estos valores. Como resultado,
muestre el número de raíces reales y sus valores. El programa debe parar
si todos los valores son 0.

3.3. Modifique el programa gfc.py para calcular el mínimo común múltiplo


(least common multiple en inglés) de dos números enteros.

3.4. Python incluye un modulo para la generación de números aleatorios (lla-


mado random). Abajo se muestra un ejemplo que imprime en pantalla 20
valores aleatorios entre 0 y 1.
30 Capítulo 3. Interacción con Python

rand_ej.py

# Generate a short list of random number between 0 and 1

import numpy as np

for i in range(20):
a = np.random.random()
print (a)

Escriba un programa simple de Python para generar 10000 números alea-


torios entre 0 y 1. Realice un test de que tan aleatorio es el generador de
números, contando el número de veces que el número cae dentro de 10
rangos distintos entre 0 y 1 (por ejemplo, 0 a 0.1, 0.1 a 0.2, etc.). Imprima
el número total de veces para cada rango en la pantalla. Este es un ejemplo
de cómo se puede ver la salida del programa:

0 1009
1 1048
2 1001
3 1038
4 1008
5 959
6 993
7 925
8 1017
9 1002

AYUDA: Cree un arreglo de números enteros (mire el modulo numpy) con


10 elementos e inicie con ceros. Para cada número aleatorio, sume una
unidad al rango apropiado y así poder adicionar todos los números.
NOTA: En C o Fortran cada vez que corra el programa, Ud. obtendrá
siempre la misma serie de números aleatorios. Esto no es muy buena idea,
pero el código para obtener series de números aleatorios distintas cada
vez que se corre el programa es complicado. Python fija la semilla del
número aleatorio (seed) con el reloj del computador, así que no debe ser
un problema.

3.5. La Tierra de manera general se divide en varias capas, corteza, manto y


núcleo (interno y externo). Si la Tierra tiene un radio de 6371 km, y lo
comparamos con un balón de Baloncesto (24.26 cm de diámetro): Ponga
en una tabla y compare

radio del núcleo interno


radio hasta el tope del núcleo externo
3.4 Ejemplo: Máximo común divisor 31

radio hasta el moho (límite manto-corteza)


Para todos los anteriores, determine su espesor.
La atmósfera (la parte más densa) tiene 16 km de espesor. Cuál es el
espesor en nuestro ejemplo?

Espesores en km para cada capa

Tcrust = 25

Tmantle = 2900
Tocore = 2250
Ticore = 1196

3.6. Calcule la presión P en el interior de la Tierra, a diferentes profundidades


h. Asuma presión hidrostática para la corteza, densidad del granito ⇢, y
que g (acc gravedad) es constante.

P =g⇤⇢⇤h

También podría gustarte