Tutorial-Programación Estructurada e Importación de Módulos
Tutorial-Programación Estructurada e Importación de Módulos
(programación estructurada)
operadores relacionales:
mayor: >
menor: <
comparacion: ==
diferente: !=
operadores lógicos:
Y: and
O: or
NO: not
False
True
False
True
False
print(type(3>8))
<class 'bool'>
<class 'bool'>
if expresion:
bloque de instrucciones
Importante recalcar que el bloque de instrucciones que se va a ejecutar debajo de los : debe
estar sangrado a la derecha. Si una de las instrucciones del bloque no esta sangrada, se
considerará fuera del bloque.
if num % 5 == 0:
if num >6:
print("{} esta en el rango 0 a 25")
print("{} es multiplo de 5".format(num))
print("Fin de programa")
Se puede incluir la instrucción else para considerar la opción caso contario o sino en la
estructura de control: (estructura de decisión doble)
if expresion:
bloque de instrucciones
else:
bloque de instrucciones
if num < 5:
print(f"{num} es menor que 5")
else:
print(f"{num} es mayor que 5")
if num % 2 == 0:
print(f"{num} es par")
else:
print(f"{num} es impar")
#ejemplos:
var1 = 12.5
print("¿var1 es de tipo float?:",isinstance(var1,float))
var2 = 100
print("¿var2 es de tipo str?:",isinstance(var2,str))
var3 = 2.6
print("¿var3 es de tipo int?:",isinstance(var3,int))
x = 3.45
if isinstance(x,int):
print("x es entero")
else:
print("x es no entero")
x es no entero
Así también, se puede incluir la instrucción elif para considerar otras posibles condiciones a
evaluar (estructura de decisión múltiple)
if expresion 1:
bloque de instrucciones
elif expresión 2:
bloque de instrucciones
elif expresión 3:
bloque de instrucciones
.
.
.
else:
bloque de instrucciones
if num < 0:
print("El número ingresado es negativo")
elif num < 10:
print("El número ingresado es positivo de 1 dígito")
elif num < 100:
print("El número ingresado es positivo de 2 dígitos")
else:
print("El número ingresado es positivo de mas de 2 dígitos")
if edad > 0:
if edad < 100:
if edad < 18:
print("Ud. es menor de edad")
else:
print("Ud. es mayor de edad")
else:
print("Edad no válida")
else:
print("Edad no válida")
if num % 3 == 0: print(" múltiplo de 3") elif num % 5 == 0: print(" múltiplo de 5") elif num % 7 ==
0: print(" múltiplo de 7")
if num>=10:
if num<=20:
print("El número pertenece al intervalo [10,20]")
else:
print("El número no pertenece al intervalo [10,20]")
else:
print("El numero no pertenece al intervalo [10,20]")
if num>=10 and num<=20: #se usa el conector lógico and print("El numero pertenece al
intervalo [10,20]") else: print("El numero no pertenece al intervalo [10,20]")
if 10<=num<=20:
print("El numero pertenece al intervalo [10,20]")
else:
print("El numero no pertenece al intervalo [10,20]")
Ingrese un número: 56
El numero no pertenece al intervalo [10,20]
"Año bisiesto es el divisible entre 4 pero no entre 100, a excepción que sea divisible entre 400 "
#usando if anidados:
if año%4==0:
if(año%100!=0):
print("El año es bisiesto")
else:
if(año%400==0):
print("El año es bisiesto")
else:
print("El año no es bisiesto")
else:
print("El año no es bisiesto")
if numero == 0:
pass
#otro ejemplo:
num = 82
if num < 0:
#quite el pass y coloque la instrucción adecuada
pass
elif num > 100:
#quite el pass y coloque la instrucción adecuada
pass
elif num % 2 == 0:
print("{} es par".format(num))
else:
print("{} es impar".format(num))
83 es impar
Si se retiran las instrucciones pass del programa anterior y no se reemplazan por ninguna
instrucción, dejará de funcionar (saldrá error). La instrucción pass por lo tanto permite ir
construyendo los bloques de decisión e ir resolviendo cada una de las condiciones poco a poco.
Función range
La función range genera un rango de datos enteros. Formalmente hablando, genera una
construcción conocida como generador, es decir algo que genera valores en línea que puede ser
iterado por un lazo de repetición (al respecto, más adelante). Tiene la siguiente sintaxis:
range(start, end, step):
Palabra reservada in
La palabra reservada in se utiliza en Python para verificar si un elemento es parte de un
conjunto de datos o no, por ejemplo de un rango:
#ejemplo:
int("HOLA")
----------------------------------------------------------------------
-----
ValueError Traceback (most recent call
last)
Cell In[34], line 3
1 #ejemplo:
----> 3 int("HOLA")
Según el resultado anterior, dado que no se puede convertir "HOLA" a entero, saldrá una
excepción llamada ValueError
if edad>=0:
if edad<18:
print("Eres menor de edad")
else:
print("Eres mayor de edad")
else:
print("La edad debe ser positiva")
Ingresa tu edad: 13
Eres menor de edad
try:
edad = int(input("Ingresa tu edad: "))
if edad<18:
print("Eres menor de edad")
else:
print("Eres mayor de edad")
except:
print("La edad debe ser un valor entero")
5/0
----------------------------------------------------------------------
-----
ZeroDivisionError Traceback (most recent call
last)
Cell In[37], line 3
1 #otro ejemplo (la división entre 0):
----> 3 5/0
Según el resultado anterior, dado que no se puede dividir entre 0, saldrá una excepción llamada
ZeroDivisionError
try:
num = int(input("Ingrese un numero: "))
r = num/0 #acá se produce la excepción de ZeroDivisionError
print("r: {:.2f}".format(r))
except ValueError:
print("El numero debe ser entero")
except ZeroDivisionError:
print("No se puede dividir entre 0")
Ingrese un numero: 67
No se puede dividir entre 0
En el programa anterior, si se produce un error (excepción) en alguna instrucción del bloque try
dicha excepción es capturada pasándose a ejecutar las instrucciónes del bloque except según
el tipo de la excepción. Si se utiliza la instrucción except sin especificar el tipo de excepción se
estaría definiendo un caso de error genérico.
El uso típico de un bloque try...except es el manejo de los errores en un programa sin tener que
recurrír a operaciones condicionales que evaluen todos los posibles casos de error. Si sucede un
error, la ejecución del programa irá directamente al bloque except: y aqui se pueden evaluar
directamente todos los errores posibles, lo que hace que el programa se vea ordenado y
robusto.
Como se observa en el resultado anterior, la instrucción for va extrayendo los datos del rango
(un iterable) y para cada valor ejecuta el bloque de instrucciones colocado debajo de los :. Esta
forma de operar de un lazo for permite tener un código legible ya que la lectura del código es
clara.
*
--
***
----
*****
------
*******
--------
*********
a=1
1
3
5
7
9
¿Qué sucederá si se elimina la línea a+=2?
Otro ejemplo:
a=1
while a<7:
if(a%2==0):
print("a","is even")
else:
print("a","is odd")
a+=1 #a=a+1
a is odd
a is even
a is odd
a is even
a is odd
a is even
Importante: Las estructuras while son ideales para establecer un lazo del que no se conoce el
número de iteraciones que se van a suceder, pero se conoce la condición que hará que este
proceso se mantenga. En cambio los lazos for son mas usados cuando de antemano se conoce el
número de iteraciones que se desea hacer.
La instrucción break
Las instrucción break permite alterar la ejecución de un lazo (detiene su ejecución de forma
inmediata). Considere el siguiente programa:
1 no es multiplo de 7
2 no es multiplo de 7
3 no es multiplo de 7
4 no es multiplo de 7
5 no es multiplo de 7
6 no es multiplo de 7
7 es multiplo de 7
Podemos usar break junto a un while infinito para hacer una validación. El siguiente programa
pide un valor entre 1 y 10. Si se ingresa un valor fuera de este rango el programa continua
pidiendo el valor hasta que esté en el rango esperado:
while True: #se forma un lazo infinito
num = int(input("Ingrese un numero entre 1 y 10: "))
if num<1 or num>10:
print("Debe ingresar un numero entre 1 y 10")
else:
print("Dato correcto")
break
La instrucción continue
Las instrucción continue también permite alterar la ejecución de un lazo. Observe el siguiente
ejemplo:
11
12
13
14
16
17
18
19
21
22
23
24
26
27
28
29
El programa anterior imprime todos aquellos números de la serie del 10 al 30 pero que no son
múltiplos de 5. En la línea 2 se evalúa si num es múltiplo de 5, si es verdad se ejecuta continue
por lo que la variable de iteración num continua con su siguiente valor especificado en el for (la
ejecución de la línea 4 se obvia)
Importación de módulos:
Como se sabe, Python posee varias funciones BIF como print, input, type ... etc. Sin embargo, no
son suficientes para realizar ciertas tareas más complejas, por ejemplo, en caso que se quieran
aplicar funciones matemáticas, generar valores aleatorios, etc.
import math
La instrucción anterior agrega el módulo math al sistema. Si quiere verificar esto puede
visualizar el directorio del sistema:
dir()
Se puede notar del resultado anterior que en la lista está presente el módulo math.
dir(math)
Las funciones a las que se pueden acceder son aquellas cuyos nombres No estan rodeados de
__.
Si la importación del módulo math se hizo con la instrucción import math, entonces para usar
una función matemática se aplica el formato math.nombre_de la función¨. Por ejemplo, si se
desea calcular la raíz cuadrada de un número:
math.sqrt(8)
Si se quiere calcular el seno de un ángulo (en radianes) y revisando el listado disponible hay una
función prometedora llamada sin:
help(sin)
Porque sin no es una función BIF (sino, estaria incluída en el directorio de builtins). Para conocer
la ayuda de la función sin hay que especificar el módulo math:
#ejemplo:
El módulo random:
Podemos importar el módulo random para acceder a las funciones que generan números
aleatorios:
import random
Verifiquemos nuevamente el directorio del sistema (notará que está presente el módulo
random):
dir()
Recuerde que las funciones a las que se pueden acceder son aquellas cuyos nombres No estan
rodeados de __.
dir(random)
Como puede observar en el resultado anterior, la función random retorna una valor aleatorio
real entre 0 y 0.99999....
#ejemplo:
dir(time)
for i in range(10,-1,-1):
print(i)
time.sleep(1) #detiene la ejecución 1 segundo
print("Despegue!!")
#del módulo random importa a todas sus funciones (todos las funciones
se agregan al sistema)
from random import *