La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

U8 Repetición controlada por expresión lógica y cadenas 1 Flexibilidad.

Presentaciones similares


Presentación del tema: "U8 Repetición controlada por expresión lógica y cadenas 1 Flexibilidad."— Transcripción de la presentación:

1 U8 Repetición controlada por expresión lógica y cadenas 1 Flexibilidad

2 Datos problema simple enteroreal carácter booleano Ingeniero = Oreja+catalejo modelo ordenador solución asignación/ referencia Llamada procedimiento while for Do while if c: bloque1 [ else: bloque2] n bucles 0 o 1 alternativas 1 o n 0 o n iterativo n conocido recursivo n desconocido case gestión excepciones Subprogramación procedimiento barajar complejidad Proceso hacer función 2 Disponible en todos los lenguajes Frecuente en otros lenguajes y no disponible en Python Disponible en Python, no frecuente en otros lenguajes compuesto arreglo Lista/tupla Estructura tuplaNombre /record/clase fichero cadena 1 secuencias

3 Repetición controlada por expresión lógica Sintaxis : while expresion_booleana: cuerpo n = 10 while n<=10: print (n) n = n-1 (1674) Gregory algoritmo: la raíz cuadrada de un número n>=0, mientras ABS(aprox-nuevaAprox) >=precision nuevaAprox=(aprox+n/aprox)/2 ab Integral de x2, entre 1 y 2, paso= 0,01 Problema? Estudio de la convergencia: Casos posibles vieja>r; vieja<r; vieja=r Ojo comparación de floats r

4 4 raizNewtonRapson.py 1 """probador del cálculo de la raiz cuadrada de n iterativo """ 2 3 def sqrtNR(n, precision): 4 """ num,float-->float 5 OBJ: raiz cuadrada de n, con precisión >= precision 6 PRE: n>0, 0<precision<=n """ 7 aprox = n/2.0 #me vale cualquier positivo 8 cambio = n # como mínimo su propio valor 9 while cambio>=precision: 10 nAprox = (aprox+n/aprox)/2.0 11 cambio = abs(aprox-nAprox) 12 aprox = nAprox 13 print( 'traza', aprox) #trazador. Quitar 14 return aprox 15 16 print('raiz =', sqrtNR(9,0.1)) traza 3.25 traza 3.0096153846153846 traza 3.000015360039322 raíz =3.000015360039322

5 5 integralX2_v1.py 1 """ Probador de integral X2 entre a y b """ 2 3 def integralX2(a,b,inc): 4 """ float,float,float  float 5 OBJ: integral definida entre a y b, en inc incrementos: 6 método de los rectángulos 7 PRE: a<=b, 0<inc<= b-a """ 8 i = 0 # acumulador de integral 9 x = a # valor de la abcisa 10 while x!=< b: 11 i = i+x*x*inc # acumula el área de un rectángulo 12 x = x+inc 13 print(x, i) 14 return i 15 16 print(integralX2(1.0,2.0,0.1))

6 Esquemas de programación Bucle con condición múltiple y discriminación a la salida Pos de primera aparición de elemento en una lista (si es que está) El esquema centinela 6

7 Bucles (1- n) OpciónCódigo ejemplo (en bucle1_n.py) #1 repetir cuerpo del bucle e= input('Introduce inicial de nombre de estación del año: ') while e.lower() not in ('p', 'v', 'o','i'): e = input('Introduce inicial de nombre de estación del año: ') #2 Sub- programar cuerpo del bucle def estacionPedida (): e = input('Introduce inicial de nombre de estación del año: ') error = e.lower() not in ('p', 'v', 'o','i') if error: print( e, 'no es el nombre de una estación del año') print('vuelve a intentarlo.') return error,e error,e = estacionPedida () while error: error,e = estacionPedida () print('hecho') #3 forzado artificial de entrada pedir = True while pedir: e = input('Introduce inicial de nombre de estación del año: ') pedir = e.lower() not in ('p', 'v', 'o','i') if pedir: print( e, 'no es el nombre de una estación del año') print('vuelve a intentarlo.') print('hecho') 7 Cuerpo 1 vez Cuerpo 0-n def subprograma Pedir mejor que error

