Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Full Transcript

Introducción a la programación Repetición Índice Repetición...................................................................................................................................1 1 Repetición..............................................................................................

Introducción a la programación Repetición Índice Repetición...................................................................................................................................1 1 Repetición............................................................................................................................3 2 El bucle for..........................................................................................................................3 3 El bucle while......................................................................................................................5 4 Ejercicios resueltos..............................................................................................................9 5 Ejercicios propuestos.........................................................................................................10 5.1 Solo repetición...........................................................................................................10 5.2 Repetición y decisión.................................................................................................12 Introducción a la programación Repetición- 2 Introducción a la programación 1 Repetición En Python hay disponibles dos tipos de bucles: el bucle for y el bucle while. Estas dos instrucciones son las que permiten el uso del mecanismo de repetición, que consiste en poder ejecutar un determinado número de veces (literalmente, cuando dicho número se conoce de antemano, o a través de una condición) una serie de instrucciones. 2 El bucle for El bucle for permite ejecutar un bloque de instrucciones un determinado número de veces. Para que el programador pueda saber en qué vuelta de bucle se encuentra, una variable llamada variable de control se encarga de ir tomando los valores consecutivos según el paso, desde el límite inferior hasta llegar al límite superior dado. Sintaxis for in range([], , []): pass En la sintaxis arriba lim_inf es el límite inferior, lim_sup es el límite superior, y paso es el incremento o decremento. Los corchetes indican que la variable es opcional, por lo que solo el límite superior es obligatorio. En cuanto a pass, es una palabra clave en Python que indica que el bloque no contiene ninguna instrucción. Como ya se ha discutido, en este lenguaje de programación, los bloques de instrucciones se marcan con dos puntos desde el final de la instrucción que necesita indicar un bloque, y el bloque de instrucciones en sí indentados hacia la derecha1. En el siguiente ejemplo, se muestran los números del cero al cinco, uno por línea. Es importante tener en cuenta que si no se especifica, el límite inferior siempre es cero, y que no se llega nunca al límite superior, sino al valor anterior según el paso elegido (que por defecto es uno). Si se desea especificar un paso distinto, es necesario especificar también un límite inferior, ya que de otra forma dos valores en la función range(i) se entenderían como límite inferior y límite superior. for i in range(6): print(i) Así, el código arriba sería correspondiente a escribir lo siguiente: i = 0 print(i) i += 1 print(i) i += 1 print(i) i += 1 print(i) i += 1 print(i) i += 1 print(i) 1La indentación se logra pulsando la tecla Tab. Repetición- 3 Introducción a la programación Como curiosidad, a escribir este código se le denominaría “desenrollar” el bucle. Hay que tener en cuenta que, aunque por repetir cinco veces una instrucción, el usar un bucle pueda parecer que no sea necesario (o que implique un excesivo esfuerzo), quizás en otras circunstancias se plantee la necesidad de hacer repeticiones hasta 100, o 1000, donde desenrollar el bucle sería impracticable. El siguiente programa visualiza la tabla de multiplicar de un número introducido por teclado: # Tabla de multiplicar de un entero dado x = int(input(“Dame un valor entero: “)) for i in range(1, 11): print(str.format(“{0:2d} x {1:2d} = {2:2d}”, i, x, i * x)) La salida del programa es la siguiente: Dame un valor entero: 5 1 x 5 = 5 2 x 5 = 10 3 x 5 = 15... 10 x 5 = 50 Que también podría haberse escrito como sigue: x = int(input(“Dame un valor entero: “)) for i in range(10): print(f“{i + 1: 2d} x {x:2d} = {(i + 1) * x: 2d}”) El siguiente programa muestra los números pares hasta el 20, inclusive. Aparecerán en la misma línea: for i in range(2, 21, 2): print(i, end=’ ‘) print() El utilizar end=‘’ como último valor para print(t) hace que, en lugar de imprimir algo por pantalla, y saltar a la línea siguiente (el valor de end normalmente es el salto de línea), imprima el valor y después un simple espacio. end es un parámetro optativo, es decir, tiene preasignado un valor por defecto. De la misma forma, es posible hacer que el paso del bucle suponga un decremento, y no un incremento, por lo que el límite inferior pasa a ser el superior y viceversa. for i in range(20, 0, -2): print(i, end=’ ‘) Ahora la salida del programa es la siguiente: 20 18 16 14 12 10 8 6 4 2 Repetición- 4 Introducción a la programación También es posible recorrer un texto: t = “Hola, mundo!” for i in range(len(t)): print(t[i], end=’-’) print() Mostrando por pantalla: “h-o-l-a-,- -m-u-n-d-o-”. Y por supuesto, finalmente, es posible anidar un bucle dentro de otro. En el siguiente ejemplo, se imprimirían los números del 1 al 100, cada decena en una línea distinta. for i in range(0, 90, 10): for j in range(1, 11): print(i + j, end=’ ‘) print() Igualmente, se pueden combinar decisiones y bucles, unos dentro de otros. 3 El bucle while El bucle while, en lugar de centrarse en un número de repeticiones, se basa en comprobar una condición en cada vuelta de bucle, de manera que la repetición de la instrucciones en el bloque termina cuando la condición deja de cumplirse. Sintaxis while : pass En la sección anterior se discutía un programa con un bucle que mostraba los números pares hasta el veinte, en la misma línea. El equivalente con while sería el siguiente: i = 0 while (i < 21): print(i, end=’ ‘) i += 2 print() Como se puede apreciar, el bucle while es más genérico que el bucle for, por lo que es capaz de simular a este último. Así, el programa que visualiza la tabla de multiplicar de un número entero se podría reescribir como sigue, utilizando while. # Tabla de multiplicar de un entero dado. n = int(input(“Dame un valor entero: “)) i = 1 while i i pasa a valer 2 2ª vuelta de bucle: i “2 x 5 = 10” por pantalla i += 1 => i pasa a valer 3 3ª vuelta de bucle: i “3 x 5 = 15” por pantalla i += 1 => i pasa a valer 4 4ª vuelta de bucle: i “4 x 5 = 20” por pantalla i += 1 => i pasa a valer 5 5ª vuelta de bucle: i “5 x 5 = 25” por pantalla i += 1 => i pasa a valer 6 6ª vuelta de bucle: i “6 x 5 = 30” por pantalla i += 1 => i pasa a valer 7 7ª vuelta de bucle: i “7 x 5 = 35” por pantalla i += 1 => i pasa a valer 8 8ª vuelta de bucle: i “8 x 5 = 40” por pantalla i += 1 => i pasa a valer 9 9ª vuelta de bucle: i “9 x 5 = 45” por pantalla i += 1 => i pasa a valer 10 10ª vuelta de bucle: i “10 x 5 = 50” por pantalla i += 1 => i pasa a valer 11 11ª vuelta de bucle: i 8: resto = base10 % 8 octal = chr(ord('0') + resto) + octal base10 //= 8 octal = chr(ord('0') + base10) + octal print(octal) En el programa anterior, se desconoce de antemano cuántas veces tendrán que ejecutarse las condiciones del bucle, al depender del número introducido. En el siguiente ejercicio, se ha codificado la hipótesis de Collatz. Según esta hipótesis, partiendo de cualquier número natural se puede llegar a uno, dividiendo entre dos si es par, y multiplicando por tres y sumándole uno en caso de que sea impar. Esta operación debe repetirse sucesivamente. # Conjetura de Collatz x = int(input("Conjetura de Collatz\nDame valor entero: ")) print(x, "=", end=' ') while x > 1: if x % 2 == 0: x //= 2 else: x = (3 * x) + 1 print(x, end=' ') print() Así, por ejemplo para 4 se visualizará 4 = 2 1, mientras que para siete mostrará 7 = 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1, y para 14, 14 = 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1. Repetición- 7 Introducción a la programación El siguiente ejercicio calcula el producto de dos números enteros mediante sumas sucesivas. Los resultados parciales se van acumulando en una variable que al final de todas las repeticiones tendrá el resultado de la multiplicación. # Calcula el producto mediante la suma sucesiva n1 = int(input("Dame el valor entero 1: ")) n2 = int(input("Dame el valor entero 2: ")) resultado = 0 for i in range(n2): resultado += n1 print(str.format("{0:3d} x {1:3d} = {2:3d}", n1, n2, resultado)) Este programa calcula, por ejemplo, cinco por seis realizando seis veces la suma de cinco y acumulando el resultado en cada vuelta de bucle. Así, 5 x 6 = 5 + 5 + 5 + 5 + 5 + 5 = 30. En ocasiones, necesitamos que un bucle se ejecute varias veces, pero en realidad no utilizaremos la variable de control para nada útil. En estos casos, como precisamente sucede en el programa anterior, se puede sustituir la variable de control por un guión bajo, posibilidad que se muestra a continuación. # Calcula el producto mediante la suma n1 = int(input("Dame el valor entero 1: ")) n2 = int(input("Dame el valor entero 2: ")) resultado = 0 for _ in range(n2): resultado += n1 print(f"{n1: 3d} x {n2: 3d} = {resultado: 3d}") Repetición- 8 Introducción a la programación 4 Ejercicios resueltos 1 Escribe un programa que realice el cálculo del factorial de un número natural dado. # Factorial x = int(input("Dame un valor entero: ")) resultado = 1 while x > 1: resultado *= x x -= 1 print("Factorial:", resultado) 2. Crea un programa que permite transformar un número binario (base 2) a decimal. # Convertir un valor binario (base 2) a base 10. binario = input("Dame el valor binario: ") binario = binario.strip() num_digitos = len(binario) base = num_digitos - 1 resultado = 0 for i in range(num_digitos): resultado += (2 ** base) * int(binario[i]) base -= 1 print("Resultado en decimal:", resultado) 2. En una granja necesitan contabilizar el número de conejos blancos y negros por separado. Crea un programa que permita contar ambos tipos de conejos, preguntando al usuario si desea contabilizar un conejo blanco, uno negro, o salir del programa (momento en el que se muestra el cálculo). # Censo de conejos t = ‘’ blancos = 0 negros = 0 while t != ‘s’: t = input(“Conejo b/lanco, conejo n/egro, s/alir: “) if t == ‘b’: blancos += 1 elif t == ‘n’: negros += 1 print(str.format( “{0:3d} conejos blancos y {0:3d} conejos negros”, blancos, negros)) Repetición- 9 Introducción a la programación 5 Ejercicios propuestos Los siguientes ejercicios son básicos y se pueden resolver conociendo los principios de secuencia, repetición, decisión, y los rudimentos del lenguaje de programación. Tras cada enunciado, se muestra un ejemplo de la entrada y salida por pantalla del programa a escribir para que sirva de guía. 5.1 Solo repetición 1. Muestra los números del 1 al 100 (ambos incluidos). Usa un bucle while. 2. Muestra los números del 1 al 100 (ambos incluidos). Usa un bucle for. 3. Crear un programa que sume N números introducidos por teclado. El valor de N también se introducirá por teclado. Num. de valores: 2 Valor 1: 5 Valor 2: 6 Suma: 11 4. Hacer el programa que para los números naturales menores que N (pedido por teclado), calcule: a) la suma de los impares, b) la suma de los pares, y por último, la suma de los múltiplos de tres. Valor N: 10 Impares: 25 Pares: 20 Mult. 3: 18 5. Escribe un programa que calcule la media de N números introducidos por teclado. Dame el valor de N: 3 Dame el valor 1: 2 Dame el valor 2: 2 Dame el valor 3: 2 Media: 2 6. Crea un programa que visualice los N primeros números de la sucesión de Fibonacci. En la sucesión de Fibonacci, los dos primeros valores son 0 y 1. Los valores subsiguientes se calculan sumando el último y el penúltimo. Valor N: 10 Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 7. Escribe un programa que visualice los N primeros números de la sucesión de Tribonacci. En la sucesión de Fibonacci, los dos primeros valores son 0, 1 y 1. Los valores subsiguientes se calculan sumando el último, el penúltimo y el antepenúltimo. Valor N: 10 Tribonacci: 0, 1, 1, 2, 4, 7, 13, 24, 44, 81 Repetición- 10 Introducción a la programación 8. Crea un programa que muestre el valor en binario de un número natural introducido por teclado. Para los números enteros que utilizamos habitualmente (números con base diez), calculamos el dígito (de 0 a 9) para cada posición n según el valor residual para 10n. Así, 325 se calcula como 3 x 102 + 2 x 101 + 5 x 100 = 300 + 20 + 5. Los números binarios son números enteros en base dos (0 o 1), el dígito en cada posición n se calcula mediante el valor residual de 2n. Así, 1001 es 1 x 23 + 0 x 22 + 0 x 21 + 1 x 20 = 8 + 0 + 0 + 1 = 9. Dame un valor: 9 Binario: 1001 9. Escribe un programa que descomponga un número en sus cifras de base 10 (el número de cifras de un entero se obtiene sumando 1 a la parte entera de su logaritmo en base 10). Dame un entero: 325 Base 10: 3 x 10 ** 2 + 2 x 10 ** 1 + 5 x 10 ** 0. 10. Escribe un programa que muestre las monedas que es necesario dar para un cambio determinado. Asume que el valor de las monedas se valorará en céntimos, al igual que el valor del cambio inicial. Dame el valor del cambio a devolver: ¢25 Monedas a devolver: 0 de 1€, 0 de 50¢, 1 de 20¢, 0 de 10¢, 1 de 5¢, 0 de 2¢ y 0 de 1¢. 11. Dado un texto introducido por teclado, cuenta el número de vocales y consonantes en él. Dame un texto: Hola, mundo Vocales: 4 Consonantes: 5 12. Dado un número entero x introducido por teclado, determina si se trata de un número primo o no. Se puede saber si un número es primo dividiéndolo por todos los números naturales mayores que 1 hasta la raiz cuadrada de x. Dame un entero: 11 Es primo. Dame un entero: 22 No es primo. Repetición- 11 Introducción a la programación 5.2 Repetición y decisión 1. Escriba un programa que visualice los 100 primeros números pares 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30... 2. Escriba un programa que visualice los primeros números pares por debajo de 100 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30... 3. Escriba un programa que visualiza los 100 primeros números primos 2 3 5 7 11 13... 4. Escriba un programa que visualiza los primeros números primos por debajo de 100 2 3 5 7 11 13… 5. Escriba el juego del mastermind. El ordenador escoge un número al azar entre 1 y 100, y el usuario tiene que introducir valores por teclado hasta acertar el número elegido. Se visualiza “correcto” y el número de turnos al acertarlo. En caso contrario, se visualiza “Es mayor.” o “Es menor.” dependiendo si el número escogido es mayor o menor que el introducido por teclado. He escogido un valor natural entre 1 y 100. Valor: 5 Es mayor. Valor: 10 Es mayor. Valor: 15 Es menor. Valor: 12 Correcto! Turnos necesarios: 4 6. Escribe un programa que muestre el valor n para el que se supera un número natural x introducido por teclado, según la sucesión: y = 1 + 2 + 3 + 4 + 5 + 6 +… + n | y >= x. Dame un valor x: 20 El valor de n es: 6 Repetición- 12 Introducción a la programación 7. Calcule el total de una factura, partiendo de una lista de precios. Existen tres tipos de IVA, el general (21%), el reducido (10% para alimentos) y el superreducido (4% para libros, pan, leche, cereales, quesos, frutas y verduras). La lista finaliza cuando el importe sea 0. Se debe imprimir el importe y el iva resultantes (total menos descuento) y la suma de ambos. Hay que realizar también un descuento, en función de la suma de los importes, dicho descuento es del 0% si es menor que 1000, es del 5% si es mayor o igual que 1000 y menor que 10000 y es de un 10% si es mayor o igual que 10000. El descuento se debe aplicar a la suma de los importes antes de impuestos, y a la suma de los importes debidos al IVA, debiendo visualizarse ambos valores y su suma. Importe: 5 IVA (g/eneral, r/educido, s/uperreducido): s Importe: 20 IVA (g/eneral, r/educido, s/uperreducido): r Importe: 0 Total antes de impuestos: 25 Total de impuestos: 2.2 Descuento: 0% Total antes de impuestos: 25 Total de impuestos: 2.20 Total: 27.20 8. Escribe un programa que muestre las monedas que es necesario dar para un cambio determinado. Asume que el valor de las monedas se valorará en céntimos, mientras que el valor del cambio se introducirá en euros. Solo muestra aquellas monedas de las que se devolverá realmente alguna. Dame el valor del cambio a devolver: 0.25 Monedas a devolver: 1 de 20c 1 de 5c 9. Un profesor imparte una asignatura en la que evalúa dos partes: la teórica, que supone un x% de la nota, y la práctica, con un (100-x)%. Para aprobar, es necesario haber obtenido al menos un cuatro en ambas partes. Escribe un programa que permita calcular la nota para varios alumnos, mostrando el desglose de su cálculo. El programa termina cuando la nota de teoría introducida sea menor que cero, momento en el que visualizará la media de las notas de los aprobados, y la media de los suspensos. Dame el valor de la parte de teoria: %60 Dame la nota de teoría: 6 Dame la nota de prácticas: 7 Nota final: 6 60% + 7 40% = 6.40 Dame la nota de teoría: 5 Dame la nota de prácticas: 5 Nota final: 5 60% + 5 40% = 5.00 Dame la nota de teoría: -1 Media de las notas aprobados: 6.50 Media de las notas suspensos: 0.00 Repetición- 13 Introducción a la programación Repetición- 14

Use Quizgecko on...
Browser
Browser