ADD dia 04

This commit is contained in:
Manuel Vergara 2023-04-12 21:54:25 +02:00
parent 8298e6bf22
commit 6700d1e9f0
13 changed files with 583 additions and 0 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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")

80
dia_04/04_for.py Normal file
View File

@ -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)

56
dia_04/05_while.py Normal file
View File

@ -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)

17
dia_04/06_rango.py Normal file
View File

@ -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)

30
dia_04/07_enumerador.py Normal file
View File

@ -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])

14
dia_04/08_zip.py Normal file
View File

@ -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}')

29
dia_04/09_min_max.py Normal file
View File

@ -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()))

31
dia_04/10_random.py Normal file
View File

@ -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)

View File

@ -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)

57
dia_04/12_match.py Normal file
View File

@ -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")

123
dia_04/13_programa04.py Normal file
View File

@ -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!")