Problemas de práctica de Python con soluciones que puedes ejecutar
Cuando ya conoces los bucles, las listas y los diccionarios, necesitas problemas con los que practicar. Estos seis aparecen una y otra vez en cursos y entrevistas. Cada solución es una de varias formas válidas, y todas se han ejecutado para obtener la salida mostrada.
FizzBuzz
Imprime los números del 1 al 15. Para los múltiplos de 3 imprime Fizz, para los múltiplos de 5 imprime Buzz, y para los múltiplos de ambos imprime FizzBuzz. El truco es comprobar primero el caso combinado, porque 15 también es múltiplo de 3 y de 5.
for n in range(1, 16):
if n % 15 == 0:
print("FizzBuzz")
elif n % 3 == 0:
print("Fizz")
elif n % 5 == 0:
print("Buzz")
else:
print(n)Salida:
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
Comprobar palíndromos
Un palíndromo se lee igual al revés. Pasa el texto a minúsculas y quita los espacios para que las mayúsculas y los espacios no importen, y luego compáralo con su inverso.
def is_palindrome(text):
cleaned = text.lower().replace(" ", "")
return cleaned == cleaned[::-1]
print(is_palindrome("Never odd or even"))
print(is_palindrome("Python"))Salida:
True False
Contar las vocales
Recorre los caracteres y cuenta los que están en la cadena de vocales. sum() sobre un generador de unos es una forma compacta de contar.
def count_vowels(text):
return sum(1 for ch in text.lower() if ch in "aeiou")
print(count_vowels("Pip and the Scrap Isle"))Salida:
6
La palabra más frecuente
Usa un diccionario como contador. counts.get(word, 0) devuelve 0 para una palabra que aún no has visto, así que puedes sumar 1 sin comprobar nada. max con key=counts.get elige la palabra con el recuento más alto.
text = "the robot and the island and the sea"
counts = {}
for word in text.split():
counts[word] = counts.get(word, 0) + 1
best = max(counts, key=counts.get)
print(best, counts[best])Salida:
the 3
Eliminar duplicados y conservar el orden
Convertir en un conjunto elimina los duplicados, pero pierde el orden. Para conservar la primera aparición de cada elemento, guarda una lista de lo que ya has visto.
items = ["a", "b", "a", "c", "b"]
seen = []
for item in items:
if item not in seen:
seen.append(item)
print(seen)Salida:
['a', 'b', 'c']
Dos números que suman un objetivo
Dada una lista y un objetivo, devuelve las posiciones de dos números que sumen ese objetivo. Un diccionario con los números ya vistos responde en una sola pasada: para cada número, comprueba si el número que aún necesitas se vio antes.
def two_sum(numbers, target):
seen = {}
for i, n in enumerate(numbers):
if target - n in seen:
return seen[target - n], i
seen[n] = i
print(two_sum([2, 7, 11, 15], 9))Salida:
(0, 1)
Preguntas frecuentes
- ¿Dónde puedo encontrar más problemas de práctica de Python?
- Empieza con las ideas anteriores y cámbialas: cuenta consonantes en lugar de vocales, busca la palabra menos frecuente o devuelve todos los pares para dos números que suman un objetivo. Cambiar un problema ya resuelto es el mejor siguiente problema.
- ¿Debo mirar la solución si me atasco?
- Intenta durante al menos diez minutos primero. Luego lee la solución, ciérrala y escríbela de nuevo de memoria al día siguiente. Copiar sin reescribir no desarrolla la habilidad.
- ¿Son buenos estos problemas para practicar entrevistas?
- Sí, FizzBuzz, los palíndromos, el conteo y dos números que suman un objetivo son preguntas clásicas de calentamiento. Consulta la guía de entrevistas de este sitio para las preguntas conceptuales (listas frente a tuplas, is frente a ==).