You've already forked Curso-lenguaje-python
Restructure content and add notes from HolaMundo
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
This commit is contained in:
34
python-total/dia_05/01_metodos_ayuda_docs.py
Normal file
34
python-total/dia_05/01_metodos_ayuda_docs.py
Normal file
@@ -0,0 +1,34 @@
|
||||
"""
|
||||
Métodos, ayuda y documentación
|
||||
"""
|
||||
|
||||
dic = {'clave1': 100, 'clave2': 500}
|
||||
|
||||
a = dic.popitem()
|
||||
|
||||
print(a)
|
||||
print(dic)
|
||||
|
||||
|
||||
# Ejercicio 1
|
||||
exer1 = ",:_#,,,,,,:::____##Pyt%on_ _Total,,,,,,::#".lstrip(",:%_#")
|
||||
|
||||
print(exer1)
|
||||
|
||||
|
||||
# Ejercicio 2
|
||||
frutas = ["mango", "banana", "cereza", "ciruela", "pomelo"]
|
||||
|
||||
frutas.insert(3, "naranja")
|
||||
|
||||
print(frutas)
|
||||
|
||||
|
||||
# Ejercicio 3
|
||||
marcas_smartphones = {"Samsung", "Xiaomi", "Apple", "Huawei", "LG"}
|
||||
|
||||
marcas_tv = {"Sony", "Philips", "Samsung", "LG"}
|
||||
|
||||
conjuntos_aislados = marcas_smartphones.isdisjoint(marcas_tv)
|
||||
|
||||
print(conjuntos_aislados)
|
||||
32
python-total/dia_05/02_funciones.py
Normal file
32
python-total/dia_05/02_funciones.py
Normal file
@@ -0,0 +1,32 @@
|
||||
"""
|
||||
funciones
|
||||
"""
|
||||
|
||||
# Simpple
|
||||
|
||||
def suma5(nombre):
|
||||
"""
|
||||
Esto es una función para decir hola
|
||||
"""
|
||||
print("Hola! " + nombre)
|
||||
|
||||
name = input("Dime tu nombre: ")
|
||||
|
||||
for i in range(5):
|
||||
suma5(name)
|
||||
|
||||
# return
|
||||
def sumar(num1,num2):
|
||||
total = num1 + num2
|
||||
return total
|
||||
|
||||
resultado = sumar(10,5)
|
||||
|
||||
print(resultado)
|
||||
|
||||
# Ejercicio de codificación
|
||||
def invertir_palabra(palabra):
|
||||
reverso = palabra[::-1]
|
||||
return reverso
|
||||
|
||||
print(invertir_palabra("Python").upper())
|
||||
61
python-total/dia_05/03_funciones_dinamicas.py
Normal file
61
python-total/dia_05/03_funciones_dinamicas.py
Normal file
@@ -0,0 +1,61 @@
|
||||
"""
|
||||
funciones Dinamicas
|
||||
"""
|
||||
|
||||
# Simple, comprobar numeros de 3 cifras
|
||||
def chequear_3_cifras(numero):
|
||||
return numero in range(100,1000)
|
||||
|
||||
suma = 347 + 231
|
||||
|
||||
resultado = chequear_3_cifras(suma)
|
||||
print(resultado)
|
||||
|
||||
|
||||
# Comprobar de listas si los numeros tienen 3 cifras
|
||||
# return hará que se pare el bucle, como un break
|
||||
def chequear_3_cifras_listas(lista):
|
||||
for n in lista:
|
||||
if n in range(100,1000):
|
||||
return True
|
||||
else:
|
||||
pass
|
||||
# Para que el return false funcione bien debería estar indentado aquí
|
||||
|
||||
|
||||
lista_num = [1,34,21,15,23,2000]
|
||||
comprobacion = chequear_3_cifras_listas(lista_num)
|
||||
print(comprobacion)
|
||||
|
||||
## Siendo falso dará un tipo None
|
||||
print(type(comprobacion))
|
||||
## No tenía un return False
|
||||
|
||||
|
||||
# Ejercicio comprobar positivos
|
||||
def todos_positivos(lista):
|
||||
for n in lista:
|
||||
if n < 0:
|
||||
return False
|
||||
else:
|
||||
pass
|
||||
return True
|
||||
|
||||
lista_posibles_pos = [13,234,5343,7276,-1]
|
||||
|
||||
print(todos_positivos(lista_posibles_pos))
|
||||
|
||||
# Ejercicio sumar numeros entre 0 y 1000
|
||||
|
||||
def suma_menores(lista):
|
||||
resultado2 = 0
|
||||
for num in lista:
|
||||
if num > 0 and num < 1000:
|
||||
resultado2 += num
|
||||
else:
|
||||
pass
|
||||
return resultado2
|
||||
|
||||
lista_numeros = [13,234,5343,7276,-1]
|
||||
ver = suma_menores(lista_numeros)
|
||||
print(ver)
|
||||
34
python-total/dia_05/04_ejemplo_funcion.py
Normal file
34
python-total/dia_05/04_ejemplo_funcion.py
Normal file
@@ -0,0 +1,34 @@
|
||||
"""
|
||||
Ejemplo de función
|
||||
"""
|
||||
|
||||
# Para desempacar tuples sin funciones
|
||||
# por ejemplo, para saber el costo de los precios
|
||||
|
||||
precios_cafe = [('capuchino',1.5),('expresso',2.2),('moka',1.9)]
|
||||
|
||||
for cafe,precio in precios_cafe:
|
||||
print(precio * 0.45)
|
||||
|
||||
# Pero para saber cual es el café mas caro no nos sirve
|
||||
# Debemos usar una función:
|
||||
def cafe_mas_caro(lista_precios):
|
||||
precio_mayor = 0
|
||||
cafe_mas_caro = ''
|
||||
|
||||
for cafe,precio in lista_precios:
|
||||
if precio > precio_mayor:
|
||||
precio_mayor = precio
|
||||
cafe_mas_caro = cafe
|
||||
else:
|
||||
pass
|
||||
|
||||
return(cafe_mas_caro, precio_mayor)
|
||||
|
||||
## Podemos extraer las variables que retorna la función
|
||||
|
||||
cafe, precio = cafe_mas_caro(precios_cafe)
|
||||
|
||||
print(f"El café más caro es {cafe} con un precio de {precio}")
|
||||
|
||||
|
||||
47
python-total/dia_05/05_palito_mas_corto.py
Normal file
47
python-total/dia_05/05_palito_mas_corto.py
Normal file
@@ -0,0 +1,47 @@
|
||||
"""
|
||||
Interacción entre funciones
|
||||
|
||||
Programa "Escoge un palito"
|
||||
"""
|
||||
from random import shuffle
|
||||
|
||||
# Lista inicial y presentación
|
||||
palitos = ['-','--','---','----']
|
||||
|
||||
print("¡Hola!\n")
|
||||
print(f"Tenemos estos palitos:")
|
||||
for palito in palitos:
|
||||
print(palito)
|
||||
print("\nVamos a mezclarlos y a relacionarlos con un número.\n")
|
||||
|
||||
# Mezclar palitos
|
||||
def mezclar(lista):
|
||||
shuffle(palitos)
|
||||
return lista
|
||||
|
||||
# Pedir al usuario intento
|
||||
def probar_suerte():
|
||||
intento = ''
|
||||
while intento not in ['1','2','3','4']:
|
||||
intento = input("Elige un número del 1 al 4: ")
|
||||
if intento not in ['1','2','3','4']:
|
||||
print("\nError: Ingresa un valor válido\n")
|
||||
else:
|
||||
pass
|
||||
return int(intento)
|
||||
|
||||
# Comprobar intento
|
||||
def chequear_intento(lista,intento):
|
||||
if lista[intento - 1] == '-':
|
||||
print("¡Cogiste el palito más corto!\n")
|
||||
else:
|
||||
print("Lo siento, no es el más corto: \n")
|
||||
|
||||
print(lista[intento-1])
|
||||
print()
|
||||
|
||||
# Invocamos las funciones
|
||||
|
||||
palitos_mezclados = mezclar(palitos)
|
||||
seleccion = probar_suerte()
|
||||
chequear_intento(palitos_mezclados, seleccion)
|
||||
59
python-total/dia_05/06_lanzar_dados.py
Normal file
59
python-total/dia_05/06_lanzar_dados.py
Normal file
@@ -0,0 +1,59 @@
|
||||
"""
|
||||
Interacción entre funciones
|
||||
LANZAR DOS DADOS
|
||||
"""
|
||||
from random import randint
|
||||
|
||||
# Función para obtener dos valores aleatorios
|
||||
# entre el 1 y el 6
|
||||
|
||||
|
||||
def lanzar_dados():
|
||||
dado1 = randint(1, 6)
|
||||
dado2 = randint(1, 6)
|
||||
|
||||
return dado1, dado2
|
||||
|
||||
# Función para evaluar la tirada
|
||||
|
||||
|
||||
def evaluar_jugada(num1, num2):
|
||||
suma_dados = num1 + num2
|
||||
text1 = "La suma de tus dados es "
|
||||
if suma_dados <= 4:
|
||||
suma_dados = str(suma_dados)
|
||||
mensaje = text1 + suma_dados + ". \nLamentable\n"
|
||||
elif suma_dados > 4 and suma_dados <= 7:
|
||||
suma_dados = str(suma_dados)
|
||||
mensaje = text1 + suma_dados + ". \nBueno... esta bien.\n"
|
||||
elif suma_dados > 7 and suma_dados < 10:
|
||||
suma_dados = str(suma_dados)
|
||||
mensaje = text1 + suma_dados + ". \nBuena tirada!\n"
|
||||
else:
|
||||
suma_dados = str(suma_dados)
|
||||
mensaje = text1 + suma_dados + ". \nParece una jugada ganadora\n"
|
||||
|
||||
return mensaje
|
||||
|
||||
|
||||
# Presentación
|
||||
print("¡Vamos a tirar los dados!\n")
|
||||
|
||||
bandera = 's'
|
||||
while bandera.lower() != "n":
|
||||
|
||||
# Control de flujo
|
||||
if bandera.lower() == 's':
|
||||
# Recogida de los valores
|
||||
n1, n2 = lanzar_dados()
|
||||
resultado = evaluar_jugada(n1, n2)
|
||||
print(f"{resultado}")
|
||||
elif bandera.lower() != 'n' or bandera.lower() != 's':
|
||||
print("¿Que me estás contando?\n\t Sí ---> s\n\t No ---> n")
|
||||
bandera = 's'
|
||||
else:
|
||||
print("\n¡Ciao!")
|
||||
break
|
||||
|
||||
# Pregunta si quieres seguir jugando
|
||||
bandera = input("¿Quieres tirar de nuevo? (s/n) ")
|
||||
44
python-total/dia_05/07_limpiar_lista_promedio.py
Normal file
44
python-total/dia_05/07_limpiar_lista_promedio.py
Normal file
@@ -0,0 +1,44 @@
|
||||
lista_numeros = [1, 2, 15, 7, 2, 3]
|
||||
|
||||
|
||||
def reducir_lista(lista):
|
||||
|
||||
lista.sort()
|
||||
lista_limpia = set(lista)
|
||||
max_value = max(lista_limpia)
|
||||
lista_limpia.remove(max_value)
|
||||
return lista_limpia
|
||||
|
||||
|
||||
def promedio(lista):
|
||||
total = 0
|
||||
for x in lista:
|
||||
total += x
|
||||
resultado = total / len(lista)
|
||||
return resultado
|
||||
|
||||
|
||||
lista2 = reducir_lista(lista_numeros)
|
||||
media = promedio(lista2)
|
||||
|
||||
print(f"La lista limpia es {lista2}")
|
||||
print(f"El valor medio de la lista resultante es {media}")
|
||||
|
||||
# Otra opción de limpiar la lista
|
||||
|
||||
|
||||
def reducir_lista2(lista):
|
||||
lista.sort()
|
||||
lista_limpia = []
|
||||
for n in lista:
|
||||
if n not in lista_limpia:
|
||||
lista_limpia.append(n)
|
||||
|
||||
max_value = max(lista_limpia)
|
||||
lista_limpia.remove(max_value)
|
||||
return lista_limpia
|
||||
|
||||
|
||||
lista3 = reducir_lista2(lista_numeros)
|
||||
|
||||
print(f"Otra opción de limpiar la lista: {lista3}")
|
||||
26
python-total/dia_05/08_lanzar_moneda.py
Normal file
26
python-total/dia_05/08_lanzar_moneda.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from random import choice
|
||||
|
||||
|
||||
def lanzar_moneda():
|
||||
lista = ['Cara', 'Cruz']
|
||||
cara_moneda = choice(lista)
|
||||
return cara_moneda
|
||||
|
||||
|
||||
def probar_suerte(resultado, lista):
|
||||
if resultado == 'Cara':
|
||||
print('La lista se autodestruirá')
|
||||
lista.clear()
|
||||
elif resultado == 'Cruz':
|
||||
print("La lista fue salvada")
|
||||
else:
|
||||
pass
|
||||
|
||||
return lista
|
||||
|
||||
|
||||
lista_numeros = [1, 3, 5, 2, 3, 145]
|
||||
mon = lanzar_moneda()
|
||||
mensaje = probar_suerte(mon, lista_numeros)
|
||||
|
||||
print(mon, mensaje)
|
||||
172
python-total/dia_05/09_args_indeterminados.py
Normal file
172
python-total/dia_05/09_args_indeterminados.py
Normal file
@@ -0,0 +1,172 @@
|
||||
"""
|
||||
Argumentos indeterminados
|
||||
|
||||
*args ---> Arguments
|
||||
Para definir funciones que acepten
|
||||
un número indeterminado de variables
|
||||
|
||||
**kwargs ---> Keyword arguments
|
||||
Definen funciones que acepten
|
||||
diccionarios. Podemos añadir un número indeterminado
|
||||
de variables y de key=value
|
||||
"""
|
||||
|
||||
# Ejemplo de *args
|
||||
# Argumentos args es una tupla, no se puede modificar
|
||||
|
||||
|
||||
def suma(*numeros):
|
||||
resultado = 0
|
||||
for numero in numeros:
|
||||
resultado += numero
|
||||
return resultado
|
||||
|
||||
|
||||
calculo = suma(24, 45, 22, 43, 454, 23, 12)
|
||||
|
||||
print(calculo)
|
||||
|
||||
# Ejercicio 1 - Suma cuadrados
|
||||
|
||||
|
||||
def suma_cuadrados(*numeros):
|
||||
resultado = 0
|
||||
for numero in numeros:
|
||||
resultado += numero**2
|
||||
|
||||
return resultado
|
||||
|
||||
|
||||
print(suma_cuadrados(1, 2, 3))
|
||||
|
||||
|
||||
# Ejercicio 2 - Suma solo absolutos
|
||||
|
||||
def suma_absolutos(*numeros):
|
||||
resultado = 0
|
||||
for numero in numeros:
|
||||
resultado += abs(numero)
|
||||
|
||||
return resultado
|
||||
|
||||
|
||||
print(suma_absolutos(1, -2, 3))
|
||||
|
||||
# Ejercicio 3 - mezclar variable y *args
|
||||
|
||||
|
||||
def numeros_persona(nombre, *numeros):
|
||||
suma_numeros = 0
|
||||
for numero in numeros:
|
||||
suma_numeros += numero
|
||||
|
||||
suma_numeros = str(suma_numeros)
|
||||
para_devolver = nombre + " la suma de tus números es " + suma_numeros
|
||||
return para_devolver
|
||||
|
||||
|
||||
print(numeros_persona("Mun", 1, 3, 4, 2, 4))
|
||||
|
||||
|
||||
# Ejemplo de **kwargs - Explicación conceptual
|
||||
# Cuando pasamos los valores al kwargs
|
||||
# este lo convierte en diccionario
|
||||
|
||||
def suma_dic(**kwargs):
|
||||
print(type(kwargs))
|
||||
|
||||
|
||||
suma_dic(x=3, y=5, z=2)
|
||||
|
||||
# Otro ejemplo
|
||||
|
||||
|
||||
def suma_diccio(**kwargs):
|
||||
|
||||
total = 0
|
||||
|
||||
for clave, valor in kwargs.items():
|
||||
print(f"{clave} es igual a {valor}")
|
||||
total += valor
|
||||
return total
|
||||
|
||||
|
||||
print(suma_diccio(x=3, y=5, z=2))
|
||||
|
||||
|
||||
# Con lo cual, también podemos añadir
|
||||
# - Parámetros
|
||||
# - *args
|
||||
# - **kwargs
|
||||
# Y todo en la misma función
|
||||
# Deberían seguir siempre este orden
|
||||
|
||||
def prueba(num1, num2, *args, **kwargs):
|
||||
|
||||
print(f'El primer valor es {num1}')
|
||||
print(f'El segundo valor es {num2}')
|
||||
|
||||
for arg in args:
|
||||
print(f"arg es igual a {arg}")
|
||||
|
||||
for clave, valor in kwargs.items():
|
||||
print(f"{clave} es igual a {valor}")
|
||||
|
||||
|
||||
prueba(15, 50, 100, 200, 300, 400, x='uno', y='dos', z='tres')
|
||||
|
||||
|
||||
# Truco para desempacar listas o tuplas
|
||||
# Poner los astericos en los argumentos que se le pasa a la función
|
||||
|
||||
def la_lista(*lista, **dic):
|
||||
|
||||
for arg in lista:
|
||||
print(f"arg es igual a {arg}")
|
||||
|
||||
for clave, valor in dic.items():
|
||||
print(f"{clave} es igual a {valor}")
|
||||
|
||||
|
||||
para_args = [1000, 2000, 3000, 4000]
|
||||
kwargs = {'x': 'uno', 'y': 'dos', 'z': 'tres'}
|
||||
|
||||
la_lista(*para_args, **kwargs)
|
||||
|
||||
|
||||
# Ejercicio 1 - cantidad de atributos
|
||||
|
||||
def cantidad_atributos(**cuentas):
|
||||
contador = 0
|
||||
for x in cuentas.items():
|
||||
contador += 1
|
||||
return contador
|
||||
|
||||
print(len(cuentas))
|
||||
|
||||
|
||||
print(cantidad_atributos(x='color_ojos'))
|
||||
|
||||
# Ejercicio 2 - Lista atributos de values
|
||||
|
||||
|
||||
def lista_atributos(**lista):
|
||||
listado = []
|
||||
for clave in lista.values():
|
||||
listado.append(clave)
|
||||
return listado
|
||||
|
||||
|
||||
print(lista_atributos(x='uno', y='dos', z='tres'))
|
||||
|
||||
# Ejercicio 3 -
|
||||
|
||||
|
||||
def describir_persona(nombre, **kwargs):
|
||||
print(f'Características de {nombre}:')
|
||||
|
||||
for nombre_argumento, valor_argumento in kwargs.items():
|
||||
print(f'{nombre_argumento}: {valor_argumento}')
|
||||
|
||||
|
||||
describir_persona("María", color_ojos="azules", color_pelo="rubio")
|
||||
163
python-total/dia_05/10_problemas_practicos.py
Normal file
163
python-total/dia_05/10_problemas_practicos.py
Normal file
@@ -0,0 +1,163 @@
|
||||
"""
|
||||
Problemas prácticos
|
||||
"""
|
||||
|
||||
# Ejercicio ############
|
||||
# Crea una función llamada devolver_distintos() que reciba 3 integers como parámetros.
|
||||
# Si la suma de los 3 números es mayor a 15, va a devolver el número mayor.
|
||||
# Si la suma de los 3 números es menor a 10, va a devolver el número menor.
|
||||
# Si la suma de los 3 números es un valor entre 10 y 15 (incluidos) va a devolver el número de valor intermedio.
|
||||
|
||||
|
||||
def devolver_distintos(num1, num2, num3):
|
||||
suma = num1 + num2 + num3
|
||||
lista = [num1, num2, num3]
|
||||
if suma > 15:
|
||||
return max(lista)
|
||||
elif suma < 10:
|
||||
return min(lista)
|
||||
else:
|
||||
lista.sort()
|
||||
return lista[1]
|
||||
|
||||
|
||||
print(devolver_distintos(6, 5, 3))
|
||||
|
||||
|
||||
# Ejercicio 2 ############
|
||||
# Escribe una función (puedes ponerle cualquier nombre que quieras)
|
||||
# que reciba cualquier palabra como parámetro,
|
||||
# y que devuelva todas sus letras únicas (sin repetir) pero en orden alfabético.
|
||||
# Por ejemplo si al invocar esta función pasamos la palabra "entretenido",
|
||||
# debería devolver ['d', 'e', 'i', 'n', 'o', 'r', 't']
|
||||
|
||||
def cualquier(palabra):
|
||||
mi_set = set()
|
||||
for letra in palabra:
|
||||
mi_set.add(letra)
|
||||
|
||||
lista = list(mi_set)
|
||||
lista.sort()
|
||||
return lista
|
||||
|
||||
|
||||
print("\n")
|
||||
print(cualquier('entretenido'))
|
||||
print(cualquier('cascarrabias'))
|
||||
|
||||
|
||||
# Ejercicio 3 ############
|
||||
# Escribe una función que requiera una cantidad indefinida de argumentos.
|
||||
# Lo que hará esta función es devolver True
|
||||
# si en algún momento se ha ingresado al numero cero repetido dos veces consecutivas.
|
||||
# Por ejemplo:
|
||||
# (5,6,1,0,0,9,3,5) >>> True
|
||||
# (6,0,5,1,0,3,0,1) >>> False
|
||||
|
||||
def me_gustan_los_ceros(*ceros):
|
||||
|
||||
contador = 0
|
||||
for num in ceros:
|
||||
|
||||
if num == 0:
|
||||
contador += 1
|
||||
if contador == 2:
|
||||
contador = 0
|
||||
return True
|
||||
elif num != 0:
|
||||
contador = 0
|
||||
else:
|
||||
pass
|
||||
|
||||
return False
|
||||
|
||||
|
||||
print("\n")
|
||||
print(me_gustan_los_ceros(5, 6, 1, 0, 0, 9, 3, 5))
|
||||
print(me_gustan_los_ceros(6, 0, 5, 1, 0, 3, 0, 1))
|
||||
|
||||
# Solución curso
|
||||
|
||||
|
||||
def ceros_vecinos(*args):
|
||||
contador = 0
|
||||
|
||||
for num in args:
|
||||
|
||||
if contador + 1 == len(args):
|
||||
return False
|
||||
elif args[contador] == 0 and args[contador + 1] == 0:
|
||||
return True
|
||||
else:
|
||||
contador += 1
|
||||
return False
|
||||
|
||||
|
||||
print("\n")
|
||||
print(ceros_vecinos(5, 6, 1, 0, 0, 9, 3, 5))
|
||||
print(ceros_vecinos(6, 0, 5, 1, 0, 3, 0, 1))
|
||||
|
||||
|
||||
# Ejercicio 4 ############
|
||||
# Escribe una función llamada contar_primos() que requiera un solo argumento numérico.
|
||||
# Esta función va a mostrar en pantalla todos los números primos existentes
|
||||
# en el rango que va desde cero hasta ese número incluido,
|
||||
# y va a devolver la cantidad de números primos que encontró.
|
||||
# Aclaración, por convención el 0 y el 1 no se consideran primos.
|
||||
|
||||
|
||||
def primo(numero):
|
||||
if numero == 0 or numero == 1 or numero == 4:
|
||||
return False
|
||||
for x in range(2, int(numero/2)):
|
||||
if numero % x == 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def primos(rango_max):
|
||||
rango_max += 1
|
||||
|
||||
lista_num = [n for n in range(1, rango_max)]
|
||||
|
||||
primos = []
|
||||
|
||||
for numero in lista_num:
|
||||
es_primo = primo(numero)
|
||||
if es_primo:
|
||||
primos.append(numero)
|
||||
contar = len(primos)
|
||||
|
||||
rango_max -= 1
|
||||
print(f"\nEntre 0 y el {rango_max} hay {contar} números primos:")
|
||||
|
||||
print(*primos, sep=' ')
|
||||
|
||||
|
||||
primos(1000)
|
||||
|
||||
|
||||
# Solución curso
|
||||
|
||||
def contar_primos(numero):
|
||||
primos2 = [2]
|
||||
iteracion = 3
|
||||
|
||||
if numero < 2:
|
||||
return 0
|
||||
|
||||
while iteracion <= numero:
|
||||
for n in range(3, iteracion, 2):
|
||||
if iteracion % n == 0:
|
||||
iteracion += 2
|
||||
break
|
||||
else:
|
||||
primos2.append(iteracion)
|
||||
iteracion += 2
|
||||
|
||||
print(primos2)
|
||||
return len(primos2)
|
||||
|
||||
|
||||
print("\n")
|
||||
print(contar_primos(1000))
|
||||
349
python-total/dia_05/11_programa05.py
Normal file
349
python-total/dia_05/11_programa05.py
Normal file
@@ -0,0 +1,349 @@
|
||||
'''
|
||||
Programa día 5 - Juego del ahorcado
|
||||
'''
|
||||
from random import choice
|
||||
import os
|
||||
|
||||
|
||||
def clearConsole():
|
||||
# Función limpiar consola
|
||||
command = 'clear'
|
||||
if os.name in ('nt', 'dos'): # If Machine is running on Windows, use cls
|
||||
command = 'cls'
|
||||
os.system(command)
|
||||
|
||||
|
||||
def palabra_aleatoria():
|
||||
# Función que guarda palabras en una lista y escoge una aleatoria con choice
|
||||
lista_palabras = ('Argentina', 'Colombia', 'Guadalupe', 'Herramientas', 'Hogar', 'Murcielago',
|
||||
'Uruguay', 'abdomen', 'abrelatas', 'abrigo', 'abuelo', 'aburrimiento',
|
||||
'accion', 'agridulce', 'aguila', 'aguja', 'ahorcado', 'aire',
|
||||
'alegria', 'Alemania', 'alfabeto', 'alimento', 'alma', 'almacen',
|
||||
'almendra', 'alto', 'altura', 'amanecer', 'amarillo', 'ambiente',
|
||||
'ambulancia', 'amiga', 'amigo', 'amor', 'analisis', 'ancho',
|
||||
'anciano', 'animal', 'anochecer', 'aparato', 'apartamento', 'apoyo',
|
||||
'araña', 'arbol', 'archiduque', 'area', 'aritmetica', 'arma',
|
||||
'arroz', 'arte', 'articulo', 'ascensor', 'asiento', 'asociacion',
|
||||
'aspecto', 'ataque', 'atencion', 'atmosfera', 'atomo', 'atun',
|
||||
'aumento', 'autobus', 'automovil', 'coche', 'auto', 'autopista',
|
||||
'autor', 'autoridad', 'avance', 'avena', 'avenida', 'avion',
|
||||
'ayer', 'ayuda', 'azul', 'año', 'babosa', 'baloncesto',
|
||||
'bambu', 'barba', 'barco', 'barro', 'lodo', 'base',
|
||||
'bateria', 'bebe', 'bebida', 'beneficio', 'bicho', 'bigote',
|
||||
'billete', 'bisabuelo', 'bisnieto', 'blanco', 'boca', 'boleto',
|
||||
'bolsa', 'bolsillo', 'bolso', 'bomberos', 'bondad', 'bosque',
|
||||
'boton', 'bragas', 'calzon', 'brazo', 'buey', 'bufanda',
|
||||
'bus', 'busqueda', 'caballo', 'yegua', 'cabello', 'cabeza',
|
||||
'cable', 'cabo', 'cadera', 'calamar', 'calcetines', 'calculadora',
|
||||
'calendario', 'calidad', 'calle', 'calor', 'calzoncillo', 'cama',
|
||||
'camara', 'camaron', 'cambio', 'camino', 'camisa', 'camiseta',
|
||||
'campaña', 'campo', 'cansancio', 'cantidad', 'capacidad', 'capital',
|
||||
'cara', 'caracol', 'caracter', 'caracteristica', 'cargo', 'carne',
|
||||
'carpeta', 'carrera', 'carretera', 'carta', 'cartera', 'casa',
|
||||
'casco', 'caso', 'castaña', 'castaño', 'causa', 'cebada',
|
||||
'celeste', 'celular', 'centimetro', 'cerdo', 'cerebro', 'cero',
|
||||
'cerradura', 'cerro', 'monte', 'montaña', 'cesped', 'chaqueta',
|
||||
'chino', 'cielo', 'cien', 'ciento', 'ciencia', 'cierre',
|
||||
'ciervo', 'cinco', 'cine', 'cintura', 'cinturon', 'circulo',
|
||||
'ciruela', 'ciudad', 'claridad', 'clase', 'clavel', 'clavo',
|
||||
'clima', 'club', 'cocodrilo', 'codigo', 'codo', 'cola',
|
||||
'colega', 'colegio', 'color', 'coma', 'comercio', 'comida',
|
||||
'comienzo', 'comision', 'compañia', 'competencia', 'competicion',
|
||||
'competencia', 'computadora', 'comunicacion', 'comunidad', 'concepto',
|
||||
'conciencia', 'condicion', 'conejo', 'conexion', 'confianza', 'conflicto',
|
||||
'congreso', 'conjunto', 'conocido', 'conocimiento', 'consecuencia', 'consejo',
|
||||
'constitucion', 'construccion', 'consumo', 'contenido', 'control', 'corazon',
|
||||
'cordones', 'corriente', 'corte', 'cosa', 'costa', 'creacion',
|
||||
'crecimiento', 'cremallera', 'criatura', 'crisis', 'cuaderno', 'cuadro',
|
||||
'cuarto', 'cuatro', 'cucaracha', 'cuello', 'cuenta', 'cuerda',
|
||||
'cordel', 'cordon', 'cuerpo', 'cuervo', 'cuestion', 'culo',
|
||||
'cultura', 'curiosidad', 'curso', 'dama', 'dato', 'decada',
|
||||
'decision', 'decreto', 'dedo', 'defensa', 'demanda', 'democracia',
|
||||
'departamento', 'deporte', 'derecha', 'derecho', 'desarrollo', 'deseo',
|
||||
'desierto', 'despejado', 'destino', 'destruccion', 'deterioro', 'dia',
|
||||
'diagonal', 'diario', 'diarrea', 'dibujo', 'diccionario', 'dictadura',
|
||||
'diente', 'diez', 'diferencia', 'dinero', 'dios', 'direccion',
|
||||
'director', 'disposición', 'documento', 'dolor', 'domingo', 'don',
|
||||
'dormitorio', 'dos', 'doña', 'dragon', 'duda', 'economia',
|
||||
'edad', 'edificio', 'educacion', 'efecto', 'ejemplo', 'eleccion',
|
||||
'electricidad', 'elefante', 'elemento', 'elevador', 'empatia', 'empleo',
|
||||
'empresa', 'encuentro', 'energia', 'enfermedad', 'enojo', 'enfado',
|
||||
'entorno', 'entrada', 'entretenimiento', 'epoca', 'equipo', 'equivocacion',
|
||||
'era', 'escalera', 'escritorio', 'escritura', 'escuela', 'escultura',
|
||||
'esfera', 'esfuerzo', 'espacio', 'espalda', 'español', 'especie',
|
||||
'espectaculo', 'espectador', 'espera', 'espinilla', 'espiritu', 'esposa',
|
||||
'esposo', 'esquina', 'estacion', 'parada', 'estado', 'este',
|
||||
'estilo', 'estomago', 'estrella', 'estructura', 'estruendo', 'estudio',
|
||||
'etapa', 'existencia', 'exito', 'experiencia', 'expresion', 'extasis',
|
||||
'exterior', 'fabrica', 'facilidad', 'falda', 'falta', 'familia',
|
||||
'fase', 'favor', 'fecha', 'ferrocarril', 'figura', 'fin',
|
||||
'final', 'flor', 'fondo', 'forma', 'formacion', 'formalidad',
|
||||
'fracaso', 'frances', 'frente', 'fruta', 'fuego', 'fuerza',
|
||||
'funcion', 'futuro', 'gafas', 'galaxia', 'galleta', 'gallina',
|
||||
'gas', 'gaseosa', 'gato', 'gente', 'geografia', 'gluteos',
|
||||
'gobernador', 'intendente', 'alcalde', 'gobierno', 'gorrion', 'grabado',
|
||||
'grado', 'gramo', 'gripe', 'gris', 'grupo', 'guerra',
|
||||
'guitarra', 'habitacion', 'halcon', 'harina', 'hermano', 'hielo',
|
||||
'hierro', 'higado', 'hijo', 'hilo', 'historia', 'hogar',
|
||||
'hoja', 'hombre', 'hombro', 'hongo', 'hora', 'hotel',
|
||||
'hoy', 'hueso', 'humanidad', 'humano', 'idea', 'extranjero',
|
||||
'imagen', 'individuo', 'informacion', 'informatica', 'informe', 'ingles',
|
||||
'inicio', 'insecto', 'instante', 'instituto', 'intento', 'interes',
|
||||
'interior', 'interrupcion', 'investigacion', 'izquierda', 'japones',
|
||||
'jirafa', 'joroba', 'judias', 'guisantes', 'jueves', 'juguete',
|
||||
'julio', 'kilo', 'kilometro', 'labio', 'lado', 'lagarto',
|
||||
'laguna', 'lago', 'langosta', 'largo', 'longitud', 'leon',
|
||||
'ley', 'libertad', 'libro', 'libros', 'limon', 'litro',
|
||||
'llave', 'llero', 'lluvia', 'logro', 'lombriz', 'loro',
|
||||
'lugar', 'luna', 'lunes', 'luz', 'madre', 'manantial',
|
||||
'manera', 'manga', 'mano', 'manzana', 'mar', 'oceano',
|
||||
'maravilla', 'mariposa', 'marisco', 'marron', 'cafe', 'martes',
|
||||
'matrimonio', 'mausoleo', 'mayoria', 'mañana', 'medida', 'mediodia',
|
||||
'mejora', 'memoria', 'mente', 'mentira', 'mercado', 'mes',
|
||||
'mesa', 'metal', 'metalico', 'metro', 'miedo', 'miercoles',
|
||||
'mil', 'milenio', 'milimetro', 'millon', 'ministro', 'minoria',
|
||||
'minuto', 'modo', 'molecula', 'molusco', 'momento', 'moneda',
|
||||
'mono', 'mosca', 'mosquito', 'movimiento', 'mueble', 'muerte',
|
||||
'mujer', 'mundo', 'municipio', 'musculo', 'musica', 'muslo',
|
||||
'muñeca', 'nacimiento', 'nacion', 'naranja', 'naranja', 'anaranjado',
|
||||
'nariz', 'naturaleza', 'necesidad', 'negro', 'nieto', 'nieve',
|
||||
'nivel', 'niño', 'noche', 'nombre', 'norma', 'norte',
|
||||
'notas', 'noticia', 'nublado', 'nueve', 'nuez', 'numero',
|
||||
'objetivo', 'meta', 'objeto', 'obligacion', 'obra', 'ocasion',
|
||||
'ocho', 'oeste', 'oficina', 'oido', 'ojo', 'olfato',
|
||||
'omnibus', 'orden', 'ordenador', 'oreja', 'organizacion', 'origen',
|
||||
'oro', 'oveja', 'padre', 'pais', 'pajaro', 'palabra',
|
||||
'palma', 'panel', 'pantalla', 'pantalon', 'papel', 'paraguas',
|
||||
'parasol', 'pareja', 'parlamentario', 'congresista', 'senador', 'diputado',
|
||||
'parlante', 'parte', 'partido', 'pasado', 'paso', 'pasto',
|
||||
'cesped', 'pata', 'patatas', 'papas', 'paz', 'pecho',
|
||||
'pelusa', 'pensamiento', 'pera', 'percepcion', 'periferia', 'periodico',
|
||||
'periodismo', 'perjuicio', 'permiso', 'perro', 'persona', 'personalidad',
|
||||
'peso', 'pez', 'pie', 'piel', 'pierna', 'pilar',
|
||||
'pino', 'pintura', 'piscina', 'piso', 'placer', 'planeta',
|
||||
'planta', 'plata', 'platano', 'playa', 'plomo', 'poblacion',
|
||||
'policia', 'polilla', 'politica', 'politico', 'pomelo', 'pomo',
|
||||
'posavasos', 'posibilidad', 'posicion', 'potencia', 'precio', 'tarifa',
|
||||
'pregunta', 'prenda', 'presencia', 'presente', 'presidente', 'primo',
|
||||
'principio', 'probabilidad', 'problema', 'proceso', 'produccion', 'producto',
|
||||
'profesion', 'programa', 'progreso', 'prohibicion', 'provincia', 'proyecto',
|
||||
'pueblo', 'puerta', 'pulpo', 'punto', 'quejido', 'rabano',
|
||||
'raiz', 'raiz', 'origen', 'fuente', 'rana', 'raton',
|
||||
'rata', 'rayo', 'razon', 'realidad', 'rectangulo', 'recuerdo',
|
||||
'reduccion', 'relacion', 'religion', 'representante', 'reproduccion',
|
||||
'resfriado', 'respuesta', 'resultado', 'retroceso', 'reunion', 'revista',
|
||||
'rio', 'rodilla', 'rojo', 'ropa', 'rosa', 'rosado', 'ruta',
|
||||
'sabado', 'sal', 'salchicha', 'saltamontes', 'salud', 'sandia',
|
||||
'sangre', 'sardina', 'secreto', 'sector', 'secuencia', 'segundo',
|
||||
'seguridad', 'seis', 'selva', 'jungla', 'semana', 'semilla',
|
||||
'sensacion', 'sentido', 'ser', 'serie', 'serpiente', 'servicio',
|
||||
'señor', 'señora', 'siete', 'siglo', 'significado', 'silla', 'simbolo',
|
||||
'similitud', 'sistema', 'situacion', 'sobrino', 'sociedad', 'sol',
|
||||
'solapa', 'cuello', 'solicitud', 'solucion', 'sombrilla', 'sonido',
|
||||
'sorpresa', 'subterraneo, metro', 'suciedad', 'suelo', 'suerte',
|
||||
'sugerencia', 'sujetador', 'sosten', 'superficie', 'sur',
|
||||
'sustancia', 'susto', 'tacto', 'tallo', 'talon', 'tamaño', 'tarde',
|
||||
'tarima', 'telefono', 'televidente', 'tema', 'temor', 'texto',
|
||||
'tiempo', 'tierra', 'tigre', 'tio', 'tipo', 'tomate', 'tormenta',
|
||||
'torrefacto', 'total', 'trabajo', 'trafico', 'trancar', 'transaccion',
|
||||
'transcurso', 'transito', 'transporte', 'trasero', 'tren', 'tres',
|
||||
'triangulo', 'trigo', 'tristeza', 'trueno', 'tulipan', 'universidad',
|
||||
'universo', 'uno', 'uso', 'utilizacion', 'utensilio', 'uña', 'vaca',
|
||||
'vacaciones', 'valor', 'vanidad', 'vapor', 'vaso', 'vegetal',
|
||||
'vehiculo', 'velocidad', 'ventana', 'verano', 'verdad', 'verde',
|
||||
'verdura', 'vez', 'via', 'vida', 'vidrio', 'viento', 'viernes',
|
||||
'villa', 'violeta', 'violin', 'visita', 'vista', 'volumen',
|
||||
'voz', 'vuelto, cambio', 'xilofonoGente', 'zanahoria',
|
||||
'region', 'zapatilla', 'zapato', 'zona')
|
||||
|
||||
palabra_secreta = choice(lista_palabras).lower()
|
||||
|
||||
palabra_secreta = palabra_secreta.replace('á', 'a').replace('é', 'e').replace(
|
||||
'í', 'i').replace('ó', 'o').replace('ú', 'u')
|
||||
|
||||
return palabra_secreta
|
||||
|
||||
|
||||
def mostrar_guiones(palabra_secreta):
|
||||
# Recibe la palabra de la función anterior.
|
||||
# Crea los guiones y separa las letras en una lista
|
||||
clave = 0
|
||||
dic = {}
|
||||
rallitas = {}
|
||||
|
||||
for i in palabra_secreta:
|
||||
clave += 1
|
||||
dic[clave] = i
|
||||
|
||||
rallitas[clave] = '-'
|
||||
|
||||
return dic, rallitas
|
||||
|
||||
|
||||
def mostrar_letras_acertadas():
|
||||
|
||||
cuenta_letra = 0
|
||||
for k, v in dic_letras.items():
|
||||
|
||||
if v == letra_user:
|
||||
cuenta_letra += 1
|
||||
dic_guiones[k] = letra_user
|
||||
else:
|
||||
pass
|
||||
|
||||
if cuenta_letra == 1:
|
||||
sing_plural = 'letra'
|
||||
else:
|
||||
sing_plural = 'letras'
|
||||
|
||||
print(f'Desvelamos {cuenta_letra} {sing_plural}: ')
|
||||
print(*dic_guiones.values(), sep=' ')
|
||||
print()
|
||||
|
||||
|
||||
def ahorcado_intentos():
|
||||
if intentos == 6:
|
||||
print(" ____")
|
||||
print(" | |")
|
||||
print(" | ")
|
||||
print(" | ")
|
||||
print(" | ")
|
||||
print("_|_")
|
||||
elif intentos == 5:
|
||||
print(" ____")
|
||||
print(" | |")
|
||||
print(" | O")
|
||||
print(" | ")
|
||||
print(" | ")
|
||||
print("_|_")
|
||||
elif intentos == 4:
|
||||
print(" ____")
|
||||
print(" | |")
|
||||
print(" | O")
|
||||
print(" | |")
|
||||
print(" | ")
|
||||
print("_|_")
|
||||
elif intentos == 3:
|
||||
print(" ____")
|
||||
print(" | |")
|
||||
print(" | O")
|
||||
print(" | /|")
|
||||
print(" | ")
|
||||
print("_|_")
|
||||
elif intentos == 2:
|
||||
print(" ____")
|
||||
print(" | |")
|
||||
print(" | O")
|
||||
print(" | /|\\")
|
||||
print(" | ")
|
||||
print("_|_")
|
||||
elif intentos == 1:
|
||||
print(" ____")
|
||||
print(" | |")
|
||||
print(" | O")
|
||||
print(" | /|\\")
|
||||
print(" | / ")
|
||||
print("_|_")
|
||||
|
||||
|
||||
# Limpiar la terminal
|
||||
clearConsole()
|
||||
|
||||
# Mensaje bienvenida
|
||||
print('\n###################')
|
||||
print('JUEGO - El ahorcado')
|
||||
print('###################\n')
|
||||
|
||||
# Escoger palabra aleatoria
|
||||
secret = palabra_aleatoria()
|
||||
|
||||
# Extraer diccionario de guiones con el número de letras de la palabra
|
||||
# Extraer diccionario con letras de la palabra con indice
|
||||
dic_letras, dic_guiones = mostrar_guiones(secret)
|
||||
|
||||
# ############## PRUEBAS
|
||||
|
||||
# print(*dic_letras, sep=' ')
|
||||
# print(*dic_letras.values(), sep=' ')
|
||||
|
||||
# Iniciar variable de INTENTOS
|
||||
intentos = 8
|
||||
SECRET = secret.upper()
|
||||
|
||||
# Instrucciones juego
|
||||
print(
|
||||
f'\nTu palabra tiene {len(dic_letras)} letras y tienes {intentos} intentos para acertarla.\n¡Suerte!\n'
|
||||
)
|
||||
|
||||
# Mostrar guiones
|
||||
print(*dic_guiones.values(), sep=' ')
|
||||
print()
|
||||
|
||||
|
||||
# Pedir letra a usuario
|
||||
comando = ''
|
||||
# listado para letras incorrectas y acertadas
|
||||
incorrectas = list()
|
||||
acertadas = list()
|
||||
|
||||
while comando.lower() != 'salir':
|
||||
|
||||
letra_user = input('Dime una letra: ')
|
||||
comando = letra_user
|
||||
# Validar letra
|
||||
|
||||
# Comando salir
|
||||
if letra_user == 'salir':
|
||||
print('\n\n¡Ciao!\n')
|
||||
break
|
||||
|
||||
# # Letra ya acertada
|
||||
elif letra_user in acertadas:
|
||||
print('\nEsa letra ya la acertaste primo...\n')
|
||||
|
||||
elif letra_user in incorrectas:
|
||||
print('\n¡Perdiendo intentos a lo loco! ¡A lo loco!\n')
|
||||
intentos -= 1
|
||||
ahorcado_intentos()
|
||||
print('\nTe quedan {intentos} intentos\n')
|
||||
# # acierto - Desvelar letra
|
||||
elif letra_user in dic_letras.values():
|
||||
print('\n¡Ole!')
|
||||
acertadas.append(letra_user)
|
||||
|
||||
# Mostrar guiones y letras acertadas
|
||||
mostrar_letras_acertadas()
|
||||
|
||||
# # fallo. Restar intentos
|
||||
else:
|
||||
intentos -= 1
|
||||
incorrectas.append(letra_user)
|
||||
print(f'Lo siento, no has acertado. Te quedan {intentos} intentos\n')
|
||||
ahorcado_intentos()
|
||||
print('\nTus errores por ahora: ')
|
||||
print(*incorrectas, sep=', ')
|
||||
print()
|
||||
|
||||
# Comprobación game over / Win / nuevo intento
|
||||
if intentos == 0:
|
||||
clearConsole()
|
||||
print(" ____")
|
||||
print(" | |")
|
||||
print(" | O")
|
||||
print(" | /|\\ \t\tGAME OVER")
|
||||
print(" | / \\")
|
||||
print("_|_")
|
||||
print(f'\n\nLa palabra era: {SECRET}\n')
|
||||
|
||||
break
|
||||
|
||||
# Controlar si tiene la palabra correcta
|
||||
elif '-' not in dic_guiones.values():
|
||||
clearConsole()
|
||||
print('\n\n\n\n\n\n\n\t\t\tWIN\t\t\t\n\n\n\n\n\n\n')
|
||||
print(f'La palabra era: {SECRET}\nTe sobraron {intentos} intentos\n')
|
||||
break
|
||||
|
||||
# Nuevo intento
|
||||
else:
|
||||
print("¡Inténtalo de nuevo!")
|
||||
311
python-total/dia_05/README.md
Normal file
311
python-total/dia_05/README.md
Normal file
@@ -0,0 +1,311 @@
|
||||
# Día 5 - Programa el juego "El ahorcado"
|
||||
|
||||
- [Día 5 - Programa el juego "El ahorcado"](#día-5---programa-el-juego-el-ahorcado)
|
||||
- [5.1. - Documentación](#51---documentación)
|
||||
- [5.2. - Funciones](#52---funciones)
|
||||
- [5.3. - return](#53---return)
|
||||
- [5.4. - Funciones dinámicas](#54---funciones-dinámicas)
|
||||
- [5.5. - Interacción entre funciones](#55---interacción-entre-funciones)
|
||||
- [5.6. - \*args](#56---args)
|
||||
- [5.7. - \*\*kwargs](#57---kwargs)
|
||||
- [5.8. - Ejercicios](#58---ejercicios)
|
||||
- [5.8.1. - Ejercicio 1](#581---ejercicio-1)
|
||||
- [5.8.2. - Ejercicio 2](#582---ejercicio-2)
|
||||
- [5.8.3. - Ejercicio 3](#583---ejercicio-3)
|
||||
- [5.8.4. - Ejercicio 4](#584---ejercicio-4)
|
||||
- [5.9. - Proyecto del Día 5](#59---proyecto-del-día-5)
|
||||
- [Ficheros y documentación del día 5](#ficheros-y-documentación-del-día-5)
|
||||
|
||||
## 5.1. - Documentación
|
||||
La documentación es nuestra biblioteca de consulta en Python. Al escribir código, es de uso permanentemente para solucionar dudas relacionadas al funcionamiento de métodos y los argumentos que reciben.
|
||||
|
||||
Si utilizas PyCharm, sostén el cursor sobre el nombre del método del que deseas obtener información. Se desplegará una ventana flotante.
|
||||
|
||||
Esto funcionará en otros IDEs del mismo modo.
|
||||
|
||||

|
||||
|
||||
También, debes mantener cerca la documentación oficial de Python (o Biblioteca Estándar de Python), que contiene toda la información necesaria: https://docs.python.org/es/3.9/library/index.html
|
||||
|
||||
No dejes de buscar en Google tus dudas, para hallar una explicación que se ajuste a ti.
|
||||
## 5.2. - Funciones
|
||||
|
||||
Una función es un bloque de código que solamente se ejecuta cuando es llamada. Puede recibir información (en forma de parámetros), y devolver datos una vez procesados como resultado.
|
||||
|
||||
Una función es definida mediante la palabra clave **def**
|
||||
```python
|
||||
def mi_funcion(argumento):
|
||||
```
|
||||
|
||||
Los argumentos contienen información que la función utiliza o transforma para devolver un resultado
|
||||
```python
|
||||
mi_funcion(mi_argumento)
|
||||
```
|
||||
|
||||
Para llamar a una función, basta utilizar su nombre, entregando los argumentos que la misma requiere entre paréntesis.
|
||||
|
||||
## 5.3. - return
|
||||
|
||||
Para que una función pueda devolver un valor (y que pueda ser almacenado en una variable, por ejemplo), utilizamos la declaración return.
|
||||
```python
|
||||
def mi_funcion():
|
||||
return [algo]
|
||||
```
|
||||
|
||||
La declaración return provoca la salida de la función. Cualquier código que se encuentre después en el bloque de la función, no se ejecutará
|
||||
```python
|
||||
resultado = mi_funcion()
|
||||
```
|
||||
|
||||
La variable resultado almacenará el valor devuelto por la función mi_funcion( )
|
||||
|
||||
## 5.4. - Funciones dinámicas
|
||||
|
||||
La integración de diferentes herramientas de control de flujo, nos permite crear funciones dinámicas y flexibles. Si debemos utilizarlas varias veces, lograremos un programa más limpio y sencillo de mantener, evitando repeticiones de código.
|
||||
|
||||
- Funciones
|
||||
- Loops (for/while)
|
||||
- Estructuras condicionales
|
||||
- Palabras clave (return, break, continue, pass)
|
||||
|
||||
```python
|
||||
def mi_funcion(argumento):
|
||||
for item in ...
|
||||
if a == b ...
|
||||
...
|
||||
else:
|
||||
return ...
|
||||
return ...
|
||||
```
|
||||
|
||||
## 5.5. - Interacción entre funciones
|
||||
|
||||
Las salidas de una determinada función pueden convertirse en entradas de otras funciones. De esa manera, cada función realiza una tarea definida, y el programa se construye a partir de la interacción entre funciones.
|
||||
```python
|
||||
def funcion_1():
|
||||
|...
|
||||
|return a
|
||||
def funcion_2(a):
|
||||
|...
|
||||
|return b
|
||||
def funcion_3(b):
|
||||
|...
|
||||
|return c
|
||||
def funcion_4(a,c):
|
||||
|...
|
||||
|return d
|
||||
```
|
||||
|
||||
## 5.6. - *args
|
||||
|
||||
En aquellos casos en los que no se conoce de antemano el número exacto de argumentos que se deben pasar a una función, se debe utilizar la sintaxis *args para referirse a todos los argumentos adicionales luego de los obligatorios.
|
||||
|
||||
El nombre *args no es mandatorio pero si es sugerido como buena práctica.
|
||||
|
||||
Cualquier nombre iniciado en * referirá a estos argumentos de cantidad variable.
|
||||
|
||||
La función recibirá los argumentos indefinidos *args en forma de tupla, a los que se podrá acceder o iterar de las formas habituales dentro del bloque de código de la función.
|
||||
```python
|
||||
def mi_funcion(arg_1, arg_2, *args):
|
||||
```
|
||||
|
||||
```python
|
||||
mi_funcion("ejemplo", 25, 40, 75, 10):
|
||||
```
|
||||
|
||||
*arg_1* → "ejemplo"
|
||||
*arg_2* → 25
|
||||
*args* = (40, 75, 10)
|
||||
|
||||
## 5.7. - **kwargs
|
||||
|
||||
Los argumentos con palabras clave (keyword arguments, abreviado kwargs), sirven para identificar el argumento por su nombre, independientemente de la posición en la que se pasen a su función. Si no se conoce de antemano su cantidad, se utiliza el parámetro **kwargs que los agrupa en un diccionario.
|
||||
Al igual que para *args, el nombre **kwargs no es mandatorio pero si es sugerido como buena práctica. Cualquier nombre iniciado en ** referirá a estos argumentos de cantidad variable.
|
||||
```python
|
||||
def atributos_persona(**kwargs):
|
||||
```
|
||||
|
||||
```python
|
||||
atributos_persona(ojos="azules", pelo="corto")
|
||||
```
|
||||
|
||||
*kwargs* = {'ojos': 'azules', 'pelo': 'rubio'}
|
||||
|
||||
|
||||
## 5.8. - Ejercicios
|
||||
|
||||
### 5.8.1. - Ejercicio 1
|
||||
|
||||
Crea una función llamada devolver_distintos() que reciba 3 integers como parámetros.
|
||||
- Si la suma de los 3 numeros es mayor a 15, va a devolver el número mayor.
|
||||
- Si la suma de los 3 numeros es menor a 10, va a devolver el número menor.
|
||||
- Si la suma de los 3 números es un valor entre 10 y 15 (incluidos) va a devolver el número de valor intermedio.
|
||||
|
||||
**Solución:**
|
||||
```python
|
||||
def devolver_distintos(num1, num2, num3):
|
||||
suma = num1 + num2 + num3
|
||||
lista = [num1, num2, num3]
|
||||
if suma > 15:
|
||||
return max(lista)
|
||||
elif suma < 10:
|
||||
return min(lista)
|
||||
else:
|
||||
lista.sort()
|
||||
return lista[1]
|
||||
print(devolver_distintos(6, 5, 3))
|
||||
```
|
||||
|
||||
### 5.8.2. - Ejercicio 2
|
||||
|
||||
Escribe una función (puedes ponerle cualquier nombre que quieras) que reciba cualquier palabra como parámetro, y que devuelva todas sus letras únicas (sin repetir) pero en orden alfabético.
|
||||
|
||||
Por ejemplo si al invocar esta función pasamos la palabra "entretenido", debería devolver ['d', 'e', 'i', 'n', 'o', 'r', 't']
|
||||
|
||||
**Solución:**
|
||||
|
||||
```python
|
||||
def cualquier(palabra):
|
||||
mi_set = set()
|
||||
for letra in palabra:
|
||||
mi_set.add(letra)
|
||||
lista = list(mi_set)
|
||||
lista.sort()
|
||||
return lista
|
||||
print("\n")
|
||||
print(cualquier('entretenido'))
|
||||
```
|
||||
|
||||
### 5.8.3. - Ejercicio 3
|
||||
|
||||
Escribe una función que requiera una cantidad indefinida de argumentos. Lo que hará esta función es devolver True si en algún momento se ha ingresado al numero cero repetido dos veces consecutivas.
|
||||
|
||||
Por ejemplo:
|
||||
|
||||
(5,6,1,0,0,9,3,5) >>> True
|
||||
|
||||
(6,0,5,1,0,3,0,1) >>> False
|
||||
|
||||
**Solución:**
|
||||
```python
|
||||
def me_gustan_los_ceros(*noceros):
|
||||
contador = 0
|
||||
for num in noceros:
|
||||
if num == 0:
|
||||
contador += 1
|
||||
if contador == 2:
|
||||
contador = 0
|
||||
return True
|
||||
elif num != 0:
|
||||
contador = 0
|
||||
else:
|
||||
pass
|
||||
return False
|
||||
print("\n")
|
||||
print(me_gustan_los_ceros(5, 6, 1, 0, 0, 9, 3, 5))
|
||||
print(me_gustan_los_ceros(6, 0, 5, 1, 0, 3, 0, 1))
|
||||
Solución curso:
|
||||
def ceros_vecinos(*args):
|
||||
contador = 0
|
||||
for num in args:
|
||||
|
||||
if contador + 1 == len(args):
|
||||
return False
|
||||
elif args[contador] == 0 and args[contador + 1] == 0:
|
||||
return True
|
||||
else:
|
||||
contador += 1
|
||||
return False
|
||||
print("\n")
|
||||
print(ceros_vecinos(5, 6, 1, 0, 0, 9, 3, 5))
|
||||
print(ceros_vecinos(6, 0, 5, 1, 0, 3, 0, 1))
|
||||
```
|
||||
|
||||
### 5.8.4. - Ejercicio 4
|
||||
|
||||
Escribe una función llamada contar_primos() que requiera un solo argumento numérico.
|
||||
|
||||
Esta función va a mostrar en pantalla todos los números primos existentes en el rango que va desde cero hasta ese número incluido, y va a devolver la cantidad de números primos que encontró.
|
||||
|
||||
Aclaración, por convención el 0 y el 1 no se consideran primos.
|
||||
|
||||
**Solución:**
|
||||
```python
|
||||
def primo(numero):
|
||||
if numero == 0 or numero == 1 or numero == 4:
|
||||
return False
|
||||
for x in range(2, int(numero/2)):
|
||||
if numero % x == 0:
|
||||
return False
|
||||
return True
|
||||
def primos(rango_max):
|
||||
rango_max += 1
|
||||
lista_num = [n for n in range(1, rango_max)]
|
||||
primos = []
|
||||
for numero in lista_num:
|
||||
es_primo = primo(numero)
|
||||
if es_primo:
|
||||
primos.append(numero)
|
||||
contar = len(primos)
|
||||
rango_max -= 1
|
||||
print(f"\nEntre 0 y el {rango_max} hay {contar} números primos.\n")
|
||||
print(*primos, sep=' ')
|
||||
primos(1000)
|
||||
Solución curso:
|
||||
def contar_primos(numero):
|
||||
primos = [2]
|
||||
iteracion = 3
|
||||
|
||||
if numero < 2:
|
||||
return 0
|
||||
|
||||
while iteracion <= numero:
|
||||
for n in range(3, iteracion, 2):
|
||||
if iteracion % n == 0:
|
||||
iteracion += 2
|
||||
break
|
||||
else:
|
||||
primos.append(iteracion)
|
||||
iteracion += 2
|
||||
|
||||
print(primos)
|
||||
return len(primos)
|
||||
|
||||
|
||||
print("\n")
|
||||
print(contar_primos(1000))
|
||||
```
|
||||
|
||||
## 5.9. - Proyecto del Día 5
|
||||
Hoy vas a programar El Ahorcado. El programa va a elegir una palabra secreta y le va a mostrar al jugador solamente una serie de guiones que representa la cantidad de letras que tiene la palabra. El jugador en cada turno deberá elegir una letra y si la letra se encuentra en la palabra oculta, el sistema le va a mostrar en qué lugares se encuentra. Pero si el jugador dice una letra que no se encuentra en la palabra oculta, pierde una vida.
|
||||
|
||||
En el juego real del ahorcado, cada vez que perdemos una vida, se va completando el dibujo del ahorcado miembro por miembro. Pero en nuestro caso, como aún no tenemos elementos gráficos, simplemente le vamos a decir que tiene seis vidas y se las iremos descontando de una en una, cada vez que el jugador elija una letra incorrecta.
|
||||
Si se agotan las vidas antes de adivinar la palabra, el jugador pierde. Pero si adivina la palabra completa antes de perder todas las vidas, el jugador gana.
|
||||
|
||||
Parece sencillo, pero ¿cómo diseñamos todo este código? Bueno, aquí van algunas ayudas:
|
||||
- Primero vas a crear un código que importe el método choice, ya que lo vas a necesitar para que el sistema pueda elegir una palabra al azar dentro de una lista de palabras que también vas a crear al comienzo.
|
||||
- Luego de eso, vas a crear tantas funciones como creas necesarias para que el programa haga cosas como pedirle al usuario que elija una letra, para corroborar si lo que el usuario ha ingresado es una letra válida, para chequear si la letra ingresada se encuentra en la palabra o no, para verificar si ha ganado o no, etc.
|
||||
- Recuerda escribir primero las funciones y luego el código que las implementa ordenadamente.
|
||||
|
||||
Creo que este es un proyecto especial y de verdad quiero que sepas que no espero que lo puedas resolver sin ayuda. Las funciones parecen simples, pero cuando empezamos a poner funciones todas juntas en un código real, es difícil seguir mentalmente la sucesión del código porque se vuelve mucho menos lineal que antes. Lo importante es que lo intentes, que tu cabeza se zambulla en el problema y luego veremos cómo llegamos a la solución.
|
||||
|
||||

|
||||
|
||||
## Ficheros y documentación del día 5
|
||||
- [01_metodos_ayuda_docs.py](01_metodos_ayuda_docs.py)
|
||||
- [02_funciones.py](02_funciones.py)
|
||||
- [03_funciones_dinamicas.py](03_funciones_dinamicas.py)
|
||||
- [04_ejemplo_funcion.py](04_ejemplo_funcion.py)
|
||||
- [05_palito_mas_corto.py](05_palito_mas_corto.py)
|
||||
- [06_lanzar_dados.py](06_lanzar_dados.py)
|
||||
- [07_limpiar_lista_promedio.py](07_limpiar_lista_promedio.py)
|
||||
- [08_lanzar_moneda.py](08_lanzar_moneda.py)
|
||||
- [09_args_indeterminados.py](09_args_indeterminados.py)
|
||||
- [10_problemas_practicos.py](10_problemas_practicos.py)
|
||||
- [11_programa05.py](11_programa05.py)
|
||||
|
||||
[Documentación del día](../doc_curso/05_ahorcado/)
|
||||
|
||||
---
|
||||
|
||||
Enlaces a todos los días: [dia 1 - creador de nombres](../dia_01/README.md) / [dia 2 - calculador de comisiones](../dia_02/README.md) / [dia 3 - analizador de texto](../dia_03/README.md) / [dia 4 - juego "adivina el número"](../dia_04/README.md) / [dia 5 - juego "El ahorcado"](../dia_05/README.md) / [dia 6 - recetario](../dia_06/README.md) / [dia 7 - cuenta bancaria](../dia_07/README.md) / [dia 8 - consola de turnos](../dia_08/README.md) / [dia 9 - buscador de números de serie](../dia_09/README.md) / [dia 10 - juego "Invasión espacial"](../dia_10/README.md) / [dia 11 - web scraping](../dia_11/README.md) / [dia 12 - gestor de restaurantes](../dia_12/README.md) / [dia 13 - asistente de voz](../dia_13/README.md) / [dia 14 - controlador de asistencia](../dia_14/README.md) / [dia 15 - machine learning](../dia_15/README.md) / [dia 16 - aplicación web de tareas pendientes](../dia_16/README.md)
|
||||
Reference in New Issue
Block a user