La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Resolución de problemas con Python

Presentaciones similares


Presentación del tema: "Resolución de problemas con Python"— Transcripción de la presentación:

1 Resolución de problemas con Python
Características de software que guían este curso Herramientas Mantenibilidad Legibilidad Semántica (identificadores), documentación, subprogramación, diseño… Reusabilidad Subprogramación, diseño Robustez ≈eficacia Condicionales (Eficiencia) Diseño

2 U4 Condicionales y gestión de excepciones
¡¡¡¡A por la robustez!!!!

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

4 Como seguimos las instrucciones, hoy por hoy

5 Tipo de datos simple {dominio} Objeto dato definido sobre un dominio, y sus operaciones tipo objeto dominio operaciones mes 7 ={1,2,3,4….12} siguiente, anterior, número_días diaSemana martes {lunes,…domingo} siguiente, anterior, ¿laborable? sueldo 1275,43 salarioMinimo<=s<=80.000 +,-,*,%....¿cobrado?... ComponenteColor 145 0<=componenteColor<=255 +,-,maximizar, anular…

6 Asignación versus Referenciación otros lenguajes Python
Implicaciones: Piensa en un “dato compuesto”, por ejemplo, y que se pueda modificar uno de sus componentes sin re-asignar/re-referenciar el “dato compuesto” Asignación: son posiciones independientes no afecta a b 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 8 a [1]=8 b = [1,2,3,4] a =b Referenciación: son 2 nombres para la misma posición b[1]=8 efecto lateral b a =b a 1 2 3 4 a [1]=8 b a 1 8 3 4 b = [1,2,3,4] 1 2 3 4 b Python llama mutables a los TD compuestos, para los que da servicio de modificar elementos individuales, sin re-referenciar el dato completo, les. Los tipos que sólo pueden cambiar su valor con referenciación los llama inmutables 6

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

8 Condicionales M40 R2-Alcalá A2-Alcala Barcelona Roma por Cádiz Roma por Santander Roma por Portugal Gasolinera Santander Cádiz SI condicion: ….ENTONCES SI condicion ENTONCES…. SINO CASO de que ordinal HAZ

9 Condicionales o alternativas 0-1 veces(el cuerpo)
Hasta ahora: instrucciones secuenciales {referenciación + llamada a procedimientos} todas se hacían exactamente una vez Condicionales o alternativas veces(el cuerpo) Diagrama de flujo Sintaxis if expresion_bool: cuerpo1 else: cuerpo2 año esBisiesto? 366 365

10 Diseño de casos de prueba

11 Diseño de casos de prueba
Mayor de dos números, o iguales Prográmalo """********************************************* * PROGRAMA: MayorDe2numeros.py * * OBJ: pide 2 números e indica cual es el mayor, o si son iguales * *********************************************""" a = float(input('primer número: ')) b = float(input('segundo número: ')) if a>b:print ('el primero es mayor', a) else: if b>a: print ('el segundo es mayor',b) else:print ('son iguales:',b)

12 Diseño de casos de prueba
Tipo triángulo a b c Salida 3.0 2.0 4.0 5.0 -2. X 1 1.0 6.0 [1] Probamos sólo un lado, porque en el capítulo siguiente aprenderemos a reusar el código que pide un lado. Si no es así, habrá que probar las tres entradas

13 Eficiencia ¿son manías? Tipo triángulo
Si tu oficio fuera el transporte y existieran dos tipos de carburante, tales que con uno fueras de Madrid a Barcelona en 1 hora y en 8,4 horas con el otro, ¿cuál elegirías? Si tuvieras que contratar a un programador para tu empresa, y de los dos candidatos, uno que programa al estilo de v1 y otro al de la v4 ¿a cuál contratarías?

14 Gestión de excepciones
N=int(imput(‘entero’) ax2+bx +c=0, """********************************************************************* * PROGRAMA: segundoGrado * *OBJ: raíces de ecuación ax**2+bx+c=0, a,b,c introducidos por usuario * *********************************************************************""" from math import sqrt try: a = float(input('a: ')) b = float(input('b: ')) c = float(input('c: ')) r = sqrt(b**2-4*a*c) x1 = (-b+r)/2.0/a x2 = (-b-r)/2.0/a print('x1 =',x1,' x2 = ',x2) except: print('estos datos dan problemas')

15 """**********************************************************************
* PROGRAMA: segundoGrado * *OBJ: raíces de ecuación ax**2+bx+c=0, a,b,c introducidos por usuario * **********************************************************************""" from math import sqrt try: a = float(input('a: ')) b = float(input('b: ')) c = float(input('c: ')) except ValueError: print('los valores han de ser numéricos') else: r = sqrt(b**2-4*a*c) x1 = (-b+r)/2.0/a x2 = (-b-r)/2.0/a print('x1 =',x1,' x2 = ',x2) except ZeroDivisionError: if b!=0: print('ecuación primer grado. x=', -c/b) elif c==0: print ('la ecuación tiene infinitas soluciones') else: print('la ecuación no tiene solución') print('no tiene raíces reales') except: print('estos datos dan problemas')

16 Evitar condicionales anidados
"""********************************************************************* * PROGRAMA: estacion.py * * Obj: estación del año correspondiente dia/mes dados por usuario * * OJO: no comprueba validez de la entrada * *********************************************************************""" def estacion (d,m): """devuelve la estación que corresponde a d/m (dia,mes) * * /03 al 19/06 Primavera * * /06 al 21/09 Verano * * /09 al 20/12 Otoño * * /12 al 19/03 Invierno PRE dia, mes formarían parte de una fecha válida """ plana=mes*100+dia #agrupo para comparar de una vez if plana<=319:estacion = 'invierno' elif plana<=619:estacion = 'primavera' elif plana<=921:estacion = 'verano' elif plana<=1221:estacion = 'otoño' else: estacion = 'invierno' return estacion #Probador dia = int(input('día: ')) mes = int(input('mes: ')) # aqui iría la validación de fecha print ('la estación de',dia,'/',mes,'es', estacion(dia,mes))

17 Bucle definido for e in s: cuerpo
Rage es un generador de secuencias en un rango desde (incluido).. hasta (excluido) """ ************* Tabla de multiplicar del n ****************** """ n = int(input('introduzca el num de la tabla deseada, entre 0 y 10: ')) for i in range(1,10+1): print (n, '*','%2d'%i,'=', i*n)

18 Pendiente de temas anteriores
U1: Errores en tiempo de traducción/ejecución U2: Lenguajes con fuerte control de tipo/sin control U3: REVISAR referenciación/asignación


Descargar ppt "Resolución de problemas con Python"

Presentaciones similares


Anuncios Google