Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Python COMPARACIÓN DE SECUENCIAS Los operadores de comparación están sobrecargados para aceptar secuencias (string, listas, tuplas) >>> 'a' < 'b' True >>> 'ab' < 'aa' False >>> 'a' < 'b' < 'c' True >>> (1, 2, 3) < (1, 2, 4) True >>> [1, 2, 3] <= [1, 2, 3] True FORMA CORTA DE if else Sintaxis: expr-1 if test else expr-2 # Evalua expr-1 si test es True; sino, evalua expr-2 >>> n = 1 >>> print(‘uno' if n == 1 else 'no es uno') uno >>> x = -5 >>> abs_x = x if x > 0 else -x >>> abs_x 5 CICLO WHILE Sintaxis: while condición: sentencias # El ciclo while tiene un bloque else opcional: while condición: sentencias else: # se ejecuta solo si while no terminó por un break sentenciasF El bloque else es opcional. Se ejecuta si se sale del ciclo sin encontrar una instrucción break. break, interrumpe la ejecución de un ciclo (for o while) continue, obliga a que se continúe con la siguiente iteración del ciclo, sin evaluar lo que está después de continue CICLO WHILE def fac(n): # calcula factorial de N = 1*2*3*…*n f = 1 c = 1 while (c <= n): f *= c c += 1 return f CICLO for # secuencia: string, list, tuple, dictionary, set for v in secuencia: sentencias # for-in con la opcion else for v in secuencia: sentencias else: sentenciasF Se interpreta como “para cada ítem en la secuencia...”. El bloque else se ejecuta si el ciclo termina normalmente sin encontrar la instrucción break. 6 CICLO for # String: itera en cada caracter >>> for ch in 'hello': print(ch, end=‘ ‘) h e l l o # List: itera en cada elemento de la lista >>> for v in [123, 4.5, 'hello']: print(v) 123 4.5 hello # Tuple: itera en cada elemento de la tupla >>> for v in (123, 4.5, 'hello'): print(v) 7 CICLO for # Dict: itera en cada clave del diccionario >>> dc = {'a': 1, 2: 'b', 'c': 'cc'} >> for key in dct: print(key, ':', dc[key]) a : 1 2: b c : cc # Set: itera en cada elemento del conjunto >>> for v in {'a', 2, 'apple'}: print(v) a 2 apple 8 CICLO for Iteraciones sobre una secuencia de secuencias. >>> lst = [(1,'a'), (2,'b'), (3,'c')] # Itera en cada elemento de las tuplas >>> for i1, i2 in lst: print(i1, i2) 1 a 2 b 3 c >>> lst = [[1, 2, 3], ['a', 'b', 'c']] >>> for i1, i2, i3 in lst: print(i1, i2, i3) 1 2 3 a b c 9 CICLO for # Itera en clave y valor de un diccionario >>>dc = [('genero', ‘M'), (‘edad', 21), ('nombre', ‘Luis')] >>> for clave, valor in dc.items(): print(clave, ':', valor) genero : M edad : 21 nombre : Luis 10 FUNCIÓN range La función range produce una secuencia de enteros: • range(n) produce enteros desde 0 a n-1; • range(m, n) produce enteros desde m a n-1; • range(m, n, s) produce enteros desde m a n-1 con tamaño de paso de s (por defecto s=1). >>> for num in range(1,5): print(num, end=‘,’) 1, 2, 3, 4 >>> range(4) # no retorna la secuencia: range(0, 4) >>> list(range(4)) # retorna la secuencia: [0, 1, 2, 3] 11 CICLO for def fac2(n): # calcula factorial de n: 1*2*3*…*n f = 1 for c in range(1, n+1): # range genera la secuencia: 1,2,3, …,n f *= c return f # llamado: fac2(5) FUNCIÓN range def ejemplo(): x = [3, 6, 1] y = [5, 1, 4] su = 0.0 for i in range(len(x)): su += x[i]*y[i] return su >> ejemplo() 25 13 FUNCIÓN enumerate La función enumerate() da los índices posicionales cuando se recorre por una secuencia. >>> for e in enumerate(['a', 'b']): print(e) (0, ‘a’) (1, ‘b’) >>> for i, v in enumerate(['a', 'b']): print(i, v) # posición y elemento de una lista 0 a 1 b >>> enumerate(['a', 'b', 'c']) <enumerate object at 0x7ff0c6b75a50> >>> for i, v in enumerate(('d', 'e')): print(i, v) # Tupla 0 d 1 e 14 FUNCIÓN reversed Se usa para iterar una secuencia en orden inverso. >>> li = [10, 20, 30] >>> for item in reversed(li): print(item, end=' ') 30 20 10 >>> reversed(li) <list_reverseiterator object at 0x7fc4707f3828> >>> s = "hola" >>> for c in reversed(s): print(c, end='') aloh 15 FUNCIÓN zip Y SECUENCIAS MÚLTIPLES zip permite iterar sobre 2 o más secuencias de forma concurrente y emparejada. >>> l1 = ['a', 'b', 'c'] >>> l2 = [1, 2, 3] >>> for i1, i2 in zip(l1, l2): print(i1, i2) a 1 b 2 c 3 >>> zip(l1, l2) # Retorna una lista de tuplas [('a', 1), ('b', 2), ('c', 3)] >>> tuple3 = (44, 55) >>> zip(lst1, lst2, tuple3) [('a', 11, 44), ('b', 22, 55)] 16 GENERAR SECUENCIAS lr = [expresion_con_item for item in lista] >>> sq = [v * v for v in range(1,11)] >>> sq # lista de cuadrados [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] # con un test opcional lr = [expresion_con_item for item in lista if test] >>> w = [3, 4, 1, 5] >>> sq_odd = [v * v for v in w if v % 2 != 0] >>> sq_odd # lista de cuadrados impares [9, 1, 25] # Con dos for >>> [(x, y) for x in range(1,3) for y in range(1,4) if x != y] # [(x, y) for x in [1,2] for y in [1,2,3] if x != y] [(1, 2), (1, 3), (2, 1), (2, 3)] 17 GENERAR SECUENCIAS PARA DICCIONARIOS: >>> d = {x:x**2 for x in range(1, 5)} # se usa llaves >>> d # la clave es x, el valor es x**2 {1: 1, 2: 4, 3: 9, 4: 16} PARA CONJUNTOS >>> s = {e for e in 'hola' if e not in 'aeiou'} # con llaves >>> s {'h', 'l'} 18 FUNCIONES Sintaxis: def nombre(arg1, arg2, ...): "“”cadena de documentación""" # se accede a la documentación con nombre.__doc__ sentencias return expression # opcional Ejemplo: def cubo(x): """Retorna el cubo de un número dado""“ return x * x * x Llamado a la función: >>> cubo(5) 125 >>> cubo <function cubo at 0x7fa57ec54bf8> >>> type(cubo) <class 'function'> FUNCIONES >>> cubo.__doc__ # muestra la cadena de documentación 'Retorna el cubo de un número dado' >>> help(cubo) Help on function cubo in module __main__: cubo(x) Retorna el cubo de x >>> dir(cubo) # muestra atributos ['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] PARÁMETROS DE FUNCIONES • Los argumentos inmutables (enteros, floats, strings, tuplas) se pasan por valor. Es decir, se clona una copia y se pasa a la función, y el original no se puede modificar dentro de la función. • Los argumentos mutables (listas, diccionarios, conjuntos e instancias de clases) se pasan por referencia (se envía su dirección de memoria). Es decir, se pueden modificar dentro de la función. PARÁMETROS DE FUNCIONES CON VALORES POR DEFECTO Se puede asignar un valor por defecto a los parámetros de funciones. def suma1(x1, x2 = 4, x3 = 5): # x1 es requerido, x2 y x3 son opcionales """Retorna la suma de todos los argumentos""" return x1 + x2 + x3 >>> print(suma1(1, 2, 3)) 6 >>> print(suma1(1, 2)) # x3 por defecto es 5 8 >>> print(suma1(1)) # por defecto x2=4, x3=5 10 >>> print(suma1()) TypeError: suma() takes at least 1 argument (0 given) ARGUMENTOS POSICIONALES Y NOMINALES Las funciones en Python permiten argumentos posicionales y nombrados (especificando el nombre). Normalmente se pasan los argumentos por posición de izquierda a derecha (posicional). def suma2(x1, x2 = 4, x3 = 5): """Return the sum of all the arguments""" return x1 + x2 + x3 >>> print(suma2(x2 = 2, x1 = 1, x3 = 3)) 6 >>> print(suma2(x2 = 2, x1 = 1)) # x3=5 por defecto 8 >>> print(suma2(x1 = 1)) # por defecto x2 = 4 y x3 = 5 10 >>> print(suma2(1, x3 = 3)) # x2 = 4 por defecto 8 >>> print(suma2(x2 = 2)) TypeError: suma() missing 1 required positional argument: 'x1' EJEMPLO DE FUNCIONES Ordenar 3 números, definiendo funciones para encontrar el mayor y el menor. def mayor(x,y, z): ma= x if y> ma: ma=y if z> ma: ma= z return ma def menor(x, y, z): if x < y: me= x else: me= y EJEMPLO DE FUNCIONES if z < me: me= z return me def ordenar(): a = float(input(“a=“)) b = float(input(“b=“)) c = float(input(“c=“)) may = mayor(a, b, c) men = menor(a, b, c) medio = a + b + c – may – men orden = [men, medio, may] print(“De menor a mayor: ”,orden) PROBLEMA Definir una función fac(m) que calcule y retorne el factorial de m Definir una función coef(r,n) que calcule el coeficiente binomial n!/(r!*(n-r)!), llamando a la función fac. GRACIAS
Compartir