resolución de problemas con python 1 características de software que guían este curso...
TRANSCRIPT
![Page 1: Resolución de problemas con Python 1 Características de software que guían este curso Herramientas Mantenibilidad Legibilidad Semántica (identificadores),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/1.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/2.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/3.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/4.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/5.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/6.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/7.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/8.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/9.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/10.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/11.jpg)
11
Diseño de casos de pruebaMayor de dos números, o iguales
Prográmalo Inicio
A,B
A>B A
SÍ
B>A
NO
B
NO
SÍ
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/12.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/13.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/14.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/15.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/16.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/17.jpg)
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),](https://reader036.vdocuments.net/reader036/viewer/2022070417/56a188a41a28abe5459578a9/html5/thumbnails/18.jpg)
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