Concepto de Repetición
...continuación
Recordatorio
while condición:acción_1acción_2acción_3...
Recordatorio
acción_1acción_2acción_3
.
.
condición = true
condición = false
While
Ejercicio 1● Realice la función que calcula la siguiente
operación:– XY
Respuesta
def XelevadoY(x, y):r = 1while y > 0:
r = x * ry = y – 1
return r
Ejercicio 2● Realice una función que dice si un número
es primo o no.
Ejercicio 2● Un número primo es aquel que sólamente es
divisible por la unidad(1) y él mismo.
Ejercicio 2● ¿Cómo sabemos si un número a es divisible
por un número b– a % b = 0 → a es divisible por b– a % b ≠0 → a no es divisible por b
● Ej:– 4%2 = 0– 5%3 = 2– 100%4 = 0
Respuesta
def Primo(x):c = 2while c < x:
if x % c == 0:return False
c = c + 1return True
Ejercicio 2(extensión)● Calcule e imprima todos los número primos
del 1 al 100
Respuesta
def NumeroPrimos():c = 1while c <= 100:
if Primo(c):print c
c = c + 1
Ejercicio 3● Calcule el número е
Ejercicio 3
e=111!
12!
13!
14!
...1∞!
Respuesta
def e():e = 1.0c = 1while c <= ∞:
e = e + 1.0 / factorial(c)c = c + 1
return e
Respuesta
def e(n):e = 1.0c = 1while c <= n:
e = e + 1.0 / factorial(c)c = c + 1
return e
Ejercicio 3(extensión)● Calcule еx
Ejercicio 3(extensión)
e=1 x1
1!x2
2!x3
3!x4
4!... x∞
∞!
Respuesta
def ex(x, n):e = 1.0c = 1while c <= n:
e = e + XelevadoY(x, c) / factorial(c)c = c + 1
return e
Ejercicio 4● Realice una función que diga si un número
es un número perfecto o no.
Ejercicio 4● Un número perfecto es un número, donde
todos sus divisores sumados excepto él mismo, dan el número.– Ej:
● 6: 1+2+3 = 6● 28: 1+2+4+7+14 = 28● 496: 1+2+4+8+16+31+62+124+248
Respuestadef NumeroPerfecto(n):
c = 1s = 0while c < n:
if n % c == 0:s = s + c
c = c + 1if s == n:
return Trueelse:
return False
Ejercicio 5(Mundo)● Realice el programa que rodea el mundo
infinítamente.● La posición de la ardilla es aleatoria pero
siempre estará pegada al mundo.
Ejercicio 5(Mundo)
Respuesta
def MirarSinPared():while hasWallInFront():
TURNLEFT()
Respuesta
def VueltaMundo():while True:
MirarSinPared()MOVE()TURNRIGHT()
Ejercicio 5(extensión)● Rodee sólo 1 vez el mundo● La ardilla posee 1 grano en el estómago
Respuesta
def UnaVueltaMundo():while not hasFood():
if getMouth() > 0:putFood()
MirarSinPared()MOVE()TURNRIGHT()
Ejercicio 5(extensión)● Rodee el mundo en sentido contrario
Respuesta
def MirarSinPared():while hasWallInFront():
TURNRIGHT()
Respuesta
def VueltaMundo():while True:
MirarSinPared()MOVE()TURNLEFT()
Ejercicio 6(Mundo)● La ardilla tiene una hectárea de cultivo,
coséchela de la siguiente manera:– Si no hay semilla, plante una.– Si hay una semilla, riégela para que se
transforme en una planta.– Si hay una planta, recójala.
Ejercicio 6(Mundo)● Especificaciones:
– 0 semillas = No hay semilla– 1 semilla = Semilla– 2 semillas = Planta
● Las dimensiones de la hectarea son desconocidas
● Usted empieza siempre en la esquina inferior izquierda
Ejercicio 6(Mundo)● Vuelva a la posición inicial después de
cosechar la hectárea.
Ejercicio 6(Mundo)
Estado Inicial
Ejercicio 6(Mundo)
Estado Final
Respuestadef ContarSemillas():
c1 = 0# Cuento cuantas haywhile hasFood():
eat()c1 = c1 + 1
c2 = 0# Devuelvo las semillas contadaswhile c2 != c1:
putFood()c2 = c2 + 1
return c1
Respuesta
def Cosechar():s = ContarSemillas()if s == 0: # Planto una semilla
putFood()if s == 1: # Riego la semilla
putFood()if s == 2: # Recojo la planta
eat()eat()
Respuesta
def CultivarLinea():while not hasWallInFront():
Cosechar()MOVE()
Cosechar() # La última casilla queda faltando por cosechar
Respuestadef PosicionInicial():
# Vuelta 180ºTURNLEFT()TURNLEFT()# Avance hasta el finalwhile not hasWallInFront():
MOVE()# Vuelta 90ºTURNRIGHT()# Avance hasta el finalwhile not hasWallInFront():
MOVE()# Vuelta 180ºTURNLEFT()TURNLEFT()
def CosecharHectarea():Izquierda = True # Indica hacia donde esta la siguiente líneaFinal = False # Indica su estoy en el final de la hectareawhile not Final:
CultivarLinea()# Gira a la siguiente líneaif Izquierda:
TURNLEFT()else:
TURNRIGHT()# Si hay pared es porque estoy al finalif hasWallInFront():
Final = True# Si no, me muevo a la siguiente línea y cambio el sentido de la siguiente líneaelse:
MOVE()if Izquierda:
TURNLEFT()Izquierda = False
else:TURNRIGHT()Izquierda = True
# Vuelvo a la posición inicialPosicionInicial()
Ejercicio 7(Mundo)● Sume 2 números de extensión desconocida
representados por semillas● Cada fila representa un número● Imprima el resultado bajo la sentencia print
Ejercicio 7(Mundo)
Estado Inicial+ 43502 8763
Ejercicio 7(Mundo)
52265
Estado Final
Respuestadef ContarDigito():
c1 = 0# Cuento el dígitowhile hasFood():
eat()c1 = c1 + 1
c2 = 0# Devuelvo la comidawhile c2 != c1:
putFood()c2 = c2 + 1
return c1
Respuesta
def HallarNumero():c = 0 # Unidades, decenas, centenas, etc.n = 0 # Acumulado del número# Cuento todos los dígitos y los transformowhile not hasWallInFront():
n = n + ContarDigito() * 10**cc = c + 1 # Aumento la potencia de 10MOVE()
return n
Respuestadef Sumar():
MOVE()n1 = HallarNumero() # Hallo el primer número# Bajo la ardilla a la siguiente líneaTURNLEFT()MOVE()TURNLEFT()# Devuelvo la ardillawhile not hasWallInFront():
MOVE()# Volteo y pongo la ardilla en posición para leer el númeroTURNLEFT()TURNLEFT()MOVE()n2 = HallarNumero() # Hallo el segundo números = n1 + n2 # Los sumoprint s # Imprimo la suma
Ejercicio 7(extensión)● Escriba la suma en la última línea de igual
manera a como se escribieron los números a sumar
Ejercicio 7(extensión)
Estado Final
Respuesta
def EscribirNumero(n):while n > 0:
putFood()n = n 1
Respuesta
def Sumar2Digitos(r):n1 = ContarDigito() #Primer DigitoTURNLEFT()MOVE()n2 = ContarDigito() # Segundo DigitoMOVE()s = n1 + n2 + r # Sumelos más el residuoEscribirNumero(s % 10) # Unidadesreturn s / 10 # Decenas se acumulan
Respuestadef Sumar2():
r = 0# Sume todos las columnaswhile not hasWallInFront():
MOVE() # Siguiente columnar = Sumar2Digitos(r) # Guardo el residuo para la siguiente columna# Me devuelvoTURNLEFT()TURNLEFT()MOVE()MOVE()TURNLEFT()
# Retorno a la posición inicial TURNLEFT() TURNLEFT() while not hasWallInFront(): MOVE()
Ejercicio 8(Mundo)● La ardilla guarda su comida para el futuro en
huecos● Realice el algoritmo que llena los huecos y el
algortimo que recoge toda la comida
Ejercicio 8(Mundo)
Estado Incial
Ejercicio 8(Mundo)
Estado Final
Respuestadef TrabajarHueco(poner):
c = 0 # Profundidad del huecowhile not hasWallInFront():
MOVE()if poner == True: # Tengo que llenarlo
putFood()else: # Tengo que vaciarlo
eat()c = c + 1
TURNLEFT()TURNLEFT()while c != 0: # Salgo del Hueco
MOVE()c = c 1
Respuestadef LlenarHuecos():
# Tanteo toda la tierra por huecoswhile not hasWallInFront():
MOVE()TURNRIGHT()if not hasWallInFront(): # Encontré un hueco!
TrabajarHueco(True) # Lo trabajo(lleno)TURNRIGHT()
else: # No es un hueco, sigoTURNLEFT()
Ejercicio 8(Mundo)
Estado Incial
Ejercicio 8(Mundo)
Estado Final
Respuestadef VaciarHuecos():
# Tanteo toda la tierra por huecoswhile not hasWallInFront():
MOVE()TURNRIGHT()if not hasWallInFront(): # Encontré un hueco!
TrabajarHueco(False) # Lo trabajo(vace)TURNRIGHT()
else: # No es un hueco, sigoTURNLEFT()