cadena="holi" tupla=(1,2,3) lista=[1,2,3] diccionario={"a":1,"b":2} conjunto={1,2,3} print(tupla[0]) for i in tupla: print(i) a,b,c=tupla # desempaquetado print(a,b,c) def extremos(lista): menor=lista[0] mayor=lista[0] for numero in lista: if numero<menor: menor=numero if numero>mayor: mayor=numero return (menor, mayor) print(extremos([2,23,4,5,23,5,23,9,67,4])) menor,mayor=extremos([2,23,4,5,23,5,23,9,67,4]) ana,pepe=extremos([2,23,4,5,23,5,23,9,67,4]) print("menor",menor) print("mayor",mayor)
Categoría: Python
Ejemplos for
# for en python es muy sencillo, solo recorre cosas lista=[1,2,3,4] for i in lista: print(i) for letra in "hola": print(letra) for numero in range(10): print(numero) for n in range(1,11): print(n) for n in range(10,1000,10): print(n) tupla=(4,8,1) for t in tupla: print(t) diccionario={"nombre":"Ana","nota":6} for d in diccionario: print(d) for v in diccionario.values(): print(v) for j in diccionario.items(): print(j) print(list(range(1,11))) # recorrer una lista de numeros y sumarla total=0 for n in lista: total+=n print(total) # recorrer una lista de numeros y sumarla si son pares total=0 for n in lista: if n%2==0: total+=n print(total) # recorrer una cadena y contar las 'a' contador=0 for letra in "hola que tal": if letra=='a': contador+=1 print(contador)
Ejercicios listas
# funcion pivote de una lista de números nos divide la lista en 2 partes # primero los menores del número que pasemos y por otra los mayores # pivote([4,1,9,5,3,7],6)->([4,1,5,3],[9,7]) def pivote(lista,numero): menores=[] mayores=[] for i in lista: if i<numero: menores.append(i) else: mayores.append(i) return(menores,mayores) print(pivote([4,1,9,5,3,7],5)) # definir la función con los parámetros def pivote(lista,numero) # saber que tengo que devolver ¿un número? p. ej. un total, una cuenta, un promedio.. # ¿Una lista? los que cumplen una condicion, un filtro # ¿Una tupla con diferentes valores? (menores,mayores) # son una lista pues lo tengo que definir. # Cualquier cosa que vaya a devolver la tengo definir: total, res, menores, mayores... # recorrer la lista de numeros, de palabras, de lo que sea # Con cada uno de los elementos de la lista tenemos que hacer algo # sumarlo, contarlo, añadirlo, transformarlo # Si cumple alguna condicion: es par, si es mayor si es algo... # sacar todos lo anagramas de una palabra # mar->amr arm mar mra ram rma # vamos a crear una función a la que pasamos una lista de números y nos diga cuantos # pares hay contarPares([1,2,3,4])->2 def contarPares(lista): cont=0 for numero in lista: # que condicion es relevante aquí: numero sea par if numero%2==0: cont+=1 return cont print(contarPares([1,5,7,9])) # Una función palabras con a a la que le pasamos una cadena y nos devuelve # la lista de palabras que tienen una a # palabrasConA('hola que tal')->['hola','tal'] def palabrasConA(cadena): res=[] for palabra in cadena.split(): # si la palabra tiene una a la añado a res if 'a' in palabra: res+=[palabra] return res print(palabrasConA('hola que tal')) def palabrasconA2(cadena): res=[] for palabra in cadena.split(): for i in palabra: if i == "a": res.append(palabra) break return res print(palabrasconA2("hola que tal mejor mañana"))
Ejercicios ifs
# Vamos a hacer una función que calcule el PVP de un producto # le pasamos el precio, el tipo y si está en oferta o no # Tenemos que devolver: # Si el tipo es reducido el iva es un 10% en cualquier otro caso es un 21% # Si está en oferta hacemos un descuento del 5% def PvP(precio,tipo,oferta=False): # precio de un producto es el precio mas el iva menos el descuento if tipo=='reducido': iva=precio*0.1 else: iva=precio*.21 if oferta: descuento=precio*.05 else: descuento=0 return precio+iva-descuento print(PvP(100,'normal',True)) print(PvP(100,'normal')) # vamos a hacer una función a la que le pasamos un tipo de bono # un tipo de cliente y una cantidad y nos calcule el precio de acuerdo a lo siguiente # bono=vip precio=3000 # bono=extra precio=2000 # bono=normal precio=1000 # tipo cliente= standard, el precio no cambia # tipo cliente=premium, el precio es la mitad def precioBono(cantidad,bono,cliente): # precio por cantidad if bono=='vip': precio=3000 elif bono=='extra': precio=2000 else: precio=1000 if cliente=='premium': precio/=2 return precio*cantidad # por defecto el bono sea normal y el cliente tambien # los parámetros por defecto siempre al final def precioBono2(cantidad,bono='normal',cliente='normal'): # precio por cantidad if cliente=='premium': coeficiente=.5 else: coeficiente=1 if bono=='vip': precio=3000 elif bono=='extra': precio=2000 else: precio=1000 return precio*cantidad*coeficiente print(precioBono2(1))
Ejercicios corregir código
# esta función, en teoría, cuenta el número de pares que hay en la lista # ¿Funciona? Si es que no por qué y como arreglarlo def contarPares(lista): total=0 for i in lista: if total%2==0: total+=i return total lista=[2,3,4,5,6] print(contarPares(lista)) #debería imprimir 2 # esta funcion nos debería devolver las palabras más largas de un numero def palabrasLargas(cadena, numero): res=[] for palabra in cadena: if len(palabra)>=numero: res+=[palabra] return res cadena="Hola mi amigo piensa un poco" print(palabrasLargas(cadena,5)) # ['amigo','piensa'] def separarParidad(lista): pares=[] impares=[] for numero in lista: if numero%2==0: impares.append(numero) else: pares.append(numero) return (pares, impares) print(separarParidad([1,2,3,4,5])) # ([2,4],[1,3,5])
Ejemplo test unitario
def acceso(departamento,categoria): res=False if departamento=='gerencia': res=True if departamento=='administracion' and categoria=='mando intermedio': res=True if departamento=='marketing' and categoria=='mando intermedio' or categoria=='jefe de proyecto': res=True return res
El test:
from unittest import TestCase from acceso import acceso class Test(TestCase): def test_acceso(self): test = acceso('gerencia', 'jefe de proyecto') self.assertTrue(test) test = acceso('gerencia', 'becario') self.assertTrue(test) test = acceso('administracion', 'becario') self.assertFalse(test) test = acceso('administracion', 'mando intermedio') self.assertTrue(test) test = acceso('administracion', 'jefe de proyecto') self.assertFalse(test)
Ejemplo test unitario
def cuadrado(lado=1): return lado**2 def rectangulo(lado1,lado2): return lado1*lado2
El test:
from unittest import TestCase import areas class Test(TestCase): def test_cuadrado(self): resultado = areas.cuadrado(1) self.assertEqual(resultado, 1) resultado = areas.cuadrado(3) self.assertEqual(resultado, 9) resultado = areas.cuadrado(10) self.assertEqual(resultado, 100) def test_rectangulo(self): resultado=areas.rectangulo(2,3) self.assertEqual(resultado,6) resultado = areas.rectangulo(0, 3) self.assertEqual(resultado, 0) resultado = areas.rectangulo(20, 3) self.assertEqual(resultado, 60)
Ejemplos manejo de errores
try: num = input("Ingrese un número: ") print(num) num=int(num) print(num) resultado = 10 / num print(resultado) except Exception as e: print(f"Ocurrió una excepción no manejada: {e}") else: print("esto se imprime si va bien") # cualquier código lo podemos 'envolver' dentro de un # try: #... # except Exception as e: # Y si sucede un error salta a except # sintaxis del C # java, c++, c#, php, js... # try catch if (){...} # python NO TIENE la sintaxis del C
Soluciones fechas
# PENSAR -> ¿Cómo lo haría yo? ¿Cómo le explico al ordenador como lo haría yo? # divide y vencerás: Todo problema está hecho de problemas más pequeños # PRACTICAR y practicar y practicar MAS QUE LEER import datetime # Crear una función cuanto_falta que nos devuelva los dias que faltan para el fin de # semana. Si ya es fin de semana devolvemos 0 (es mucho más fácil de lo que parece) # cuanto_falta(fecha) -> dias hasta el siguiente fin de semana # saber el día de la semana weekday (0-lunes y 6 domingo) # 0 lunes faltan 5 0+5=5 # 1 martes faltan 4 1+4=5 #... 4 viernes falta 1 4+1=5 5-weekday # 5 sabado faltan 0 # 6 domingo 0 def cuanto_falta(fecha): dia_semana=fecha.weekday() if dia_semana>=5: # in [5,6] return 0 else: return 5-dia_semana print(cuanto_falta(datetime.date(2023,10,16))) # Crear una función primero_de_mes a la que le pasemos un año y nos devuelva una lista # de fechas del 1 de cada mes de ese año: # # primero_de_mes(2024) -> ['2024-01-01'.'2024-02-01',...'2024-12-01'] # ¿Cómo creo yo una fecha a partir de numeros? # datetime.date(año,mes,dia) año->check me lo pasan dia->check siempre es 1 # ¿mes? del 1 al 12 ¿Se hacer un bucle del 1 al 12? for i in range(1,13) # crear una lista lista vacia: [] # añado a la lista: append # ¿Cuantas fechas tengo que crear? 12 una por cada mes def primero_de_mes(anyo): res=[] for i in range(1,13): res.append(datetime.date(anyo,i,1)) return res print(primero_de_mes(2023)) # Crear una funcion fines_de_semana a la que le pasemos un año y un mes y nos devuelva # una lista con todos los fines de semana: # # fines_de_semana(10,2023) -> ['2023-10-01','2023-10-07','2023-10-08',...,'2023-10-29'] # me recorro todos los dias de ese mes y si es fin de semana lo añado a la lista # empiezo por el 1 del mes de ese año, voy sumando un día en un bucle y si el dia es fin # de semana lo añado a la lista # crear una fecha a partir de año mes y dia # sumar un dia a una fecha? + timedelta(days=1) # se si es fin de semana? si el weekday es 5 o 6 # febrero tego que ir del 1 al 28 ¿Cómo lo se yo? # lista con los dias del mes [31,28,31,30,31,30,31,31,30,31,30,31] # el bucle lo hago añadiendo un día, 2023-2-27, 2023-2-28,2023-3-1 # 2023-10-29,2023-10-30,2023-10-31,2023-11-1 # mientras el mes de mi fecha sea el mes que me han pasado sigo en el bucle # en cuanto sea diferente paro def fines_de_semana(mes,anyo): fecha=datetime.date(anyo,mes,1) res=[] while fecha.month==mes: if fecha.weekday() in [5,6]: res.append(fecha) fecha+=datetime.timedelta(days=1) return res print(fines_de_semana(10,2023))
Ejemplos fechas
import datetime import math # Crear un objeto datetime para la fecha y hora actual ahora = datetime.datetime.now() print(ahora) # Resultado: Fecha y hora actual en formato 'YYYY-MM-DD HH:MM:SS' # Obtener la fecha actual fecha_actual = datetime.date.today() print("Fecha actual:", fecha_actual) fecha_formateada = fecha_actual.strftime("%d - %m - %Y") print("Fecha formateada:", fecha_formateada) print(fecha_actual.day) print(ahora.minute) print(ahora.second) # Crear una fecha específica fecha_personalizada = datetime.date(2023, 10, 3) print("Fecha personalizada:", fecha_personalizada) # Crear una fecha y hora específicas fecha_hora_personalizada = datetime.datetime(2023, 10, 3, 14, 30,10,9) print("Fecha y hora personalizada:", fecha_hora_personalizada) anyo_que_viene=datetime.datetime(2024,10,10) print(anyo_que_viene.weekday()) # Crear una fecha a partir de una cadena de texto formateada fecha_desde_cadena = datetime.datetime.strptime("03/10/2023", "%d/%m/%Y") print("Fecha desde cadena:", fecha_desde_cadena) mifecha="10/10/2023" # ¿Es una fecha? No: es una cadena mifecha_a_fecha=datetime.datetime.strptime(mifecha,"%d/%m/%Y") print(mifecha_a_fecha) # ¿Es una fecha? otrafecha=datetime.date(2023,10,10) # ¿Es una fecha? resta=anyo_que_viene-mifecha_a_fecha print(resta.days) print(resta.seconds) hoy=datetime.date.today() manyana=hoy+datetime.timedelta(days=1) semana_que_viene=hoy+datetime.timedelta(days=7) print(manyana) print(semana_que_viene) print("Día de la semana:", fecha_actual.weekday()) # 0 es el lunes el 6 domingo # Ejemplos def antiguedad_empleado2(fecha_contrato): fecha_actual=datetime.date.today() anyos=fecha_actual.year-fecha_contrato.year meses=fecha_actual.month-fecha_contrato.month if (meses<0): meses+=12 anyos-=1 dias=fecha_actual.day-fecha_contrato.day if dias<0: meses-=1 dias+=30 return (dias,meses,anyos) def antiguedad_empleado(fecha_contrato): fecha_actual=datetime.date.today() resta=fecha_actual-fecha_contrato print(resta.days) anyos=math.floor(resta.days/365) print(anyos) meses=math.floor((resta.days-anyos*365)/30) print(meses) dias=resta.days-anyos*365-meses*30 return (dias,meses,anyos) print(antiguedad_empleado2(datetime.date(2015,12,21))) # es fin de semana? def es_fin_de_semana(fecha): """ if fecha.weekday()<5: return False else: return True """ return not fecha.weekday()<5 # No es codigo ninja, es supercomún def siguiente_dia_laborable(fecha): fecha+=datetime.timedelta(days=1) while es_fin_de_semana(fecha): fecha += datetime.timedelta(days=1) return fecha print(siguiente_dia_laborable(datetime.date.today())) print(siguiente_dia_laborable(datetime.date(2023,10,14)))