Con el fin de escribir programas útiles, casi siempre necesitamos la capacidad de verificar las condiciones y cambiar el comportamiento del programa. Las declaraciones condicionales nos dan esta habilidad. Para ello usaremos las instrucciones de control de flujo.
El control de flujo se refiere al orden en que se ejecutan las instrucciones que tenemos en el programa. El orden puede ser ascendente, descendente o podemos ejecutar un conjunto de instrucciones alguna determinada cantidad de veces en donde se modifique algunos valores y hasta que el valor cumple alguna condición se dejen de ejecutar esas instrucciones. Determinar el orden de las instrucciones depende primordialmente de el algoritmo que queremos desarrollar en el programa.
En un diagrama de flujo, generalmente hay más de una manera de ir desde el principio hasta el final. Lo mismo ocurre en las líneas de código de un programa de computadora. Los diagramas de flujo representan estos puntos de decision con diamantes, mientras que los otros pasos se representan con rectángulos. Los pasos inicial y final se representan con rectángulos redondeados. Pero antes de aprender sobre las declaraciones de control de flujo, primero debe aprender cómo representar esas opciones de sí y no, y necesita entender cómo escribir esos puntos de ramificación como código de Python.
Antes de empezar recordaremos los valores booleanos y los operadores de comparación
a = 2
b = 10
c = 6
d = 4
e = 5
f = 6
a >= b
False
c == f
True
e != a
True
Algo mas hardcore
((a == b) and ((d < f) or (e >= c)))
False
if
¶El tipo más común de instrucción de control de flujo es la sentencia if
. Una cláusula if
statement (es decir, el bloque que sigue a la sentencia if
) se ejecutará si la condición de la sentencia es True
. La cláusula se omite si la condición es False
.
Por ejemplo el programa:
print("Ingrese su nombre: ")
name = input()
if name == "Samuel":
print("Hola samuel")
Ingrese su nombre: Samuel Hola samuel
else
¶Una cláusula if
puede ser seguida opcionalmente por una sentencia else
. La cláusula else
se ejecuta sólo cuando la condición de la instrucción if
es False
. Una instrucción else se podría leer como: "Si esta condición es verdadera, ejecute este código. O bien, ejecutar ese código. "Una instrucción else no tiene una condición, y en código, un ejemplo de ello sería:
estado = "F"
if estado == "A":
print("Aprobaste :D")
else:
print("Desaprobaste :(")
Desaprobaste :(
Ahora veamos si un numero es par o impar:
num = int(input("Ingrese un numero: "))
if num%2 == 0:
print("El numero es par")
else:
print("El numero es impar")
Ingrese un numero: 21 El numero es impar
elif
¶Mientras que sólo una de las cláusulas if
o else
se ejecutará, es posible que tenga un caso en el que desee ejecutar una de las muchas cláusulas posibles. La instrucción elif
es una instrucción "else if
" que sigue siempre después de una if
o otra sentencia elif
. Proporciona otra condición que se comprueba sólo si alguna de las condiciones anteriores eran falsas. Un ejemplo:
pez = 'caballa'
if pez == 'atún':
print("El pez que compraste es atún")
elif pez == 'caballa':
print("El pez que compraste es caballa")
else :
print("¿Qué habrás comprado? D:")
El pez que compraste es caballa
num = int(input("Ingrese su promedio: "))
if num >= 90:
print("Grade A")
elif num >= 80:
print("Grade B")
elif num >= 70:
print("Grade C")
elif num >= 60:
print("Grade D")
elif num >= 40:
print("Grade E")
else:
print("Grade F")
Ingrese su promedio: 72 Grade C
Ahora vamos a mostrar un programa que sirve para determinar si un año es bisiesto o no
anio=input("Ingrese un año: ")
year = int(anio)
#Un año es bisiesto si es divisible entre 4,
#excepto aquellos divisibles entre 100 pero no entre 400.
if year % 4 == 0:
if year %100 != 0:
print("El año", year, "es bisiesto")
elif year %400 == 0:
print("El año", year, "es bisiesto")
else:
print("El año", year, "no es bisiesto")
else:
print ("El año", year, "no es bisiesto")
Ingrese un año: 1994 El año 1994 no es bisiesto
Programa para calcular las raices de una ecuación cuadrática:
print("Programa para calcular las raices de una ecuación de la forma ax^2 + bx + c")
print("Ingrese los coeficientes: ")
a = int(input("Coeficiente a: "))
b = int(input("Coeficiente b: "))
c = int(input("Coeficiente c: "))
d = b**2 - 4*a*c # Discriminante
e = 2*a #Denominador
if d == 0:
print("Las raices son iguales y x1 = x2 = {}".format(-b/e))
else:
if d>0 :
print("Las raices reales son: ")
print("x1 = {0:.4f}".format((-b + d**(0.5))/e))
print("x1 = {0:.4f}".format((-b - d**(0.5))/e))
else:
print("Las raices imaginarias son: ")
print("x1 = {0:.4f}".format((-b + d**(0.5))/e))
print("x1 = {0:.4f}".format((-b - d**(0.5))/e))
Programa para calcular las raices de una ecuación de la forma ax^2 + bx + c Ingrese los coeficientes: Coeficiente a: 15 Coeficiente b: 8 Coeficiente c: 9 Las raices imaginarias son: x1 = -0.2667+0.7272j x1 = -0.2667-0.7272j
while
¶Puede hacer que un bloque de código se ejecute una y otra vez con una sentencia while
. La cláusula de código en un tiempo se ejecutará siempre y cuando la condición de la sentencia while
sea True
. Un ejemplo:
cont = 0
while cont < 5:
print('No debo escribir código sin documentar')
cont = cont + 1
No debo escribir código sin documentar No debo escribir código sin documentar No debo escribir código sin documentar No debo escribir código sin documentar No debo escribir código sin documentar
Puede ver que una sentencia while
es similar a una sentencia if
. La diferencia está en cómo se comportan. Al final de una cláusula if
, la ejecución del programa continúa después de la instrucción if
. Pero al final de la cláusula while
, la ejecución del programa vuelve al principio de la sentencia while
. La cláusula while
a menudo se denomina loop while
.
En este ejemplo pediremos al usuario que ingrese su contraseña si es correcta el bucle terminará de lo contrario el bucle continuara, este es un ejemplo de un bucle infinito controlado.
password = ''
while password != '12345':
print('Por favor ingrese su contraseña: ')
password = input()
print('Por fin...!')
Por favor ingrese su contraseña: 123 Por favor ingrese su contraseña: 12345 Por fin...!
break
¶Hay un atajo para que la ejecución del programa salga de la cláusula de un loop antes. Si en la ejecución del programa encuentra una instrucción break
, sale inmediatamente de la cláusula while
loop. En código, una instrucción break
simplemente contiene la palabra clave break
.
Un ejemplo:
while True:
print('Por favor ingrese su nombre')
name = input()
if name == 'Rose':
break
print('Bye! !')
Por favor ingrese su nombre Carla Por favor ingrese su nombre Rose Bye! !
continue
¶Al igual que las sentencias break
, las sentencias continue
se usan dentro de bucles. Cuando la ejecución del programa llega a la instruccion continue
, la ejecución del programa inmediatamente salta de nuevo al inicio del bucle y reevalúa la condición del bucle. (Esto es también lo que sucede cuando la ejecución llega al final del bucle.)
while True:
name = input('Ingrese su nombre: ')
if name != 'Milagros':
continue
print('Hola Milagros, por favor ingresa tu contraseña: ')
password = input()
if password == 'contraseña':
break
print('Bienvenido a su cuenta bancaria')
Ingrese su nombre: Mia Ingrese su nombre: Milagros Hola Milagros, por favor ingresa tu contraseña: test Ingrese su nombre: Milagros Hola Milagros, por favor ingresa tu contraseña: contraseña Bienvenido a su cuenta bancaria
for
¶El bucle while
sigue en bucle mientras que su condición sea True
(que es la razón de su nombre), pero ¿y si quieres ejecutar un bloque de código sólo un cierto número de veces?. Esto se puede hacer haciendo uso del bucle for
.
for i in range(8):
print('No debo jugar dota (' + str(i+1) + ')')
No debo jugar dota (1) No debo jugar dota (2) No debo jugar dota (3) No debo jugar dota (4) No debo jugar dota (5) No debo jugar dota (6) No debo jugar dota (7) No debo jugar dota (8)
El código en la cláusula del bucle for se ejecuta 8 veces. La primera vez que se ejecuta, la variable i se pone a 0. La llamada print () en la cláusula imprimirá No debo jugar dota (0). Después de que Python termine una iteración a través de todo el código dentro de la cláusula de loop for, la ejecución vuelve a la parte superior del bucle y la instrucción for incrementa i por uno. Esta es la razón por la cual el rango (8) da lugar a 8 iteraciones a través de la cláusula, con i siendo puesto a 0, luego 1, luego 2, etc.... La variable i subirá, pero no incluirá, el entero pasado a range ().
range()
¶La funcion range nos permite crear una secuencia de numeros, tiene por argumentos 3 parametros ( inicio,fin, pasos)
# Podemos usar un argumento
for i in range(10):
print(i + 1, "", end="")
1 2 3 4 5 6 7 8 9 10
# Podemos usar 2 para definir el inicio
for i in range(1, 11):
print(i, "", end="")
1 2 3 4 5 6 7 8 9 10
# Podemos usar 3 para definir una secuencia con una razon(en este caso 2)
for i in range (2,10,2):
print(i, "", end="")
2 4 6 8
for i in range (20,0,-2):
print(i, "", end="")
20 18 16 14 12 10 8 6 4 2
for i in range(40, -5, -5):
print(i, "", end="")
40 35 30 25 20 15 10 5 0
for i in range(5, -1, 1):
print(i)
¿Qué paso? ... el inicio es en 5 y el fin -1 pero como los pasos son crecientes, jamás se cumplirá la condición es decir no se ejecutará el print
lower_bound = int(input("Ingrese el valor inferior: "))
upper_bound = int(input("Ingrese el valor tope: "))
sum = 0
print(lower_bound)
for k in range(lower_bound,upper_bound + 1):
sum = sum + k
print(sum)
Ingrese el valor inferior: 10 Ingrese el valor tope: 20 10 165
numero1 = int(input("Escriba un número entero: "))
numero2 = int(input("Escriba un número entero mayor o igual que " + str(numero1) + ": "))
if numero2 < numero1:
print("¡Le he pedido un número entero mayor o igual que", numero1, "!")
else:
for i in range(numero1, numero2 + 1):
if i % 2 == 0:
print("El número", i, "es par")
else:
print("El número", i, "es impar")
Escriba un número entero: 23 Escriba un número entero mayor o igual que 23: 32 El número 23 es impar El número 24 es par El número 25 es impar El número 26 es par El número 27 es impar El número 28 es par El número 29 es impar El número 30 es par El número 31 es impar El número 32 es par
numero = int(input("Escriba un número entero mayor que cero: "))
if numero <= 0:
print("¡Le he pedido un número entero mayor que cero!")
else:
factorial = 1
for i in range(1, numero + 1):
factorial = factorial * i
print("El factorial de", numero, "es", factorial)
Escriba un número entero mayor que cero: 10 El factorial de 10 es 3628800
sum = 0
for x in range (1,100):
sum = sum + (1.0 / (x*x))
print(sum)
1.6348839001848923
# Antes de comenzar tenemos que nuestra condición a evaluar será:
numero % 2 == 0 and numero % 3 != 0 and numero % 4 != 0
# Aunque tambíen sería asi:
numero % 2 == 0 and not (numero % 3 == 0 or numero % 4 ==0)
True
#Resolviendo con while
numero = 1
while numero < 100:
if numero % 2 == 0 and not (numero % 3 == 0 or numero % 4 == 0):
print(numero , "", end="")
numero = numero + 1
2 10 14 22 26 34 38 46 50 58 62 70 74 82 86 94 98
# Resolviendo con for
del1al100 = range (1, 101)
for numero in del1al100:
if numero % 2 == 0 and not (numero % 3 == 0 or numero % 4 == 0):
print(numero , "", end="")
2 10 14 22 26 34 38 46 50 58 62 70 74 82 86 94 98
for multiplicador in range (1, 11):
print("Tabla de multiplicar del", multiplicador)
for multiplicando in range (1, 11):
print(multiplicando, "*", multiplicador, "=", multiplicando*multiplicador)
print("==========================")
print() # línea en blanco.
Tabla de multiplicar del 1 1 * 1 = 1 2 * 1 = 2 3 * 1 = 3 4 * 1 = 4 5 * 1 = 5 6 * 1 = 6 7 * 1 = 7 8 * 1 = 8 9 * 1 = 9 10 * 1 = 10 ========================== Tabla de multiplicar del 2 1 * 2 = 2 2 * 2 = 4 3 * 2 = 6 4 * 2 = 8 5 * 2 = 10 6 * 2 = 12 7 * 2 = 14 8 * 2 = 16 9 * 2 = 18 10 * 2 = 20 ========================== Tabla de multiplicar del 3 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 4 * 3 = 12 5 * 3 = 15 6 * 3 = 18 7 * 3 = 21 8 * 3 = 24 9 * 3 = 27 10 * 3 = 30 ========================== Tabla de multiplicar del 4 1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16 5 * 4 = 20 6 * 4 = 24 7 * 4 = 28 8 * 4 = 32 9 * 4 = 36 10 * 4 = 40 ========================== Tabla de multiplicar del 5 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25 6 * 5 = 30 7 * 5 = 35 8 * 5 = 40 9 * 5 = 45 10 * 5 = 50 ========================== Tabla de multiplicar del 6 1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36 7 * 6 = 42 8 * 6 = 48 9 * 6 = 54 10 * 6 = 60 ========================== Tabla de multiplicar del 7 1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49 8 * 7 = 56 9 * 7 = 63 10 * 7 = 70 ========================== Tabla de multiplicar del 8 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64 9 * 8 = 72 10 * 8 = 80 ========================== Tabla de multiplicar del 9 1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81 10 * 9 = 90 ========================== Tabla de multiplicar del 10 1 * 10 = 10 2 * 10 = 20 3 * 10 = 30 4 * 10 = 40 5 * 10 = 50 6 * 10 = 60 7 * 10 = 70 8 * 10 = 80 9 * 10 = 90 10 * 10 = 100 ==========================
numero = int(input("Escriba un número entero mayor que cero: "))
if numero <= 0:
print("¡Le he pedido un número entero mayor que cero!")
else:
print("Los divisores de", numero, "son ", end="")
for i in range(1, round(numero/2)+1):
if numero % i == 0:
print(i, end=" ")
print(numero)
Escriba un número entero mayor que cero: 21 Los divisores de 21 son 1 3 7 21
numero = int(input("Escriba un número entero mayor que 1: "))
if numero <= 1:
print("¡Le he pedido un número entero mayor que 1!")
else:
contador = 0
limite = round(numero ** 0.5)
for i in range(1, limite + 1):
if numero % i == 0:
contador = contador + 1
if contador == 1:
print(numero, "es primo")
else:
print(numero, "no es primo")
Escriba un número entero mayor que 1: 10 10 no es primo
numero1 = int(input("Escriba un número entero: "))
numero2 = int(input("Escriba un número entero mayor o igual que " + str(numero1) + ": "))
while numero1 < numero2:
flag = 0;
limite = round(numero1**0.5)
for i in range(2, limite + 1):
if numero1 % i == 0:
flag = 1
break
if flag == 0:
print(numero1)
numero1 = numero1 + 1
Escriba un número entero: 5 Escriba un número entero mayor o igual que 5: 36 5 7 11 13 17 19 23 29 31
Todos los programas de Python pueden llamar a un conjunto básico de funciones llamadas funciones integradas o incorporadas, incluyendo las funciones print()
, input()
y len()
que has visto antes. Python también viene con un conjunto de módulos llamados la biblioteca estándar. Cada módulo es un programa Python que contiene un grupo relacionado de funciones que se pueden usar en los programas. Por ejemplo, el módulo matemático tiene funciones relacionadas con las matemáticas, el módulo aleatorio tiene funciones relacionadas con números aleatorios, y así sucesivamente.
#la función sqrt nos da la raíz cuadrada
import math
math.sqrt(9)
3.0
# rand.int nos permite generar un numero aleatorio entre 1-10
import random
for i in range(5):
print(random.randint(1, 10))
7 1 1 4 4
# Un juego para adivinar el numero
import random
lower_bound = int(input("Ingrese el valor inferior: "))
upper_bound = int(input("Ingrese el valor tope: "))
mi_numero = random.randint(lower_bound,upper_bound)
count = 0
while True:
count +=1
numeroIngresado = int(input("Adivina el numero: "))
if numeroIngresado < mi_numero:
print("Muy pequeño ")
elif numeroIngresado > mi_numero:
print("Muy Grande")
else:
print("Adivinaste! en el intento: " + str(count))
break
Ingrese el valor inferior: 10 Ingrese el valor tope: 20 Adivina el numero: 15 Muy Grande Adivina el numero: 13 Muy pequeño Adivina el numero: 14 Adivinaste! en el intento: 3
Ahora veamos un ejemplo para calcular la raiz de un número usando el método de Newton
# Método de newton para calcular la raiz de un numero
import math
x = float(input("Ingrese un numero : "))
tolerancia = 0.0001
estimado = 1.0
while True:
estimado = (estimado + x / estimado)/2
diferencia = abs( x - estimado ** 2 )
if diferencia <= tolerancia:
break
print("El valor estimado de la raiz es: " + str(estimado))
print("El valor estimado por python es: " + str(math.sqrt(x)))
Ingrese un numero : 36 El valor estimado de la raiz es: 6.000000005333189 El valor estimado por python es: 6.0
Hallar la siguiente sumatoria:
from math import sqrt,pi,sin
x= 0.0
s= 0.0
for i in range (101):
s = s + sqrt(x)*sin(x)
x = x + 0.01*pi
print(s)
77.51389798916522
Ahora tenemos que hallar el valor de PI usando la serie de Leibniz
import time
import math
n = int(input("Cuantas iteraciones desea? "))
start = time.time()
pi,numer = 0,4.0
for i in range(n):
denom = (2*i+1)
term = numer/denom
if i%2:
pi -= term
else:
pi += term
end = time.time()
total_time = (end - start)
seconds = round(total_time, 8)
print("Valor de pi computado: " + str(pi))
print("error: " + str(math.fabs(math.pi - (pi))))
print(seconds, "seconds")
Cuantas iteraciones desea? 100000 Valor de pi computado: 3.1415826535897198 error: 1.0000000073340232e-05 0.07004452 seconds
# Esta celda da el estilo al notebook
from IPython.core.display import HTML
css_file = '../styles/StyleCursoPython.css'
HTML(open(css_file, "r").read())