8 Bucles (1- n) 8 condicion= False while True: if condicion: break print('hacer lo que sea') condicion = True print('me sali') condicion= False while not condicion: print('hacer lo que sea') condicion = True print('me sali') DA TERROR Y era INNECESARIO

9 Esquema pedir datos al usuario 9 def esCosa (cosa): """tipo de cosa --> booleano OBJ: True si es "cosa" valida """ return cosa cumple condicionParaSerCosa? def cosaPedida (): #restricciones si las hay + msg solicitud """str --> tipo de cosa OBJ: pide cosa hasta que cumpla restricciones del mundo real""" cosa = noEsCosa while not esCosa(cosa): cosa = input('dame una cosa:') return cosa lectivos=('lunes','martes','miércoles','jueves','viernes') def esLectivo(dia): """str-->bool OBJ: True si dia es lectivo PRE: lectivos definido """ return dia in lectivos def lectivoPedido(msg): """str-->str OBJ: solicita al usuario dia hasta que sea un lectivo """ dia='' while not esLectivo(dia): dia=input(msg) return dia print(lectivoPedido('¿que lectivo?: ')) Cosa= DNI Contraseña Fecha Color Hora Entero,…. Si esCosa es simple se puede no subprogramar Si esCosa es trivial no subprogramar

10 Esquema pedir datos al usuario 10 def enteroPedido (min,max, msg): """ int,int, str,str-->int OBJ: pide entero a usuario, entre min y max, mostrando msg PRE: min<=max """ pedir = True while pedir or not (min<=n<=max): try: n = int(input(msg)) pedir = False except:print('debe ser un entero. ', end='') return n Pedir un entero es tan genérico que no he querido poner un número no válido. min-1 o max+1 valdrían (podría desbordar)

11 Esquema menú 11 Desarrolla la aplicación de combinatoria que ofrece un menú en el que el usuario selecciona la operación a ejecutar. Le pide los datos que necesite y le muestra el resultado. La interfaz de usuario deseada es: COMBINATORIA ============== 1.-Variaciones 2.-Combinaciones 3.-Permutaciones 4.- Salir Teclee la opción elegida: __ Recordatorio: V(m,n)=m!/(m-n)!; P(n)=n!; C(m,n)=V(m,n)/P(n); n,m>=0. combinatoria variaciones pintaMenu salida CentrarRotulo enteroPedido combinaciones permutaciones factorial

12 Combinatoria 12 pintaMenu() opcion = enteroPedido(1,4,'') if opcion==1: m = enteroPedido(1,20,'elementos totales: ','') n = enteroPedido(1,m,'elementos a agrupar: ','') print('variaciones',m,'de', n,'=', libMat.variaciones(m,n)) elif opcion==2: m = enteroPedido(1,20,'elementos totales: ','') n = enteroPedido(1,m,'elementos a agrupar: ','') print('combinaciones',m,'de', n,'=', libMat.combinaciones(m,n)) elif opcion==3: m = enteroPedido(1,20,'elementos totales: ','') print('permutaciones', m,'=',libMat.permutaciones(m)) elif print('cerrando la aplicación') Un condicional está diseñado para hacer cosas distintas en cada pata… sacad factor común

13 Cadenas: Creación general, vacía, unitaria Acceso a elementos: a[0..n-1]; hacia atrás a[-n..-1]; aborto i>=n, operador slice Operaciones: concatenar; is, comparación, in Funciones: len, min, max Métodos: s.index(x,[i,j]), s.count(x) help(str) 13 MétodoDevuelve una… s.upper()copia de s con todas las letras en mayúsculas s.lower()copia de s con todas las letras en minúsculas s.replace(old, new[, count]) copia de s con las count ocurrencias primeras de old sustituidas por new. Todas si no especificado s.strip([chars=˽])copia de s eliminados los caracteres char de cabecera y cola. Por defecto, espacio blanco ‘˽’ s.swapcase()copia de s intercambiando minúsculas y mayúsculas s.title()copia de s con primera letra de cada palabra en mayúscula y resto en minúscula s.rsplit(sep=None)lista de palabras en s, considerando sep como separador común a tulas, listas

