Curso-lenguaje-python/python-total/dia_05/10_problemas_practicos.py
Manuel Vergara f4e9797c4b Restructure content and add notes from HolaMundo
Signed-off-by: Manuel Vergara <manuel@vergaracarmona.es>
2023-05-20 09:36:26 +02:00

164 lines
3.8 KiB
Python

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