U2 Tipos de datos, referenciación y errores 1
Datos problema simple enteroreal carácter booleano Ingeniero = Oreja+catalejo modelo ordenador solución Subprogramación procedimiento asignación/ referencia barajar complejidad Llamada procedimiento Proceso while for Do while hacer if c: bloque1 [ else: bloque2] n bucles 0 o 1 alternativas 1 o n 0 o n iterativo 1 n conocido recursivo n desconocido case gestión excepciones 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
Datos problema compuesto arreglo Lista/tupla Estructura tuplaNombre /record/clase fichero cadena Ingeniero = Oreja+catalejo modelo ordenador solución Subprogramación procedimiento asignación/ referencia barajar complejidad Llamada procedimiento Proceso while for Do while hacer if c: bloque1 [ else: bloque2] n bucles 0 o 1 alternativas 1 o n 0 o n iterativo 1 n conocido recursivo n desconocido case gestión excepciones función 3 simple enteroreal carácter booleano
¿Cómo almacena la información el ordenador? CU ALU RAM PI PA bit Se almacena en: Secuencia de bits De tamaño concreto CODIGO Dominio NO INFINITO Enteros: complementario a 2 Reales: IEEE 754 Char en Python UTF8=16 bits 0 1 6 7 5 4 3 Naturales 4
Tipo de datos simple {dominio} Objeto dato definido sobre un dominio, y sus operaciones tipoobjetodominiooperaciones mes7={1,2,3,4….12}siguiente, anterior, número_días diaSemanamartes{lunes,…domingo}siguiente, anterior, ¿laborable? sueldo1275,43salarioMinimo<=s<= ,-,*,%....¿cobrado?... ComponenteColor1450<=componenteColor<=255+,-,maximizar, anular… {dominio} Tipo de datos compuesto Conjunto de objetos dato, potencialmente de distinto tipo con sus operaciones Ej: fecha, aula, color(RGB) Cada elemento conserva sus operaciones 5
Tipos básicos en el ordenador 6 Datos compuestosimple enteroreal carácter booleano Función type Operaciones Promoción implicita Cambio explícito de tipo int, float, string Dominio: 100/3.0; 1.e Operadores de comparación Concatenación de operaciones ; 2<3<5 cadena
7 Tipos básicos: Precedencia numéricos PrecedenciaOperaciónResultado 1 -xCambio de signo 1 +xOperador identidad (no hace nada) 2 x + ySuma x e y 2 x - yResta de x y 3 x * yMultiplica x por y 3 x / yDivisión real 3 x // yDivisión entera 3 x % yResto de la división entera de x/y 4 x ** yx elevado a y3*2**3+4=28 5 (Expresión)Paréntesis: fuerza el orden ejecución(2+3)*5= =10 ; 2+3*5= ? OJO! 6/2*3 != 6/2/3
8 Tipos básicos: Precedencia booleanos PrecedenciaOperaciónNombreResultado 1x or yDisyunciónTrue solo si alguno de los operandos es True 2x and yConjunciónTrue solo si ambos operandos son true 3not xNegaciónTrue si x era False y viceversa Evaluación perezosa: V or cualquierCosa /F and cualquierCosa
Acercamiento al humano: 9 Hardware Lenguaje Máquina Lenguaje Ensamblador Lenguajes procedimentales C, Fortran, COBOL Lenguajes Orientados a objetos Java,C++,Python Lenguajes declarativos Haskell, ML, Prolog Razonamiento humano ??? Ya desde ensamblador: a) nombre simbólico a las posiciones de memoria variable+constante literal b) Nombre simbólico s las macros (secuencia de instrucciones) subprogramación identificadores
Asignación versus Referenciación otros lenguajes Python a b a =b 2 1 a a =2 b=1 a =2 b=1 a =b a =b 1 Se ha perdido a =b a b b Asignación produce una copia son posiciones independientes Referenciación es un pseudónimo son la misma posición Pero… parece que llegamos a lo mismo.
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] 1234 b a =b a 1234 a [1]=8 b a 1834 b = [1,2,3,4] a =b 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 11 Los tipos de datos compuestos, para los que Python da servicio de modificar elementos individuales, sin re-referenciar el dato completo, les llama mutables. Los tipos que sólo pueden cambiar su valor con referenciación los llama inmutables Asignación versus Referenciación otros lenguajes Python
12 Implicaciones: b) intercambiar los valores de las variables 2 1 a b 2 1 b a a,b=b,a ¿algoritmo? Referenciación: muy fácil Asignación: Escribe el algoritmo, piénsalo con vasos Asignación versus Referenciación otros lenguajes Python
Expresión Definiciones por intensión/extensión 13