Python Ejercicio ING1310 – Introducción a la Computación Python Conceptos Básicos Carlos Reveco creveco@dcc.uchile.cl careveco@miuandes.cl Facultad de Ingenierı́a/Universidad de los Andes/Chile Rev : 254 C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 1 / 38 Python Ejercicio En esta clase 1 Python Motivación Variables I/O Consola Control de Flujo Funciones, Métodos y Clases Módulos 2 Ejercicio C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 2 / 38 Python Ejercicio Python C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 3 / 38 Python Ejercicio Python Motivación C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 4 / 38 Python Ejercicio Nuevo lenguaje, mismo modo de pensar • Veremos un nuevo lenguaje de programación: Python • Especı́ficamente en su versión 2.6 • Su uso sigue siendo para programar • Los grandes cambios están en la sintáxis, • la forma de pensar se mantiene. • Ustedes no aprendieron Java, aprendieron a programar. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 5 / 38 Python Ejercicio ¿Qué tiene de diferente? • Python es un lenguaje multiparadigma • orientado a objetos → puede tener clases y objetos, • imperativo → puede tener sentencias que cambien el estado del programa, • funcional → puede tener funciones matemáticas puras, • reflexivo → permite el acceso y modificación de si mismo. • Python es un lenguaje interpretado (script): • Su ejecución se realiza mediante un intérprete (no hay compilación), • manejo de tipos de forma dinámica, • multiplataforma, • “pierde eficiencia” C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 6 / 38 Python Ejercicio Y? Y hay más cosas que lo hacen especial: • open source → gratis • desarrollo constante que lo mantiene actualizado • comunidad activa en el desarrollo de módulos para distintos problemas • programas con poco overhead, fácil para crear programas desechables • estable • manejo automático de memoria mediante conteo de referencias y recolección de basura • rendimiento superior a otros lenguajes interpretados • extensiones con C o C++ C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 7 / 38 Python Ejercicio Ejemplo: Hola Mundo en Python print " Hola Mundo ! " • El código anterior funciona sin necesidad de nada más. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 8 / 38 Python Ejercicio Detalles sintácticos básicos • El término de una sentencia está dado por el salto de lı́nea • no se necesita un caracter especial como en Java (;) • Los bloques se crean mediante un Tab • no se utilizan los paréntesis de llave C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 9 / 38 Python Ejercicio Operadores básicos • Se pueden utilizar los operadores aritméticos binarios clásicos (+, −, ∗, /, %) • // → división entera, • ∗∗ → elevado a • También operadores unitarios clásicos (+, −) • Los operadores de comparación básicos son ==, ! =, <, >, <=, >= • is [not] → comparación a nivel de objetos • [not] in → evaluación sobre colecciones (incluidos strings) • Los operadores booleanos binarios son and, or, y not C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 10 / 38 Python Ejercicio Python Variables C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 11 / 38 Python Ejercicio Tipos dinámicos • No es necesario darles un tipo explı́cito a las variables. • Esto implica que no se declaran, simplemente se usan, • desde su primer uso comienzan a existir. • El contenido de la variable si tiene un tipo. • El contenido puede cambiar, • y el tipo de ese contenido también. • El tipo influye en las operaciones que se pueden realizar. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 12 / 38 Python Ejercicio Ejemplo: Declaración de variables a = 2 b = a + 4 a = " un texto " • El código anterior funciona sin necesidad de nada más. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 13 / 38 Python Ejercicio Alcance (scope) • Las variables viven dentro de su bloque. • Si una variable se declara fuera de todo, entonces puede usarse en cualquier parte. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 14 / 38 Python Ejercicio Python I/O Consola C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 15 / 38 Python Ejercicio Output • Para mostrar algo en consola utilizamos la instrucción print seguida por lo que se quiere mostrar. • Es una instrucción, no un método. Ejemplo: Imprimiendo en la consola print " Hola Mundo ! " a = " Ingenieria " print a a = 2* len ( a ) print a • len → largo de un string, o lista, o cualquier cosa dimensionable. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 16 / 38 Python Ejercicio Output • Para imprimir múltiples datos se utiliza la coma (,) Ejemplo: Imprimiendo en la consola a = 8 b = 6 c = ’ lala ’ print " Los valores son : " , a , b , c • Para los strings se puede usar tanto la comilla doble como la simple. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 17 / 38 Python Ejercicio Input • Para recibir información del usuario existe el método raw input • Recibe como parámetro un texto a mostrar. • Retorna lo ingresado por el usuario como texto. Ejemplo: Recibiendo desde la consola a = raw_input ( " Ingresa un numero : " ) a = int ( a ) print " Tu numero al cuadrado es : " , a **2 • int() → convierte el texto en entero. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 18 / 38 Python Ejercicio Python Control de Flujo C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 19 / 38 Python Ejercicio Condiciones • En python existen sentencias para if, else y else if • La sintáxis es un poco diferente Sintáxis Python: Condiciones if condicion : ... elif condicion : ... else : ... • Luego las instrucciones se escriben un tab más adentro para cada bloque C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 20 / 38 Python Ejercicio Ejemplo: Condiciones edad = int ( raw_input ( " Ingrese su edad " ) ) genero = raw_input ( " Ingrese su genero : ( M ) asculino o ( F ) emenino " ) if edad < 2: print " Aun es un bebe " elif edad < 12 and genero == " M " : print " Eres un chiquillo " elif edad < 12 and genero == " F " : print " Eres una chiquilla " elif edad < 18: print " Te falta poco para ser mayor de edad " else : print " Eres mayor de edad " C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 21 / 38 Python Ejercicio Ciclos • En python existen sentencias para while y for Sintáxis Python: Ciclos while condicion : ... for x in lista : ... • El for difiere un poco del uso común en otros lenguajes: • En python siempre itera sobre una lista. • En cada pasada x cambia al siguiente valor de la lista. • Dentro del ciclo no se debe modificar la lista • Si se puede modificar su contenido. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 22 / 38 Python Ejercicio Generar secuencia para for • El método range es una forma sencilla de crear una secuencia. • Lista de números que sigue un patrón fijo. • Tiene 3 alternativas para los parámetros: • máximo (no incluı́do) • mı́nimo, máximo (no incluı́do) • mı́nimo, máximo (no incluı́do), salto Ejemplo: Condiciones # [0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9] range (10) # [5 , 6 , 7 , 8 , 9] range (5 , 10) # [ -50 , -30 , -10 , 10 , 30 , 50 , 70 , 90] range ( -50 , 100 , 20) • El # sirve para hacer comentarios • Es posible hacer print directamente sobre una lista. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 23 / 38 Python Ejercicio Ejemplo: Control de Flujo max = int ( raw_input ( " Ingresa el maximo : " ) ) min = int ( raw_input ( " Ingresa el minimo : " ) ) if max < min : print " Datos incorrectos " else : res = 0 for x in range ( min , max ) : res = res + x print res C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 24 / 38 Python Ejercicio Python Funciones, Métodos y Clases C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 25 / 38 Python Ejercicio Métodos → Funciones • A los métodos se los asocia con OOP, ya que son parte de una clase. • Cuando no son parte de una clase se suele llamarles funciones. • En python pueden haber funciones. • Se utiliza el comando def para declararlas Sintáxis Python: Función def nombreFuncion ( parametros ) : pass • pass se utiliza para dejar una función sin contenido. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 26 / 38 Python Ejercicio Funciones • Los parámetros de la función no llevan tipo • La función tampoco tiene tipo de retorno • Se pueden retornar múltiples valores utilizando el comando return • Los valores van separados por coma • Se deben recibir en múltiples variables • Siempre hay retorno: • Si no se retorna explı́citamente, entonces la función retorna None C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 27 / 38 Python Ejercicio Ejemplo: Funciones def metodo1 () : print " metodo1 " def metodo2 ( n ) : return n *4 def metodo3 (n , m ) : return n +1 , m +2 def metodo4 ( n ) : if n > 0: return n * n metodo1 () print metodo2 (2) print metodo3 (3 , 5) print metodo4 (3) print metodo4 ( -2) • Las funciones deben ser declarados antes de su uso. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 28 / 38 Python Ejercicio Ejemplo: Funciones def minimoYmaximo (n , m ) : if n <= m : return n , m else : return m , n a = int ( raw_input ( " Ingrese un numero : " ) ) b = int ( raw_input ( " Ingrese otro numero : " ) ) min , max = minimoYmaximo (a , b ) print " El minimo es " , min , " y el maximo es " , max C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 29 / 38 Python Ejercicio Clases • Para definir clases se utiliza el comando class Sintáxis Python: Clase class NombreClase : pass • No se declaran atributos. • No se maneja visibilidad de los componentes. • Todos los métodos deben recibir como primer parámetro el elemento self • El self mantiene la información de la clase, • si se quiere un atributo se hace self.nombreAtributo, • para invocar los métodos también se debe utilizar self • Para el constructor se crea un método de nombre C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile init ING1310– Clase 23 30 / 38 Python Ejercicio Crear objeto • Simplemente se asigna a la variable el nombre de la clase • no se usan comandos adicionales. C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 31 / 38 Python Ejercicio Ejemplo: Clases class Alumno : def __init__ ( self , nombre , p1 , p2 , ex ) : self . nombre = nombre self . p1 = p1 self . p2 = p2 self . ex = ex def p ro me d io Pr ue b as ( self ) : return ( self . p1 + self . p2 ) /2 def promedio ( self ) : promPruebas = self . pr o me di oP r ue ba s () prom = promPruebas *0.6 + self . ex *0.4 return prom alumno = Alumno ( " Pedrito " , 4.5 , 3.5 , 5.6) print alumno . p ro me d io Pr ue b as () print alumno . promedio () C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 32 / 38 Python Ejercicio Python Módulos C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 33 / 38 Python Ejercicio Múltiples archivos • Dentro de python cada archivo es llamado un módulo • Cada módulo puede contener funciones, clases, . . . • Como es un lenguaje interpretado, se ejecuta un módulo (no hay proyectos) • Si quiero usar otros módulos debo incorporarlos explı́citamente mediante el comando import • El nombre del archivo corresponderá al nombre del módulo (sin la extensión) • import funciones C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 34 / 38 Python Ejercicio Ejercicio C.Reveco Facultad de Ingenierı́a/Universidad de los Andes/Chile ING1310– Clase 23 35 / 38 Ejercicio Python: Rango Cree una clase Rango cuyo constructor reciba dos valores: un mı́nimo y un máximo. Su clase debe tener dos métodos: • Retorna la suma de los números en el rango con salto 1, y también retorna la multiplicación de esos mismos valores. • Recibe un entero como salto, y retorna la suma de la secuencia formada por los números entre mı́nimo y máximo, con una distancia de salto entre ellos. Su programa debe pedirle al usuario el mı́nimo y el máximo, crear un objeto de su clase y mostrar el resultado de la invocación del primer método. Luego, pedir un salto al usuario e invocar el método que suma los valores con el salto, para mostrar el resultado entregado. Ejercicio Python: Rango Este es un ejemplo del input y output de su programa: Ingrese el minimo: 5 Ingrese el maximo: 20 La suma es 180 , y la multiplicacion es 5068545850368000 Ingrese un salto: 3 El resultado de la suma con salto es 55 class Rango : def __init__ ( self , min , max ) : self . min = min self . max = max def s u m a M u l t i p l i c a c i o n ( self ) : suma = 0 mult = 1 for a in range ( self . min , self . max ) : suma += a mult *= a return suma , mult def suma ( self , salto ) : res = 0; for a in range ( self . min , self . max , salto ) : res += a return res print " Ingrese el minimo : " min = int ( raw_input () ) print " Ingrese el maximo : " max = int ( raw_input () ) r = Rango ( min , max ) suma , mult = r . s u m a M u l t i p l i c a c i o n () print " La suma es " , suma , " , y la mu ltiplica cion es " , mult print " Ingrese un salto : " salto = int ( raw_input () ) res = r . suma ( salto ) print " El resultado de la suma con salto es " , res