14 U6 NumPy para implementar array en Python Además de tuplas, listas ¿por qué? Interpretado/compilado 14

15 U9 Estructuras: Agrupación de elementos de distinto tipo 15 Barajar complejidad

16 Datos problema simple enteroreal carácter booleano Ingeniero = Oreja+catalejo modelo ordenador solución asignación/ referencia Llamada procedimiento while for Do while if c: bloque1 [ else: bloque2] n bucles 0 o 1 alternativas 1 o n 0 o n iterativo n conocido recursivo n desconocido case gestión excepciones Subprogramación procedimiento barajar complejidad Proceso hacer función 16 Disponible en todos los lenguajes Frecuente en otros lenguajes y no disponible en Python Disponible en Python, no frecuente en otros lenguajes compuesto arreglo Lista/tupla Estructura tuplaNombre /record/clase fichero cadena 1 secuencias

17 STRUCT/STRUCTURE/RECORD Elementos todos del mismo tipo  acceso por orden: ARRAY ¿sin orden?  acceso por nombre: Tipos definidos por el usuario: Constructores de tipo. Listas y tuplas son tipos en Python. Pero ahora tengo que dar nombres. Necesito un constructor Alternativas en Python  namedTuple, la clase Record, “clases pobres” Nuestro interés diseño de la solución más que la forma de implementación en un lenguaje concreto 17

18 NamedTuples from collections import namedtuple La sintaxis de la declaración: nombreDelTipo= namedtuple(externo, [campo 1,…,campo n ]) Ejemplo: tPunto = namedtuple('Punto',['x','y']) Creación objeto y acceso a elementos : namedtuple especialización de tipo tupla ( vale todo lo que hacía con tuplas ) Convenio: Tipos creados x programador empiezan por t: tFecha, tAlumno 18 >>> p1 = tPunto(2.0,3.0) >>> p1.x #acceso notación punto 2.0 >>>p1[1] #acceso por posición 3.0

19 Recorrido de los elementos Modificación de elementos : Los elementos pueden ser de cualquier tipo 19 >>> p = tPunto(11.0,22.0) >>> p = tPunto(p.x,33.0) #mantengo el valor de x, cambio el de y >>> p Punto(x=11.0, y=33.0) >>>p = tPunto(33.0,44.0) >>>p = p._replace(x=2.0,y=3.0) # devuelve copia con valores cambiados >>>p Punto(x=2.0, y=3.0) NamedTuples for coordenada in p: print(coordenada) tSegmento = namedtuple('Segmento','pIni, pFin')

20 20 Haz un subprograma que calcule la distancia entre dos puntos. Calcula con el tamaño de un segmento pasándole los puntos que lo definen. En el lenguaje ordinario hablamos del tamaño de un segmento, no de la distancia entre sus extremos. Haz un subprograma que calcule el tamaño de un segmento. Apoyándote en el módulo punto, haz un programa que aproxime Π por el m étodo de Montecarlo, areaArco=Πr 2 /4 areaCuadrado=r*r puntos dentro/puntos totales= Πr2/4r2 ; despejando Π=4 *puntos dentro/puntos totales Incluye en el módulo punto una función que calcule si un punto (x,y) está inscrito en una circunferencia de radio r, con centro en el eje de coordenadas. Pista: teorema de Pitágoras. def puntoAleatorio(): """ nada --> tPunto OBJ: crea un punto aleatorio 0<=x,y<=1 """ from random import random x = random() y = random() return tPunto(x,y)

21 21


Descargar ppt "U8 Repetición controlada por expresión lógica y cadenas 1 Flexibilidad."

Presentaciones similares


Anuncios Google