Resolución de problemas con Python 1 Características de software que guían este curso...

18
Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad Legibilidad Semántica (identificadores), documentación, subprogramación,

Transcript of Resolución de problemas con Python 1 Características de software que guían este curso...

Page 1: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

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

Page 2: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

2

U4Condicionales y gestión

de excepciones¡¡¡¡A por la robustez!!!!

Page 3: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

3

Datos

problema

simple

entero realcarácterbooleano

Ingeniero = Oreja+catalejomodelo

orde

nado

r

solución

asignación/referencia

Llamada procedimiento

whilefor Do while

if c: bloque1[ else: bloque2]

n bucles

0 o 1alternativas

1 o n0 o n

iterativo

n conocido

recursivo

n desconocido

case

gestión excepciones

Subprogramación

procedimiento

barajar complejidad

Proceso

hacer

función

Disponible en todos los lenguajesFrecuente en otros lenguajes y no disponible en PythonDisponible en Python, no frecuente en otros lenguajes

compuesto

arregloLista/tupla

EstructuratuplaNombre/record/clase

fichero

cadena

1secuencias

Pregunta 10 del test

Page 4: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

4

Como seguimos las instrucciones, hoy por hoy

Page 5: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

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…

Page 6: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

6

Implicaciones: a) Piensa en un “dato compuesto”, por ejemplo, y que se pueda modificar uno de sus componentes sin

re-asignar/re-referenciar el “dato compuesto”

b

b = [1,2,3,4] 1 2 3 4b

a =b

a

1 2 3 4 a [1]=8

ba

1 8 3 4

b = [1,2,3,4] 1234

1234

a =b1234

1234

1834

a [1]=8

Asignación: son posiciones independientes

no afecta a b

Referenciación: son 2 nombres para la misma posición b[1]=8 efecto lateral

6Python 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

Asignación versus Referenciaciónotros lenguajes Python

Page 7: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

7

Datos

problema

simple

entero realcarácterbooleano

Ingeniero = Oreja+catalejomodelo

orde

nado

r

solución

asignación/referencia

Llamada procedimiento

whilefor Do while

if c: bloque1[ else: bloque2]

n bucles

0 o 1alternativas

1 o n0 o n

iterativo

n conocido

recursivo

n desconocido

case

gestión excepciones

Subprogramación

procedimiento

barajar complejidad

Proceso

hacer

función

Disponible en todos los lenguajesFrecuente en otros lenguajes y no disponible en PythonDisponible en Python, no frecuente en otros lenguajes

compuesto

arregloLista/tupla

EstructuratuplaNombre/record/clase

fichero

cadena

1secuencias

Page 8: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

8

Condicionales

Barcelona

Roma por Cádiz

Roma por Santander

Roma por Portugal

Gas

olin

era

Santander

Cádiz

M40

R2-Alcalá

A2-Alcala

SI condicion: ….ENTONCES SI condicion ENTONCES…. SINO CASO de que ordinal HAZ

Page 9: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

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

if expresion_bool: cuerpo1else: cuerpo2

Símbolo inicial y terminal

Proceso

Entrada/Salida

Decisión

Dirección del flujo

Conector de líneas de flujo

Conector entre dos páginas

año

esBisiesto? 365366

Diagrama de flujoSintaxis

Page 10: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

10

Diseño de casos de prueba

Una fábrica funciona ininterrumpidamente (7dias*24horas). Se desea calcular el tiempo, expresado en horas y minutos, que ha trabajado un empleado, sabiendo el momento de entrada y el de salida (expresados en horas y minutos). Un trabajador no puede trabajar más de 8 horas seguidas, de modo que el momento de entrada y el de salida, corresponden al mismo día (si entrada <= que la salida) o a días consecutivos (en caso contrario). Caso de haber trabajado más de 8 horas, el programa dará una alerta. Completa las salidas esperadas (valores de x e y) en los siguientes casos de pruebas:

Caso prueba

11:00|11:15 12:33|20:33 12:30|14:15 23:00|2:13 23:55|2:15 6:15|19:30

Salida deseada

xh, ym xh, ym xh, ym xh, ym xh, ym xh.ym ¡¡ALERTA!!

Page 11: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

11

Diseño de casos de pruebaMayor de dos números, o iguales

Prográmalo Inicio

A,B

A>B A

B>A

NO

B

NO

Son iguales

Fin

"""********************************************** 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)

Page 12: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

Diseño de casos de prueba

a b c Salida

3.0 3.0 3.03.0 3.0 2.03.0 2.0 3.02.0 3.0 3.03.0 4.0 5.0

-2. X X 1

1.0 2.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

Tipo triángulo

Page 13: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

13

Eficiencia ¿son manías?Tipo triángulo

versión Máximo Medio Tiempo V1 28 28*99=2772 8,4 V2 12 12*99=1188 3,6 V3 5 2*(33+33/2)+5(33+33/2)=346,5 1.05 V4 4 2*33+4*66=330 1

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?

Page 14: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

14

"""********************************************************************** 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')

Gestión de excepcionesax2+bx +c=0, a

acbbraiz

2

42

N=int(imput(‘entero’)

Page 15: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

15

"""*********************************************************************** PROGRAMA: segundoGrado **OBJ: raíces de ecuación ax**2+bx+c=0, a,b,c introducidos por usuario ***********************************************************************"""from math import sqrttry: a = float(input('a: ')) b = float(input('b: ')) c = float(input('c: '))except ValueError: print('los valores han de ser numéricos')else: try: 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') except ValueError: print('no tiene raíces reales') except: print('estos datos dan problemas')

Page 16: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

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) * * 20/03 al 19/06 Primavera * * 20/06 al 21/09 Verano * * 22/09 al 20/12 Otoño * * 21/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

#Probadordia = int(input('día: '))mes = int(input('mes: '))# aqui iría la validación de fechaprint ('la estación de',dia,'/',mes,'es', estacion(dia,mes))

Page 17: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

17

Bucle definido

""" ************* 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)

for e in s: cuerpo

Rage es un generador de secuencias en un rango desde (incluido).. hasta (excluido)

Page 18: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad  Legibilidad Semántica (identificadores),

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