Informática I Sesión 14: Python (5) – Aplicaciones
Informática ISesión 14: Python (5) – Aplicaciones
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
AGENDAAGENDA
1 Repaso
2 Enumeración exhaustiva
3 Soluciones Aproximadas
1 Repaso
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Estructuras de ControlEstructuras de Control Las estructuras de control, son aquellas que
permiten controlar el flujo de ejecución de un programa
• Tres tipos de Estructuras:
1• Secuencial
2• Instrucción condicional.
3• Iteración (bucle de instrucciones)
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Salida de datosSalida de datos Salida de datos:
Escribir: Para mostrar información en la pantalla en Diagramas de flujo utilizábamos:
Ahora en Python reemplazaremos dicha estructura por la función print:
El mensaje posee la siguiente sintaxis diferentes formatos de salida
Mensaje
print (“mensaje”, variables);
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Descripción: Permite ingresar los datos mediante el teclado. Sintaxis:
• vble: es la variable que se le asignará un valor por teclado.• tipo: se debe indicar el tipo de dato que deseamos recibir:
– int: entero– float: real– bool: booleano– Sin tipo: cadena
• Mensaje: El mensaje es opcional, y es el texto que se mostraría antes de ingresar la variable.
vble = tipo(input(“mensaje”))
Entrada de datosEntrada de datos
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
DecisiónDecisión
if (condicion): Instrucciones1else: Instrucciones2
if (condicion1): Instrucciones1elif (condicion2): Instrucciones2elif (condicion3): Instrucciones3
.
.
.elif (condicionN): InstruccionesNelse: InstruccionesE
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Realiza un conjunto de operaciones mientras una condición se esté cumpliendo, o mientras una expresión sea verdadera
1• Se evalúa la condición-bucle
2
• Si condición-bucle es verdadera :• Se ejecuta el cuerpo del bucle• Vuelve el control al paso 1.
3
• Si condición-bucle es falsa :• Se termina el ciclo.
*
• Condiciones:• Cuantitativas y Caulitativas
Sentencia whileSentencia while
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
while (condición):Instrucciones
Python
SintaxisSintaxis
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
SENTENCIA FOR
Realiza un conjunto de operaciones un determinado número de veces
1• Se inicializa la variable de control y se
evalúa la condición-bucle
2
• Si condición es verdadera :• Se ejecuta el cuerpo del bucle• Se incrementa la variable y se evalúa la condición
3• Si condición-bucle es falsa :
• Se termina el ciclo.
*• Condiciones:
• Cuantitativas
Sentencia forSentencia for
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
SENTENCIA FOR
#de 1 en 1 desde inicio hasta fin-1for vble in range (inicio,fin):
instrucciones
Python
SintaxisSintaxis
#de 1 en 1 desde 0 hasta fin-1for vble in range (fin):
instrucciones
#valores fijosfor vble in (valor1,valor2,…valorN):
instrucciones
#de paso en paso desde inicio hasta fin-1for vble in range (inicio,fin,paso):
instrucciones
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
While: El uso más frecuente es cuando la repetición no está controlada por contador; la condición precede a cada repetición del bucle.
For: Bucle de conteo, cuando el número de repeticiones se conoce por anticipado y puede ser controlado por un contador; la evaluación de la condición precede a la ejecución del cuerpo del bucle.
RecomendacionesRecomendaciones
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
AGENDAAGENDA
1 Repaso
2 Enumeración exhaustiva
3 Soluciones Aproximadas
2 Enumeración exhaustiva
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Enumeración exhaustivaEnumeración exhaustiva El siguiente programa calcula la raíz cúbica de un
entero, si la tiene.
13
enumeración exhaustiva
n = int(input('Enter an integer number: ')) cube = 0 while cube**3 < abs(n):
cube = cube + 1 if cube**3 != abs(n):
print(n, 'is not a perfect cube') else:
if n < 0: cube = -cube
print('Cube root of', n, 'is', cube)
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Enumeración exhaustivaEnumeración exhaustiva
Los ciclos for nos permiten expresar de una forma más simple, por ejemplo, ciclos que iteran sobre una secuencia de enteros.
14
n = int(input('Enter an integer number: ')) for cube in range(0, abs(n)+1):
if cube **3 >= abs(n): break
if cube**3 != abs(n): print(n, 'is not a perfect cube')
else: if n < 0:
cube = -cube print('Cube root of', n, 'is',
cube)
cube = 0 while cube**3 < abs(n):
cube = cube +1
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
AGENDAAGENDA
1 Repaso
2 Enumeración exhaustiva
3 Soluciones Aproximadas3 Soluciones Aproximadas
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Soluciones AproximadasSoluciones Aproximadas
Calcular una aproximación de la raíz cuadrada de un número positivo:
16
#Find an approximation of the square root x = 25 epsilon = 0.01 step = epsilon**2 guesses = 0 ans = 0.0 while abs(ans**2 - x) >= epsilon and ans <= x:
ans += step guesses += 1
if abs(ans**2 - x) >= epsilon: print('Couldn\'t find the square root of', x)
else: print(ans, 'is approximately the square root of', x)
print('There were', guesses, 'guesses')
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Método de bisecciónMétodo de bisección
Para este problema, mejor que la enumeración exhaustiva es la búsqueda binaria.
17
x0 medio
xbajo alto
medio
x0 altobajo medio
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Método de bisecciónMétodo de bisección
18
#Find a FASTER approximation of the square root x = 25 epsilon = 0.01 step = epsilon**2 guesses = 0 low = 0.0 high = max(1.0, x) ans = (high + low)/2.0 while abs(ans**2 - x) >= epsilon:
guesses += 1 if ans**2 < x:
low = ans else:
high = ans ans = (high + low)/2.0
print(ans, 'is approximately the square root of', x) print('There were', guesses, 'guesses')
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Método Newton-RaphsonMétodo Newton-Raphson
19
𝒈−(𝒈𝟐−𝒌) /𝟐𝒈
Si es una aproximación a una raíz de un polinomio , entonces:
𝒈− 𝒇 (𝒈 )/ 𝒇 ′ (𝒈 )
donde es la derivada de ,es una mejor aproximación.
Dado que las raíces del polinomio nos permiten obtener la raíz cuadrada de , tenemos que la fórmula para mejorar una aproximación a la raíz cuadrada de sería:
donde es la derivada de .
2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Informática I Universidad de Antioquia
Método Newton-Raphson Método Newton-Raphson
20
#Using Newton-Raphson to find the square root epsilon = 0.01 k = 24.0 root = k/2.0 guesses = 0 while abs(root**2 - k) >= epsilon:
root = root - (root**2 - k)/(2*root) guesses += 1 print(root, 'is close to the square root of', k) print('There were', guesses, 'guesses')