Universidad Nacional de San Antonio Abad del Cusco NG E NIE NI E R IA C IVIL E.P. I NGE
P rogramación
D igital
CAPITULO I Comandos Repetitivos Ing. E. Gladys Cutipa A. Ing. Ing. Inform. Infor m. y de Sistemas 2017-I
ROTEIRO: - Comandos Repetitivos - Comando While - Breve introducción a listas - Comando For - Ejemplos con Lazos
2
ROTEIRO: - Comandos Repetitivos - Comando While - Breve introducción a listas - Comando For - Ejemplos con Lazos
2
Comandos Repetitivos
•
Hasta ahora vimos como escribir programas
capaces de ejecutar comandos de forma lineal. Así, como tomar decisiones con relación a ejecutar o no un bloque bloqu e de instrucciones. •
No obstante, as veces es necesario ejecutar un bloque de instrucciones varias veces para obtener el resultado esperado.
3
Introducción •
•
Ejm.: Programa que imprime los números de 1 hasta 5. ¿Será que da para hacer con lo que ya sabemos? print (1) print (2) print (3) print (4) print (5)
Mas, imaginemos que se nos pide imprimir los números de 1 a 200.
¿Utilizarías lo mismo?
… Não verdade! 4
Introducción
•
•
Ejm.: Programa que imprime todos los números de 1 hasta n (n informado por el usuario). Note que el programa es válido para n<=100. print (1) if (n>=2): print (2) if (n>=3): print (3) # repite 96 veces la construcción de arriba if (n>=100): print(100)
Mais, frente a isso, se tem WH I LE
… 5
Comando While
•
•
•
Estructura: while (condición): comando O: while (condición) { comandos } En cuanto la condición fuera verdadera (True), el ejecuta el(los) comando(s).
6
Comando While •
• •
Paso 1: Testa condición. Si condición fuera verdadera va para paso 2 Paso 2.1: Ejecuta comandos; Paso 2.2: Vuelve para el paso 1. Testa condición Condición Verdadera Comandos Condición Falsa
7
Comando While Imprimiendo los 100 primeros números enteros:
i =1 while i<=100: print (i) i= i+1 ¿Cómo seria para imprimir los n primeros números enteros? n = int (input(" Ingrese número: ")) i =1 while i<=n: print (i) i= i+1 8
Comando While
1. ¿Qué acontece si la condición fuera falsa en la primera vez? while a!=a: a=a+1
2. ¿Qué acontece si la condición fuera siempre verdadera? while a == a : a = a+1;
9
Comando do While
•
•
•
Estructura: do comando; while (condición); O do{ comandos; } while (condición); Diferencia respecto al while: Primero ejecuta el comando(s), luego testa la condicional.
10
Comando do While • •
Paso 1: Ejecuta comandos; Paso 2: Analiza condición. Si fuera verdadero, va para Paso 1.
Comandos Si fuera verdadera
Analiza condición Si fuera falsa
11
Comando do While
1. Imprimiendo los 150 primeros números enteros.
i =1; inicio do{ escribir (i) i:= i+1 } while (i<=150) fin
12
Introducción a listas •
•
•
Una lista en Python es una estructura que almacena varios datos que pueden ser de un mismo tipo o no. El acceso a un dato específico de la lista se da por indicación de su posición. Una lista es creada con la construcción: [1 , 2 ,…, ].
>>> a = [1, "Jorge", 24] >>> type(a) >>> a[0] 1 >>>a[1] „Jorge‟ >>> a[2] 24 13
El comando for
•
Estructura:
for variable en lista: comando(s) •
Para cada elemento de la lista, en orden de ocurrencia, es atribuido este elemento a la variable y luego es ejecutado el(los) comando(s).
14
El comando for
•
• •
Paso 1: Si no recurrió toda la lista, se atribuye el próximo elemento de la lista para la variable. Paso 2.1: Ejecuta comandos. Paso2.2: Vuelve al paso1.
Atribuye prox.elto lista Si recurrió toda la lista
Comando(s)
15
El comando for
•
El programa abajo usa el lazo for para imprimir números de una lista.
a = [1, 2, 3] for i in a: print (i)
16
La función range
•
•
•
Es común hacer un lazo for para iterar sobre valores numéricos. En Python el comando range(n) genera una lista con los valores de 0 hasta n – 1. El programa abajo imprime los números de 0 hasta 9.
for i in range(10): print(i)
17
La función range
•
•
Podemos especificar un intervalo de valores en la función range: range(i,f): se genera números de i hasta f-1 El programa abajo imprime los números de 5 hasta 9.
for i in range(5,10): print(i)
18
La función range
•
•
Podemos especificar un paso a ser considerado en el intervalo de valores de la función range: range(i, f, p): se genera valores a partir de i con incremento de p hasta f-1 El programa abajo imprime los números pares entre 0 y menores que 33.
for i in range(0, 33, 2): print(i)
19
La función range
Imprimiendo los n primeros números enteros: n = int(input(«Ingrese número:»)) for i in range(1, n+1): print(i)
20
Variable Acumuladora
•
•
•
Veremos algunos ejemplos de problemas que son resolvidos utilizando lazos. Hay algunos padrones de solución que son bien conocidos, y son útiles en diversas situaciones. El primer padrón de ellos es el uso de una «variable acumuladora»
Problema Leer un entero positivo n, en seguida leer n números del teclado y presentar la suma de estos números.
21
Suma de números
•
•
Como n no es definido a priori, no podemos crear n variables y después sumarlas. La idea es crear una variable acumulador que a cada iteración de un lazo acumula la suma de todos los números leídos hasta entonces. acumulador = 0 # inicialmente no sumamos nada repita n veces lea un número aux acumulador = acumulador +aux
22
Suma de números
•
•
Podemos usar cualquier estructura de lazo para esta solución. Abajo tenemos una solución utilizando el comando for. n = int(input(«Ingrese el valor de n:»)) acu = 0 for i in range(n): aux = int(input()) acu = acu + aux print («La suma es: » + str(acu))
23
Calculando potencias de 3 Problema Lea un entero positivo n, e imprima las potencias: 30 , 31 , 32 , … , 3 •
•
Usamos una variable acumuladora que en el inicio de la i-ésima iteración de un lazo, posee el valor 3 Imprimimos este valor y actualizamos el acumulador para la próxima iteración, multiplicando esta variable por 3. acumulador = 1 # Corresponde a 3^0 para i=0 hasta n hacer: imprima acumulador acumulador = acumulador*3
24
Calculando potencias de 3 Problema Lea un entero positivo n, e imprima las potencias: 30 , 31 , 32 , … , 3 •
•
El repetir de 0 hasta n puede ser realizado con un lazo for: for i in range(n+1): comando(s) Mas vamos realizar este ejemplo utilizando el comando while.
25
Calculando potencias de 3 Problema Lea un entero positivo n, e imprima las potencias: 30 , 31 , 32 , … , 3
En Python: n = int(input(«Ingrese el valor de n: »)) i=0 acu = 1 # corresponde a 3^0 while i <= n: print(«3»^+str(i)+ « = » +str(acu)) i = i+1 acu = acu*3
26
Calculando el valor de n! Problema Escribir un programa que lee un valor entero positivo n y calcula el valor de n! •
Recuerde que n! = n*(n-1)*(n-2)*…2*1.
27
Calculando el valor de n! •
•
•
Creamos una variable acumuladora que en el inicio de la i-ésima iteración de un lazo almacena el valor de (i-1)! Durante la i-ésima iteración actualizamos la variable acumuladora multiplicado esta por i obteniendo i! Al final del lazo, después de n iteraciones, tendremos en el acumulador el valor de n!. acumulador =1 # corresponde a 0! para i =1 hasta n hacer: acumulador = acumulador*i i=i+1
28
Calculando el valor de n! En Python:
n = int(input("Ingrese el valor de n:")) acu = 1 #corresponde a 0! for i in range(1,n+1): acu = acu * i print(" El factorial es: " +str(acu))
29
Ejercicio 1. Realice un programa que dado un número X, imprima el mayor número de X números ingresados.
x = int(input(«Ingrese número : »)) i=0 nmayor = 0 while i < x: numero = int(input(«Ingrese un número :»)) if numero >nmayor: nmayor = numero else: nmayor = nmayor i=i+1 Print («El mayor número digitado fue :», nmayor)
30
Lazos y el comando break El comando break hace con que la ejecución de un lazo sea terminada, pasando la ejecución para el próximo comando después del final del lazo. for i in range (1, 11): if (i >= 5): break print(i) print («Finalizo el lazo»))
O qué vai dar o programa?
31
Lazos y el comando break
Rpta: Los números de 1 hasta 4 y después la frase “Finalizo el lazo”
for i in range (1, 11): if (i >= 5): break print(i) print («Finalizo el lazo»)
32
Lazos y el comando break Así como la «condición» en lazos, el comando break es utilizado en situaciones de parada de un lazo. i=1 while true: if (i>10): break print (i) i=i+1 Es equivalente a: i=1 while i<=10: print(i) i=i+1 33
Lazos y el comando continue •
El comando continue hace con que la ejecución de un lazo sea alterada para final del lazo. i=1 while i<=10: if(i==5): i=i+1 continue print(i) i=i+1 print(«Termino el lazo»)
O qué será impresso?
34
Lazos y el comando continue
Rpta: Los números de 1 hasta 10, excepto el número 5, y después la frase “Finalizo el lazo” … É só fazer correr a mão o
programa. i=1 while i<=10: if(i==5): i=i+1 continue print(i) i=i+1 print(«Termino el lazo») 35
Lazos y el comando continue •
Continue es utilizado en situaciones donde comandos
dentro del lazo sólo deben ser ejecutados caso alguna condición sea satisfecha. Imprimiendo área de un circulo, si el radio fuera par (y entre 1 y 10). for r in range (1,11): if (r%2 !=0): # si el número fuera impar pulamos continue area=3.1415*r*r print(area) … Mais,
só se tem esse metodo? No, podríamos escribir algo mas simple: for r in range(2,11,2): area=3.1415*r*r print(area) 36
… Perguntas?
…Dúvidas?
37