Uso de intérprete, expresiones y tipos Programación http://progra.usm.cl Objetivos de la clase Mostrar cómo ejecutar un programa simple. Mostrar cómo usar la consola interactiva. Presentar los conceptos de expresión, asignación y tipos. Presentar los operadores y sus propiedades. Presentar las sentencias de entrada y salida. Diapositivas Programa de ejemplo Problema: Escriba un programa que reciba una temperatura en grados Fahrenheit y entregue como resultado el equivalente en grados Celsius. Caso de prueba: Temp. en Fahrenheit: 95 El equivalente en Celsius es: 35.0 Código: f = float(raw_input('Temp. en Fahrenheit:')) c = (f - 32.0) * (5.0 / 9.0) print 'El equivalente en Celsius es:', c Esta diapositiva es importante porque introduce algunas convenciones que serán seguidas durante todo el semestre en las diapositivas, los apuntes y las evaluaciones: los enunciados explican el problema en prosa; el caso de prueba muestra cómo se ve la ejecución de un programa, donde la entrada ingresada por el usuario aparece en negrita; el código es el programa que puede ser copiado y pegado en un editor de texto para ser guardado y ejecutado. Presente estas convenciones en detalle a los estudiantes. Antes de mostrar el programa en ejecución, explicar también los siguientes aspectos del ejemplo, para que los estudiantes comiencen a familiarizarse con el código: la primera lı́nea del programa es la entrada, la segunda lı́nea es el proceso y la tercera lı́nea es la salida; la función raw_input recibe como parámetro el texto que será mostrado en la pantalla, y entrega com resultado el texto ingresado por el usuario; 1 la función float convierte el texto a un número real, lo que es necesario para poder hacer operaciones aritméticas con el valor ingresado; la expresión ( f − 32) · 5/9 es evaluada con el valor que tiene f en ese momento, y al resultado se le asocia el nombre c; la sentencia print imprime el texto entre comillas tal cual aparece, y a continuación el valor que tiene c en ese momento. Muestre en vivo cómo ingresar el programa en el editor de texto y ejecutarlo. Hágalo de varias maneras: primero usando Bloc de Notas + doble clic en el ı́cono del programa, luego, ingresando el código en IDLE y ejecutándolo desde ahı́ (presionando F5, o desde el menú), finalmente, ingresando el programa lı́nea por lı́nea en la consola de Python. Expresión Combinación de valores y operaciones que al ser evaluados entregan un resultado >>> 2 * 3 + 4 10 >>> 'hola' + ' mundo' 'hola mundo' >>> x = 3.5 >>> 5 + x ** 2 17.25 >>> abs(x - 10) 6.5 Explique a grandes rasgos qué hace cada expresión. Explique la asignación x = 3.5. En Python, una asignación es un nombre que se le asocia a un valor. Mencione que el nombre es llamado variable, y que su nombre puede tener letras, números y underscores. A diferencia de C y Java, la variable no tiene asociados ni un tipo ni una ubicación en la memoria. Cada asignación crea o religa un nombre. Las asignaciones siguen la sintaxis nombre = valor. Algunas asignaciones inválidas que pueden ser mostradas en la consola son: x + 2 = 3, 7 = a. Estas sentencias arrojan un error de sintaxis, que significa que el código no satisface las reglas del lenguaje. Una vez asignada una variable, es posible usarla en cualquier expresión. Al evaluar la expresión, tomará el valor que tiene la variable en ese momento. Operadores aritméticos >>> 613 + 521 1134 >>> 4.33 * 9 38.97 >>> 15 / 4 3 >>> 1.2 ** 2 1.44 >>> 12 % 7 5 Estos operadores son los mismos de matemáticas, (salvo que la multiplicación es * y la exponenciación es **) ası́ que lo único que es importante explicar cómo funciona es el operador de módulo %. 2 Los usos más comunes del módulo son comprobar divisibilidad y extraer dı́gitos de un entero. Muestre algunos ejemplos de esto en la consola. Respecto a los tipos, la regla es: si al menos uno de los operandos es real, entonces el resultado es real. El caso más capcioso es la división. Muestre en la consola que 15/4 es 3 y no 3.75. La división entera siempre trunca los decimales. Muestre también en la consola algunos ejemplos de precedencia de operadores. Por ejemplo, preguntar cuál es el resultado de 2 + 3 * 4 (la multiplicación se hace primero) y de 2 ** 3 ** 4 (la exponenciación se asocia de derecha a izquierda), y mostrar cómo cambiar la precedencia usando paréntesis. Operadores lógicos >>> not False True >>> (False or (not False)) and (not True) False >>> ((3 + 4) < 2) or ((2 ** 4) >= 4) True >>> ((3 + 4) < 2) and ((2 ** 4) >= 4) False Los operadores lógicos son los mismos de matemáticas. Si bien no es buena idea mencionarlo todavı́a, es conveniente saber que estos operadores pueden ser usados con operandos de otros tipos. Los valores 0, '' y None, entre otros, son considerados falsos, y el resto son considerados verdaderos. Funciones >>> abs(4 - 5) 1 >>> len('paralelo') 8 >>> min(4.3, 3.1) 3.1 >>> round(54.5) 55.0 >>> from math import exp >>> exp(2) 7.3890560989306504 El uso de la función para obtener un valor se llama llamar a la función. El valor pasado a la función se llama argumento o parámetro (la distinción entre ambos se verá en la unidad de funciones). Las funciones matemáticas deben ser importadas desde el módulo math. Las funciones min y max aceptan una cantidad arbitraria de parámetros. Operadores de texto >>> 'agua' + "fiestas" 'aguafiestas' >>> "waka" * 2 'wakawaka' >>> len('paralelepipedo') 14 >>> 'amarillo'[4] 'i' >>> 'pollo' in 'repollos' True >>> 'pollo' in 'gallinero' False La operación representada por el + aplicado a strings se llama concatenación. No puede ser una suma, pues no es una operación conmutativa. Los caracteres se cuentan desde cero, y por eso "amarillo"[4] es "i" y no "r". Los ı́ndices de un string s van desde 0 hasta len(s) - 1. 3 Tipos Entero (int) 23145 Real (float) 231.45 6.02e23 Lógico (bool) True False Texto (str) 'El murcielago veloz' "Lorem ipsum dolor sic amet" El tipo de un valor determina cuál es su dominio, qué operaciones se le puede aplicar y cómo es representado internamente por el computador. El literal 6.02e23 está en notación cientı́fica. Su valor es 6,02 · 1023 . Mencione que los valores de tipo texto se llaman strings y los valores lógicos se llaman booleanos. Los nombres no son muy descriptivos, pero son los que se usan en programación. No hay diferencia entre los strings representados con comillas simples y dobles: "hola"== 'hola'. Explique que las comillas no son parte del string. Dos tipos elementales que no aparecen en la diapositiva son el valor nulo None (que tiene su propio tipo). y los números complejos (complex). Si bien aparecen mencionados en el apunte oficial, no se les dará mucha importancia en la asignatura. La parte imaginaria de los números complejos se denota con una jota: 2+3j. El constructor de complex recibe como parámetros las partes real e imaginaria: z = complex(2, 3). Puede mostrar en la consola algunos ejemplos de operaciones con tipos incorrectos. Por ejemplo: 'perro'* 'gato' len(2) 2[0] 'hola'(2, 3) (2+3j) < (1-2j) Estas operaciones arrojan una excepción llamada error de tipo. Enseñe a los estudiantes a leer los mensajes de error. Entrada nombre = raw_input('Ingrese su nombre: ') edad = int(raw_input('Ingrese su edad: ')) est = float(raw_input('Ingrese estatura: ')) La función raw_input siempre retorna un string. Además, su parámetro es el mensaje que se mostrará al usuario. Las funciones int y float convierten el string a un valor entero y real, respectivamente. 4 Salida print 'Hola mundo' print 'Hola', 'mundo' nombre = 'Perico' print 'Hola', nombre n = 3.3 print 'El cuadrado de', n, 'es', n ** 2 print 'a', print 'b', print 'c' La sentencia print muestra por pantalla la representación en texto de todos los valores que le son pasados. El espacio que separa los valores y el salto de lı́nea al final son introducidos automáticamente. Todo lo que va en el mismo print es impreso en la misma lı́nea en la pantalla. Si se pone una coma solitaria al final del print, el salto de lı́nea no es impreso. En http://progra.usm.cl/apunte/ejercicios/1/index.html#programas-simples puede encontrar ejercicios para resolver en la segunda mitad de la clase. 5