1er
Introduccin a la Programacin
semestre de 2012
Introduccin a la Programacin
Prctica 3 Ciclos
Versin del 28 de marzo de 2012
1.
Ciclos
Una de las cosas para las cuales suelen usarse las computadoras es para la automatizacin
de tareas repetitivas. Repetir tareas idnticas o similares sin cometer errores es algo que las
computadoras hacen muy bien y las personas no.
Este tipo de repeticin se llama
iteracin, y Python provee algunas herramientas del lenguaje
que simplican la escritura de programas iterativos.
Las dos herramientas que vamos a ver son las sentencias
1.1.
while(mientras)
for(para).
La sentencia while (mientras)
Usando una sentencia
while,
podemos escribir un programa que haga una cuenta regresiva:
n = int(input("Ingrese un valor para la cuenta regresiva"))
while n > 0:
print(n)
n = n-1
print("Despegue!")
while se puede leer casi como si estuviese en castellano1 . Lo que signica, Mientras
n es mayor que cero, continuar imprimiendo el valor de n y reduciendo el valor de n en 1. Cuando
Una sentencia
llegue a cero, imprimir la palabra `Despegue!' .
Ms formalmente, el ujo de ejecucin para una sentencia
1. Evaluar la condicin entre parntesis produciendo
2. Si la condicin es falsa, salir de la sentencia
true
while
while
o
es el siguiente:
false.
y continuar la ejecucin en la siguiente
sentencia.
3. Si la condicin es verdadera, ejecutar cada una de las sentencias que estn tabuladas a
continuacin.
A este tipo de ujos se los llama
ciclos porque el tercer paso arma un ciclo al volver al paso
1. Not que si la condicin es falsa la primera vez, las sentencias dentro del ciclo no se ejecutan
nunca. Las sentencias dentro del ciclo son usualmente llamadas el
cuerpo del ciclo.
El cuerpo del ciclo debe cambiar el valor de una o ms variables para que, eventualmente,
la condicin se haga falsa y el ciclo termine. Si no, el ciclo se repetir por siempre, lo cual es
conocido como un ciclo
innito.
En el caso de nuestra cuenta regresiva, podemos probar que el ciclo terminar ya que sabemos
que el valor de
es nito, y podemos ver que el valor de
cada vez que pasa por el ciclo (en cada
toma valores cada vez ms pequeos
iteracin), con lo cual eventualmente llegaremos a cero.
En otros casos no es tan sencillo de ver:
N.d.T.: la palabra while signica mientras en castellano.
Pgina 1 de 11
1er
Introduccin a la Programacin
semestre de 2012
n = int(input("Ingrese un numero mayor a cero"))
while n != 1:
print n,
if n % 2 == 0:
# n es par
n = n / 2
else:
# n es impar
n = n * 3 + 1
La condicin de este ciclo es
n != 1,
as que el ciclo continuar hasta que
sea 1, lo que har
falsa la condicin.
En cada iteracin, el programa imprime el valor de
par, el valor de
y luego verica si es par o impar. Si es
se divide por dos. Si es impar, el valor se reemplaza por
si el valor inicial (el argumento pasado a
secuencia)
3n + 1.
Por ejemplo,
es 3, la secuencia resultante es 3, 10, 5, 16,
8, 4, 2, 1.
Como
a veces aumenta y a veces disminuye, no hay una demostracin obvia de que
alcance alguna vez 1, o de que el programa vaya a terminar. Para algunos valores particulares de
n,
podemos probar que termina. Por ejemplo, si el valor inicial es una potencia de dos, entonces
el valor de
ser par cada vez que pase por el ciclo hasta llegar a valer 1. El ejemplo anterior
termina con una secuencia que empieza en 16.
Dejando de lado los valores particulares, la pregunta interesante es si podemos demostrar que
este programa termina para
todo
valor de n. Hasta ahora, nadie fue capaz de demostrarlo o de
refutarlo!
1.2.
La funcin range()
Esta funcin de Python nos da un rango de valores y es ideal para iterar con la sentencia
for
que veremos a continuacin.
Se puede utilizar con diferente cantidad de parmetros, en su versin completa, toma 3
parmetros, los cuales deben ser siempre enteros, y tiene la siguiente estructura:
range(INICIO, FIN, PASO)
representa un rango entre INICIO hasta FIN (sin incluirlo), con saltos de tamao PASO.
Si se omite el parmetro PASO, su valor por defecto es 1. Si se omiten los parmetros INICIO
y PASO, range asume que INICIO es 0 y PASO es 1.
Por ejemplo:
range(0, 10, 1)
representa el rango que incluye a los valores: 0, 1, 2, 3, 4, 5, 6, 7, 8 y 9.
range(4, 12, 2)
representa el rango que incluye a los valores: 4, 6, 8 y 10.
range(5)
representa el rango que incluye a los valores: 0, 1, 2, 3 y 4.
range(-2, 2)
representa el rango que incluye a los valores: -2, -1, 0 y 1.
En caso de que usemos un PASO negativo, el rango ser decreciente, es decir, de mayor a
menor.
Ejemplo:
range(10, 1, -1)
representa el rango que incluye a los valores: 10, 9, 8, 7, 6, 5, 4, 3 y 2.
Pgina 2 de 11
1er
Introduccin a la Programacin
1.3.
semestre de 2012
Ciclos for (para)
Los ciclos que hemos escrito hasta ahora tienen una cierta cantidad de elementos en comn.
Todos ellos comienzan inicializando una variable; tienen una condicin, o test, que depende de
esa variable; y dentro del ciclo hacen algo con esa variable, como incrementarla.
Otra forma de escribir ciclos de forma ms concisa es utilizando la sentencia
for
(para).
for VARIABLE in CONJUNTO:
CUERPO
Por ejemplo, si quisieramos hacer un programa que cuente desde 1 hasta 100 con un
for:
for i in range(1,101):
print(i)
esto se lee: Para i desde 1 hasta 101, mostrar i.
range() para obtener un conjunto de valores.
i se la denomina variable de control y no es necesario que le asignemos
Aqu usamos a la funcin
En este caso, la variable
los valores del rango. Estos valores se le van asignando automticamente en cada iteracin.
Como cualquier otra sentencia
con una sentencia
for.
while, la cuenta regresiva que hicimos antes se puede escribir
Esta se vera de la siguiente manera:
n = int(input("Ingrese un numero mayor a cero"))
for i in range(n,0,-1):
print(i)
print("Despegue!")
Este programa produce el mismo resultado que su versin con la sentencia
bargo, veamos que en este caso no es necesario re-asignar la variable
1.4.
while.
Sin em-
en cada iteracin.
Acumuladores
Los acumuladores son variables que suelen utilizarse en los ciclos para ir guardando el resultado parcial de algn clculo.
Por ejemplo, si quisieramos hacer un programa que calcule la suma de los primeros
naturales, podramos hacerlo de la siguiente manera con una sentencia
for:
n nmeros
n = int(input("Ingrese un numero natural"))
suma = 0;
for i in range(1,n):
suma = suma + i
print("La suma de los primeros", n ,"numeros naturales es", suma)
En este caso, la variable
suma
es inicializada en 0 y en cada iteracin se le va asignando
su valor calculado hasta el momento ms el valor de la variable
variable
nombre
2.
suma acumula
de acumulador
i.
Debera quedar claro que la
el resultado de la suma realizada hasta el momento y por eso lleva el
Cadenas
Hasta ahora hemos dicho que las cadenas sirven para guardar texto en variables. Cualquier
cosa que escribamos entre comillas es una cadena. Algo que no dijimos es que las cadenas estn
hechas de piezas ms pequeas: los caracteres. Un caracter es simplemente una letra o smbolo.
Pgina 3 de 11
1er
Introduccin a la Programacin
2.1.
semestre de 2012
Longitud
La funcin
len
devuelve la cantidad de caracteres de una cadena. Por ejemplo:
fruta = "banana"
longitud = len(fruta)
print(longitud)
Esto muestra un 6.
2.2.
Recorrido
Algo comn para hacer con una cadena es comenzar desde el principio, seleccionar cada
caracter por vez, hacer algo con l, y continuar hasta el n. Este patrn de procesamiento se
llama
recorrido. Una forma natural de codicar un recorrido es mediante una sentencia for:
for char in fruta:
print(char)
Este ciclo recorre la cadena e imprime cada letra en lneas separadas. Cada vez que recorremos
el ciclo, se asigna a la variable
char
el siguiente caracter de la cadena. El bucle contina hasta
que no quedan ms caracteres.
Como ejercicio, escrib un programa que tome una cadena como parmetro y que imprima
solo las consonantes de la cadena, en lneas separadas.
Pgina 4 de 11
1er
Introduccin a la Programacin
semestre de 2012
Notas preliminares
Los ejercicios marcados con el smbolo
constituyen un subconjunto mnimo
de ejercitacin. Sin embargo, aconsejamos fuertemente hacer todos los ejercicios.
Los ejercicios marcados con el smbolo
presentan una mayor dicultad que el
resto.
Parte 1 Programas que muestran nmeros
Ejercicio 1 F
a) Hacer un programa que muestre, mediante un ciclo, los primeros 5 nmeros naturales
(1, 2, 3, 4
5).
b) Hacer un programa que permita al usuario elegir un nmero
primeros
nmeros naturales
y luego muestre los
(1, 2, , n).
Ejercicio 2 F
a) Hacer un programa que muestre, mediante un ciclo, los nmeros desde el 4 hasta el
7
(4, 5, 6
7).
m y un n y luego
n (m, m + 1, m + 2, , n 1, n). Qu pasa
b) Hacer un programa que permita al usuario elegir un nmero
muestre todos los naturales entre
si
es menor que
m?
Ejercicio 3 F
a) Hacer un programa que muestre, mediante un ciclo, los 5 nmeros naturales que le
siguen al 10
(11, 12, , 15).
n y luego muestre los
n (n + 1, n + 2, , n + 5).
Hacer un programa que permita al usuario elegir un nmero n y un nmero c, y
luego muestre los c nmeros naturales que le siguen a n (n + 1, n + 2, , n + c).
b) Hacer un programa que permita al usuario elegir un nmero
5 nmeros naturales que le siguen a
c)
Ejercicio 4 F
a) Hacer un programa que muestre, mediante un ciclo, los nmeros desde el 5 hasta el
11 salteando de a 2 elementos
(5, 7, 9
11)
b) Hacer un programa que permita al usuario elegir un nmero
muestre todos los naturales entre
n,
y un
y luego
pero salteando de a 3. Por ejemplo, si el
usuario ingresara un n igual a 2 y un m igual a 14, el programa deber mostrar
2, 5, 8, 11, 14.
c) Hacer un programa que permita al usuario elegir un nmero
luego muestre todos los naturales entre
n,
n,
pero salteando de a
un
y un
nmeros. Por
ejemplo, si el usuario ingresara un n igual a 2 y un m igual a 14, y un p igual a 4,
el programa deber mostrar
2, 6, 10, 14.
Pgina 5 de 11
1er
Introduccin a la Programacin
semestre de 2012
Ejercicio 5 F
a) Hacer un programa que muestre, mediante un ciclo, los nmeros desde el 8 hasta el
3
(8, 7, 6, 5, 4, 3).
Ejercicio 6 F
a) Hacer un programa que muestre, mediante un ciclo, los nmeros desde el 15 hasta
el 6 pero salteando de a tres
(15, 12, 9, 6).
Ejercicio 7 F
Hacer todos los ejercicios anteriores de nuevo, pero esta vez utilizando la sentencia
lugar de
for. De haberlos hecho con while, rehacerlos utilizando for.
while en
Ejercicio 8
a) Hacer un programa que reciba un nmero
menores a
n.
y muestre todas las potencias de 2
20,
Por ejemplo, si el usuario ingresa
el programa mostrar: 1 2 4 8
16. Ayuda: pensar primero si sera ms prctico utilizar la sentencia
while o for.
n (n > 0) y muestre las n primeras
ingresa 6, el programa mostrar: 1 2 4 8
b) Hacer un programa que reciba un nmero
potencias de 2. Por ejemplo, si el usuario
16 32.
c) Hacer un programa que reciba un nmero
n. Por ejemplo,
1 2 3 4
decir, 1 2 3 4 .
potencias de
256.
Es
n (n > 0) y muestre las n primeras
4, el programa mostrar: 1 4 27
si el usuario ingresa
Ejercicio 9
a) Hacer un programa que permita al usuario elegir un nmero positivo
muestre en pantalla todos los divisores de
b) Hacer un programa que permita al usuario elegir un nmero positivo
c) Hacer un programa que permita al usuario elegir un nmero positivo
muestre en pantalla la cantidad de divisores de
muestre en pantalla la suma de los divisores de
divisores de
y luego
y luego
divisores de
c y n y luego
n.
f ) Hacer un programa que permita al usuario elegir dos nmeros positivos
y luego
n.
e) Hacer un programa que permita al usuario elegir dos nmeros positivos
muestre en pantalla los ltimos
n.
d) Hacer un programa que permita al usuario elegir un nmero positivo
y luego
n.
muestre en pantalla todos los divisores pares de
muestre en pantalla los primeros
n.
n.
Pgina 6 de 11
c y n y luego
1er
Introduccin a la Programacin
semestre de 2012
Ejercicio 10
a) Hacer un programa que permita al usuario elegir un nmero positivo
muestre en pantalla los
primeros trminos de la sucesin
an = 2n.
y luego
Es decir
2, 4,
6...
b) Idem anterior para la sucesin
c) Idem anterior para la sucesin
d) Idem anterior para la sucesin
e) Idem anterior para la sucesin
an
an
an
an
= 2n 1.
= n2 .
= n3 n2 .
= n12 .
Ejercicio 11
n y luego
muestre en pantalla las n primeras sumas parciales de la sucesin an = 2n. Es decir,
2 6 12 20...
2
Idem anterior para la sucesin an = n .
3
2
Idem anterior para la sucesin an = n n .
1
Idem anterior para la sucesin an = 2 .
n
a) Hacer un programa que permita al usuario elegir un nmero positivo
b)
c)
d)
Ejercicio 12
n y luego
n primeras sumas parciales de la sucesin an = 2n. Es decir,
a) Hacer un programa que permita al usuario elegir un nmero positivo
muestre en pantalla las
2 6 12 20...
b) Idem anterior para la sucesin
c) Idem anterior para la sucesin
d) Idem anterior para la sucesin
an = n2 .
an = n3 n2 .
an = n12 .
e) A qu valor se va a cercando la suma del inciso anterior a medida que utilizamos
un valor alto de
n?
Ejercicio 13 F
El logaritmo natural de
2 (ln 2)
se puede aproximar de la siguiente manera:
ln 2 = 1
1 1 1 1
+ + ...
2 3 4 5
Escribir un programa que le pregunte al usuario la cantidad de trminos a sumar y que muestre
la aproximacin de
ln 2
con esa cantidad de trminos.
a) A partir de cuntos trminos el valor alcanzado est a menos de 0.1 del valor que
da la calculadora?
b) A partir de cuntos trminos el valor alcanzado est a menos de 0.01 del valor que
da la calculadora?
c) Modicar el programa para que en lugar de pedir la cantidad de trminos a sumar,
pida al usuario un nmero decimal
y calcule la suma hasta que el valor actual
menos el valor con un trmino ms sea menor que
Pgina 7 de 11
||
1er
Introduccin a la Programacin
semestre de 2012
Ejercicio 14 F
El nmero
se puede aproximar de la siguiente manera:
1
1 1 1 1
1
1
1
=1 + +
+
4
3 5 7 9 11 13 15
Escribir un programa que le pregunte al usuario la cantidad de trminos a sumar y que muestre
la aproximacin de
con esa cantidad de trminos.
a) A partir de cuntos trminos el valor alcanzado est a menos de 0.1 del valor que
da la calculadora?
b) A partir de cuntos trminos el valor alcanzado est a menos de 0.01 del valor que
da la calculadora?
c) Modicar el programa para que en lugar de pedir la cantidad de trminos a sumar,
pida al usuario un nmero decimal
y calcule la suma hasta que el valor actual
menos el valor con un trmino ms sea menor que
||
Ejercicio 15 F
Escribir un programa que solicite al usuario un nmero positivo y aproxime el valor del nmero
de la siguiente manera: (ejemplo para 7 trminos)
1
1
1
1
1
1
1
+ + + + + +
0! 1! 2! 3! 4! 5! 6!
a) A partir de cuntos trminos el valor alcanzado est a menos de 0.1 del valor que
da la calculadora?
b) A partir de cuntos trminos el valor alcanzado est a menos de 0.01 del valor que
da la calculadora?
c) Modicar el programa para que en lugar de pedir la cantidad de trminos a sumar,
pida al usuario un nmero decimal
y calcule la suma hasta que el valor actual
menos el valor con un trmino ms sea menor que
||
Ejercicio 16
Hacer un programa que permita al usuario elegir un nmero positivo
pantalla el producto (es decir, la multiplicacin) de los numeros entre
n y
n.
luego muestre en
Ejercicio 17
Hacer un programa que reciba un nmero m y determine el primer n para el cual la suma
1+2+...+n > m. Por ejemplo, si el usuario ingresa 11 se deber retornar 5 ya que 1+2+3+4 =
10 < 11 y 1 + 2 + 3 + 4 + 5 = 15 > 11
Pgina 8 de 11
1er
Introduccin a la Programacin
semestre de 2012
Ejercicio 18
m y un n y muestre
(m, n)(m + 1, n 1)(m + 2, n 2) . . . (n
ingresa 5 y 10, 5 ser el complementario de
a) Hacer un programa que permita al usuario elegir un nmero
pares de numeros complementarios, o sea
1, m + 1)(n, m). Por ejemplo, el usuario
10, 6 el de 9 y 7 el de 8, y deber mostrarse:
5 10
6 9
7 8
8 7
9 6
10 5
b) dem anterior pero deber frenarse cuando el lado izquierdo pase a ser ms grande
que el derecho.
Ejercicio 19 F
a) Escribir un programa que permita al usuario elegir un nmero
y un
y muestre
todos los pares de numeros que se pueden formar con los nmeros que estn entre
ellos. Por ej. si el usuario ingresara 4 y 6, el programa deber mostrar
4
4
4
5
5
5
6
6
6
4
5
6
4
5
6
4
5
6
b) Cambiar el programa para que use slo un ciclo en vez de dos.
Ejercicio 20
a) Escribir un programa que permita al usuario elegir un nmero
y un
y muestre
todos los pares de numeros que se pueden formar con los nmeros que estn entre
ellos, pero esta vez que lo haga sin repetir inversos. Por ej. si el usuario ingresara 4
y 6, el programa deber mostrar
4
4
4
5
5
6
4
5
6
5
6
6
b) Cambiar el programa para que use slo un ciclo en vez de dos.
Pgina 9 de 11
1er
Introduccin a la Programacin
semestre de 2012
Ejercicio 21 F
Hacer un programa que permita al usuario jugar al piedra, papel o tijera contra la computadora. Se debe jugar al mejor de 5, es decir, si uno de los participantes consigue 3 victorias el
juego termina.
Parte 2 Cadenas
Ejercicio 22 F
a) Escribir un programa que pida al usuario un nmero
asteriscos. Ejemplo, para
n = 8,
y muestre una lnea de
el programa deber mostrar:
********
n y muestre n lneas de
n = 5, el programa deber
b) Escribir un programa que pida al usuario un nmero
1, 2, 3, ...n
asteriscos respectivamente. Ejemplo, para
mostrar:
*
**
***
****
*****
c) Escribir un programa que pida al usuario un nmero
asteriscos respectivamente. Ejemplo, para
n = 5,
n y muestre n lneas de 2n 1
el programa deber mostrar:
*
***
*****
*******
*********
Ejercicio 23 F
a) Sabiendo que la pantalla de la consola tiene 80 caracteres de ancho, hacer una
programa que, dada una palabra, la escriba en el centro de la pantalla.
b) Hacer una programa que, dada una palabra, la escriba pegada a la derecha de la
pantalla.
Ejercicio 24 F
Hacer una programa que, dada una palabra, la escriba recuadrada por asteriscos. Por ejemplo,
si la palabra es "Ganaste", el programa debera escribir:
***********
* Ganaste *
***********
Pgina 10 de 11
1er
Introduccin a la Programacin
semestre de 2012
Ejercicio 25
Hacer un programa que dada una palabra y una letra, imprima la cantidad de apariciones de
esa letra.
Ejercicio 26
Escribir un programa que pida al usuario dos cadenas e imprima la menor en orden alfabtico,
o son iguales si corresponde. Ayuda: probar si funciona el operador
Pgina 11 de 11
<
para cadenas.