diff --git a/dia_04/01_operadores_comparacion.py b/dia_04/01_operadores_comparacion.py new file mode 100644 index 0000000..d45cfb6 --- /dev/null +++ b/dia_04/01_operadores_comparacion.py @@ -0,0 +1,23 @@ +""" +Operadores de comparación + +== igual a +!= diferente a +> mayor que +< menor que +>= mayor o igual que +<= menor o igual que + +""" + +mi_bool = 5 >= 6 +print(mi_bool) + +mi_bool = 5 != 6 +print(mi_bool) + +mi_bool = 10 == 2*5 +print(mi_bool) + +mi_bool = 5 < 6 +print(mi_bool) diff --git a/dia_04/02_operadores_logicos.py b/dia_04/02_operadores_logicos.py new file mode 100644 index 0000000..f13042e --- /dev/null +++ b/dia_04/02_operadores_logicos.py @@ -0,0 +1,22 @@ +""" +Operadores lógicos +""" + + +a = 6 > 5 +b = 30 == 15*3 + +mi_bool = a and b +print(mi_bool) + +mi_bool = a or b +print(mi_bool) + +mi_bool = not a +print(mi_bool) + +mi_bool = (4>5) and (5 == 2+5) +print(mi_bool) + +mi_bool = "perro" == "perro" +print() diff --git a/dia_04/03_control_de_frujo.py b/dia_04/03_control_de_frujo.py new file mode 100644 index 0000000..3b2069d --- /dev/null +++ b/dia_04/03_control_de_frujo.py @@ -0,0 +1,31 @@ +""" +Control de flujo + +if condición: + print(codigo) +elif otra_condición: + print(codigo) +else: +""" + +x = True + + +if 5 == 2: + print("Es correcto") +else: + print("Parece que es falso") + +edad = input("Dime tu edad: ") +edad = int(edad) + +if edad <= 17: + print("Eres menor de edad") + calificacion = input("Que nota sacaste? ") + calificacion = int(calificacion) + if calificacion >= 5: + print("Felicitaciones! Has aprobado") + else: + print("No aprobado") +else: + print("Eres adulto") diff --git a/dia_04/04_for.py b/dia_04/04_for.py new file mode 100644 index 0000000..b53741d --- /dev/null +++ b/dia_04/04_for.py @@ -0,0 +1,80 @@ +""" +Ejemplos de bucles for +""" + +nombres = ['Juan','Ana','Carlos','Belén','Fran'] + +for nombre in nombres: + print(f"Hola {nombre}") + +print("") + +lista = ['a','b','c','d'] + +for letra in lista: + numero_letra = lista.index(letra) + 1 + print(f"Letra {numero_letra}: {letra}") + +print("") + +for nombre in nombres: + if nombre.startswith('B'): + print(f"Hola {nombre}") + +print("") + +numeros = [1,2,3,4,5] +mi_valor = 0 + +for numero in numeros: + mi_valor += numero + print(mi_valor) +print(f"Total ha sumado {mi_valor}") +print("") + +# Si el numero de valores dentro de listas anidadas coincide +# se puede extraer su contenido buscando dos variables. +for i,j in [[1,2],['a','b'],[3,4]]: + print(i) + print(j) + +print("") + +# Diccionario + +dic = {'clave1':'a', 'clave2':'b', 'clave3':'c'} + +for item in dic: + print(item) +print("") + +for item in dic.items(): + print(item) +print("") + +for item in dic.values(): + print(item) +print("") + +for a,b in dic.items(): + print(a) + print(b) +print("") + +# Ejercicio bonito de separar la suma de números de una lista +# por pares e impares + +lista_numeros = [1,5,8,7,6,8,2,5,2,6,4,8,5,9,8,3,5,4,2,5,6,4] +suma_pares = 0 +suma_impares = 0 + +for numero in lista_numeros: + if numero % 2 == 0: + suma_pares = suma_pares + numero + else: + suma_impares = suma_impares + numero + +print(suma_pares) +print(suma_impares) + + diff --git a/dia_04/05_while.py b/dia_04/05_while.py new file mode 100644 index 0000000..a23c381 --- /dev/null +++ b/dia_04/05_while.py @@ -0,0 +1,56 @@ +""" +Ejemplos de bucle while +""" + +contador = 0 + +while contador < 10: + contador += 1 + print(f"Iteración número {contador}") + +print("Se cumplió la condición") + + + +respuesta = 's' + +while respuesta == 's': + respuesta = input("quieres seguir? (s/n) ") +else: + print("Gracias") + + +print("") + +# pass Sirve para reservar un lugar en un bucle, +# no utilizarlo para recuperar quizá luego + +while respuesta == 's': + pass +print("hola") + +print("") + +# break Sirve para romper un bucle y salir +nombre = input("Tu nombre: ") +for letra in nombre: + if letra == 'D': + break + print(letra) + +print("") + +# continue Interrumpe la iteración pero no sale, +# vuelve al inicio de la iteración +nombre = input("Tu nombre: ") +for letra in nombre: + if letra == 'D': + continue + print(letra) + + + +comando = "" +while comando.lower() != "salir": + comando = input("$ ") + print(comando) diff --git a/dia_04/06_rango.py b/dia_04/06_rango.py new file mode 100644 index 0000000..e5e0fef --- /dev/null +++ b/dia_04/06_rango.py @@ -0,0 +1,17 @@ +""" +Rango +""" + +# lista = [1,2,3,4,5] + +# Puedes evitar las listas de numeros con range +for numero in range(5): + print(numero) + +# Puedes decir el inicio, el final y los saltos +for numero in range(10,100,10): + print(numero) + +# Se puede meter en listas +lista = list(range(1,101)) +print(lista) diff --git a/dia_04/07_enumerador.py b/dia_04/07_enumerador.py new file mode 100644 index 0000000..6a91fc2 --- /dev/null +++ b/dia_04/07_enumerador.py @@ -0,0 +1,30 @@ +""" +Enumerador +""" + +lista = ['a', 'b', 'c'] +indice = 0 + +for item in lista: + print(indice, item) + indice += 1 + +# Con el enumerador es mucho más elegante +for item in enumerate(lista): + print(item) + +# La anterior devuelve un tuple, +# podemos separarla con una variable +for indice,item in enumerate(lista): + print(indice, item) + +# Junto a range podemos extraer un indice de la iteración +for indice,item in enumerate(range(50,55)): + print(indice, item) + +# Se puede utilizar para transformar una lista en un tuple + +mis_tuples = list(enumerate(lista)) +print(mis_tuples) +# Podemos acceder a un valor concreto a través de los indices +print(mis_tuples[1][1]) diff --git a/dia_04/08_zip.py b/dia_04/08_zip.py new file mode 100644 index 0000000..aa60a9b --- /dev/null +++ b/dia_04/08_zip.py @@ -0,0 +1,14 @@ +""" +Zip +""" + +nombres = ['Ana','Hugo','Valeria'] +edades = [65,29,42,55] +ciudades = ['Lima','Madrid','Mexico'] + +# Cuidao, zip guarda las listas con el numero mínimo de las listas + +combinados = list(zip(nombres,edades, ciudades)) + +for nombre,edad,ciudad in combinados: + print(f'{nombre} tiene {edad} años y vive en {ciudad}') diff --git a/dia_04/09_min_max.py b/dia_04/09_min_max.py new file mode 100644 index 0000000..1772d5d --- /dev/null +++ b/dia_04/09_min_max.py @@ -0,0 +1,29 @@ +""" +min() y max() +""" + +menor = min(56, 96, 72, 63, 35) +print(menor) + +mayor = max(56, 96, 72, 63, 35) +print(mayor) + +lista = [56, 96, 72, 63, 35] +print(f'El menor es {min(lista)} y el mayor es {max(lista)}') + + +# También funciona con strings, alfabéticamente, en listas +nombres = ['Juan', 'Pablo', 'Alicia', 'Carlos'] +print(min(nombres)) + +# y en strings directamente. Buscando primero en las mayúsculas +# y después en las minúsculas +nombre = "Iñigo" +print(max(nombre)) + + +# Y con los diccionarios +dic = {'C1':45,'C2':11} +print(min(dic)) # Esto revisa el diccionario completo +print(min(dic.values())) + diff --git a/dia_04/10_random.py b/dia_04/10_random.py new file mode 100644 index 0000000..6f75c73 --- /dev/null +++ b/dia_04/10_random.py @@ -0,0 +1,31 @@ +""" +random + +Necesitaremos importar métodos, +porque están en una librería llamada random + +Veremos estos métodos: +randint() +uniform() +random() +choice() +shuffle() +""" +from random import * + +aleatorio = randint(1, 50) +print(aleatorio) + +aleatorio_float = round(uniform(1, 10),4) +print(aleatorio_float) + +aleatorio_random = random() +print(aleatorio_random) + +colores = ['rosa', 'verde','negro','azul'] +aleatorio_choice = choice(colores) +print(aleatorio_choice) + +numeros = list(range(5,50,5)) +shuffle(numeros) +print(numeros) diff --git a/dia_04/11_comprension_listas.py b/dia_04/11_comprension_listas.py new file mode 100644 index 0000000..38a498d --- /dev/null +++ b/dia_04/11_comprension_listas.py @@ -0,0 +1,70 @@ +""" +Compresión de listas +""" + +# Las compresión de listas susituye el siguiente ejemplo +lista = [] + +palabra = "python" + +for letra in palabra: + lista.append(letra) + +print(lista) + +# Con una sintaxis más breve, de 4 a 1 linea +lista_comp = [letra for letra in "python"] + +print(lista_comp) + +# Ejemplo con operación +lista_num = [n /2 for n in range(0,21,2)] + +print(lista_num) + +# Ejemplo con condicional para agregar en la lista +lista_condici = [n for n in range(0,21,2) if n * 2 > 10] + +print(lista_condici) + +# Ejemplo anterior pero con else. Ahora es menos legible +# porque hay que ponerlo delante +# Lo que hacemos es sustituir el n por un texto +lista_else = [n if n * 2 > 10 else 'no' for n in range(0,21,2)] + +print(lista_else) + + +# Ejemplo práctico +## Transformar pies en metros + +pies = [10,20,30,40,50] + +metros = [] +for pie in pies: + metros.append(pie*3.281) +print(metros) + +## Ahora la compresión del código +metros_compr = [pie*3.281 for pie in pies] + +print(metros_compr) + +# Valores cuadrados +valores = [1, 2, 3, 4, 5, 6, 9.5] + +valores_cuadrados = [v**2 for v in valores] + +print(valores_cuadrados) + +# Guardar pares en la lista +valores_pares = [v for v in valores if (v%2 == 0)] +print(valores_pares) + +# De fahrenheit a celsius + +temperatura_fahrenheit = [32, 212, 275] + +grados_celsius = [(grados_fahrenheit-32)*(5/9) for grados_fahrenheit in temperatura_fahrenheit] + +print(grados_celsius) diff --git a/dia_04/12_match.py b/dia_04/12_match.py new file mode 100644 index 0000000..4c495a6 --- /dev/null +++ b/dia_04/12_match.py @@ -0,0 +1,57 @@ +""" +match +""" + +# Hasta ahora se usaba el if +serie = "N-02" + +if serie == "N-01": + print("Samsung") +elif serie == "N-02": + print("Nokia") +elif serie == "N-03": + print("Motorola") +else: + print("No existe ese producto") + +# En otros lenguajes ya se usaba swich case o parecidos +# A partir de la versión 3.10, python incorpora match + +match serie: + case "N-01": + print("Samsung") + case "N-02": + print("Nokia") + case "N-03": + print("Motorola") + case _: + print("No existe ese producto") + +# Ejemplo que muestra todo el potencial +# Permite encontrar patrones +cliente = {'nombre': + 'Federico', + 'edad': 45, + 'ocupacion': 'instructor'} + + +pelicula = {'titulo':'matrix', + 'ficha_tecnica':{'protagonista':'Keanu reeves', + 'director':'Lana y Lilly Wachowski'}} + +elementos = [cliente, pelicula, 'libro'] + +for e in elementos: + match e: + case {'nombre':nombre, + 'edad': edad, + 'ocupacion': ocupacion}: + print("Es un cliente") + print(nombre, edad, ocupacion) + case {'titulo':titulo, + 'ficha_tecnica':{'protagonista': protagonista, + 'director': director}}: + print("Es una pelicula") + print(titulo, protagonista, director) + case _: + print("No se que es esto") diff --git a/dia_04/13_programa04.py b/dia_04/13_programa04.py new file mode 100644 index 0000000..150e0c6 --- /dev/null +++ b/dia_04/13_programa04.py @@ -0,0 +1,123 @@ +""" +Programa día 4 - Juego "Adivina el número" +""" +# Importamos módulos +from random import randint +import itertools +import threading +import time +import sys +import os + + +# Funciones + +# Función limpiar consola +def clearConsole(): + command = 'clear' + if os.name in ('nt', 'dos'): # If Machine is running on Windows, use cls + command = 'cls' + os.system(command) + +# Función de la animación para 'pensar' + + +def animate(): + for c in itertools.cycle(['|', '/', '-', '\\']): + if DONE: + break + sys.stdout.write('\rPensando un número ' + c) + sys.stdout.flush() + time.sleep(0.1) + sys.stdout.write('\rYa tengo el número! ') + sys.stdout.write('\nA ver si aciertas, dime un número: ') + + +# Función validar input es un número +def validar(dato, tipos): + for tipo in tipos: + try: + return tipo(dato) + except ValueError: + pass + return None + + +# Limpiar la terminal +clearConsole() + +# Mensaje bienvenida +print("\n#########################") +print("JUEGO - Adivina el número") +print("#########################\n") + +# Pregunta nombre, saluda y explica el juego (Con opción a salir) +nombre = input("¿Cuál es tu nombre? ") +print(f"\nOk {nombre}, voy a pensar un número del 1 al 100.") +print("Tienes 8 intentos para adivinarlo\n") + +# Filigrana como que piensa la máquina + +DONE = False +t = threading.Thread(target=animate) +t.start() + +# El tiempo de ejecución +time.sleep(3) +DONE = True + +# Guardando el número secreto +n_secreto = randint(1, 100) + +# Bucle de intentos y control de flujo +for intentos in range(8): + + # Calcular intentos restantes + lista_intentos = list(range(8)) + lista_intentos.reverse() + intentos_restantes = lista_intentos.pop(intentos) + + # Pregunta posible número y valida que es de type número + while True: + n_posible = input("Dime un número: ") + x = validar(n_posible, (int, float, complex)) + if x is None: + print("Error: El dato introducido no es un número\n") + else: + break + + # Para comparar el número se necesita que sea integer + n_posible = int(n_posible) + + # Posibles casuísticas + # Si el número no está en el rango especificado + if (n_posible < 1) or (n_posible > 100): + print("\nEse número no está entre el 1 y el 100") + print( + f"Desperdiciaste un turno, te quedan {intentos_restantes} intentos") + + # Si el número es menor + elif n_posible > n_secreto: + print( + f"\nLo siento, has fallado.Te quedan {intentos_restantes} intentos.") + print("\n\tPista --> El número es menor.\n") + + # Si el número es mayor + elif n_posible < n_secreto: + print( + f"\nLo siento, has fallado.Te quedan {intentos_restantes} intentos.") + print("\n\tPista --> El número es mayor.\n") + + # Si se acierta el número + elif n_posible == n_secreto: + print("\n¡Ole! ¡¡¡¡HAS ACERTADO!!!!") + intentos += 1 + print(f"¡Felicidades {nombre}!\nLo conseguiste en {intentos} intentos") + break + + # Si se agotan los intentos + if intentos == 7: + print( + f"\n¡Vaya! Has gastado los 8 intentos.\nEl número pensado era el {n_secreto}.\n Otra vez será...\nCiao!") + +print("\n¡Espero que te hayas divertido!")