Skip to content

Commit a30e17f

Browse files
authored
Merge pull request #6827 from Maanghel/main
#33 - Python
2 parents d11a59d + fca3cf9 commit a30e17f

File tree

3 files changed

+327
-0
lines changed

3 files changed

+327
-0
lines changed
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
"""
2+
Crea un programa capaz de gestionar una pieza de Tetris.
3+
- La pantalla de juego tiene 10 filas y 10 columnas representadas por símbolos 🔲
4+
- La pieza de tetris a manejar será la siguiente (si quieres, puedes elegir otra):
5+
🔳
6+
🔳🔳🔳
7+
- La pieza aparecerá por primera vez en la parte superior izquierda de la pantalla de juego.
8+
🔳🔲🔲🔲🔲🔲🔲🔲🔲🔲
9+
🔳🔳🔳🔲🔲🔲🔲🔲🔲🔲
10+
🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
11+
🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
12+
🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
13+
🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
14+
🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
15+
🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
16+
🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
17+
🔲🔲🔲🔲🔲🔲🔲🔲🔲🔲
18+
- Debes desarrollar una función capaz de desplazar y rotar la pieza en el tablero,
19+
recibiendo una acción cada vez que se llame, mostrando cómo se visualiza en
20+
la pantalla de juego.
21+
- Las acciones que se pueden aplicar a la pieza son: derecha, izquierda, abajo, rotar.
22+
- Debes tener en cuenta los límites de la pantalla de juego.
23+
"""
24+
25+
from pynput import keyboard
26+
import os
27+
28+
class Tetris:
29+
"""
30+
Clase que representa un juego de Tetris.
31+
"""
32+
def __init__(self) -> None:
33+
"""
34+
Inicializa el juego de Tetris con el tablero y la pieza.
35+
36+
returns:
37+
None
38+
"""
39+
self.board_size = 10
40+
self.empty = "🔲"
41+
self.full = "🔳"
42+
43+
self.piece = [
44+
[self.full, self.empty, self.empty],
45+
[self.full, self.full, self.full]
46+
]
47+
48+
self.piece_h = len(self.piece)
49+
self.piece_w = len(self.piece[0])
50+
51+
self.row = 0
52+
self.col = 0
53+
54+
def render(self) -> None:
55+
"""
56+
Imprime el tablero completo con la pieza en su posición actual.
57+
58+
returns:
59+
None
60+
"""
61+
board = [[self.empty for _ in range(self.board_size)] for _ in range(self.board_size)]
62+
63+
for r_piece, row_data in enumerate(self.piece):
64+
for c_piece, cell in enumerate(row_data):
65+
if cell == self.full:
66+
board[self.row + r_piece][self.col + c_piece] = self.full
67+
68+
for r in range(self.board_size):
69+
print("".join(board[r]))
70+
print()
71+
72+
def clear_console(self) -> None:
73+
"""
74+
Limpia la consola para una mejor visualización.
75+
76+
returns:
77+
None
78+
"""
79+
os.system('cls' if os.name == 'nt' else 'clear')
80+
81+
def rotate(self) -> None:
82+
"""
83+
Rota la pieza 90° en sentido horario, respetando límites.
84+
85+
returns:
86+
None
87+
"""
88+
rotated = [list(row) for row in zip(*self.piece[::-1])]
89+
new_h = len(rotated)
90+
new_w = len(rotated[0])
91+
92+
if self.col + new_w > self.board_size:
93+
self.col = self.board_size - new_w
94+
if self.row + new_h > self.board_size:
95+
self.row = self.board_size - new_h
96+
97+
self.piece = rotated
98+
self.piece_h = new_h
99+
self.piece_w = new_w
100+
101+
def move_left(self) -> None:
102+
"""
103+
Mueve la pieza hacia la izquierda si no supera los límites.
104+
105+
returns:
106+
None
107+
"""
108+
if self.col > 0:
109+
self.col -= 1
110+
111+
def move_right(self) -> None:
112+
"""
113+
Mueve la pieza hacia la derecha si no supera los límites.
114+
115+
returns:
116+
None
117+
"""
118+
if self.col + self.piece_w < self.board_size:
119+
self.col += 1
120+
121+
def move_down(self) -> None:
122+
"""
123+
Mueve la pieza hacia abajo si no supera los límites.
124+
125+
returns:
126+
None
127+
"""
128+
if self.row + self.piece_h < self.board_size:
129+
self.row += 1
130+
131+
def action(self, key: keyboard.Key) -> None:
132+
"""
133+
Maneja la acción correspondiente según la tecla presionada.
134+
135+
args:
136+
key (keyboard.Key): Tecla presionada.
137+
138+
returns:
139+
None
140+
"""
141+
actions = {
142+
keyboard.Key.left: self.move_left,
143+
keyboard.Key.right: self.move_right,
144+
keyboard.Key.down: self.move_down,
145+
keyboard.Key.up: self.rotate
146+
}
147+
148+
action_to_run = actions.get(key)
149+
if action_to_run:
150+
action_to_run()
151+
self.clear_console()
152+
self.render()
153+
154+
155+
if __name__ == "__main__":
156+
print("Controla la pieza con flechas. Presiona ESC para salir.\n")
157+
158+
game = Tetris()
159+
game.render()
160+
161+
def on_press(key: keyboard.Key) -> None:
162+
"""
163+
Maneja la pulsación de teclas.
164+
- Flechas para mover/rotar la pieza.
165+
- ESC para salir.
166+
"""
167+
if key == keyboard.Key.esc:
168+
return False
169+
game.action(key)
170+
171+
with keyboard.Listener(on_press=on_press) as listener:
172+
listener.join()
173+
print()
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""
2+
Crea un programa capaz de interactuar con un fichero TXT.
3+
IMPORTANTE: El fichero TXT NO debe subirse como parte de la corrección.
4+
Únicamente el código.
5+
6+
- Si no existe, debe crear un fichero llamado "text.txt".
7+
- Desde el programa debes ser capaz de introducir texto por consola y guardarlo
8+
en una nueva línea cada vez que se pulse el botón "Enter".
9+
- Si el fichero existe, el programa tiene que dar la opción de seguir escribiendo
10+
a continuación o borrar su contenido y comenzar desde el principio.
11+
- Si se selecciona continuar escribiendo, se tiene que mostrar por consola
12+
el texto que ya posee el fichero.
13+
"""
14+
15+
import os
16+
17+
def main() -> None:
18+
"""
19+
Programa para interactuar con un fichero TXT.
20+
21+
returns:
22+
None
23+
"""
24+
filename = "text.txt"
25+
26+
if not os.path.exists(filename):
27+
with open(filename, "w", encoding="utf-8") as f:
28+
pass
29+
print(f'Se ha creado el fichero "{filename}". Puedes comenzar a escribir:')
30+
else:
31+
print(f'El fichero "{filename}" ya existe.')
32+
choice = input("¿Deseas (c)ontinuar escribiendo o (b)orrar el contenido y comenzar de nuevo? (c/b): ").strip().lower()
33+
34+
if choice == 'c':
35+
with open(filename, "r", encoding="utf-8") as f:
36+
content = f.read()
37+
print("Contenido actual del fichero:")
38+
print(content)
39+
print("Puedes continuar escribiendo:")
40+
elif choice == 'b':
41+
with open(filename, "w", encoding="utf-8") as f:
42+
pass
43+
print("El contenido del fichero ha sido borrado. Puedes comenzar a escribir:")
44+
else:
45+
print("Opción no válida. Saliendo del programa.")
46+
return
47+
48+
with open(filename, "a", encoding="utf-8") as f:
49+
while True:
50+
try:
51+
line = input()
52+
f.write(line + "\n")
53+
except KeyboardInterrupt:
54+
print("\nSaliendo del programa.")
55+
break
56+
57+
58+
if __name__ == "__main__":
59+
main()
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
"""
2+
Como cada año, el día 256 se celebra el "Día de la Programación".
3+
En nuestra comunidad siempre hacemos una gran fiesta donde repartirmos
4+
256 regalos para seguir aprendiendo programación:
5+
https://diadelaprogramacion.com
6+
7+
Para seguir ayudando, te propongo este reto:
8+
Mostrar la sintaxis de los principales elementos de un lenguaje
9+
en TODOS los lenguajes de programación que podamos. ¿Llegaremos a 50?
10+
11+
En un fichero, haz lo siguiente (si el lenguaje lo soporta),
12+
y comenta cada bloque para identificar con qué se corresponde:
13+
- Haz un "Hola, mundo!"
14+
- Crea variables de tipo String, numéricas (enteras y decimales)
15+
y Booleanas (o cualquier tipo de dato primitivo).
16+
- Crea una constante.
17+
- Usa un if, else if y else.
18+
- Crea estructuras como un array, lista, tupla, set y diccionario.
19+
- Usa un for, foreach y un while.
20+
- Crea diferentes funciones (con/sin parámetros y con/sin retorno).
21+
- Crea una clase.
22+
- Muestra el control de excepciones.
23+
24+
Así, cualquier persona podrá consultar rápidamente diferentes ejemplos
25+
de sintaxis básica de muchos lenguajes.
26+
27+
¡Muchas gracias!
28+
"""
29+
30+
# Imprimir "Hola, mundo!" en Python
31+
print("Hola, mundo!")
32+
33+
# Crear variables
34+
my_string = "Hola"
35+
my_integer = 42
36+
my_decimal = 3.14
37+
my_boolean = True
38+
39+
# Crear una constante
40+
PI = 3.14159
41+
42+
# Estructura if, elif y else
43+
if my_integer > 50:
44+
print("El número es mayor que 50")
45+
elif my_integer == 50:
46+
print("El número es igual a 50")
47+
else:
48+
print("El número es menor que 50")
49+
50+
# Crear estructuras de datos
51+
my_list = [1, 2, 3, 4, 5]
52+
my_tuple = (1, 2, 3)
53+
my_set = {1, 2, 3}
54+
my_dictionary = {"key1": "value1", "key2": "value2"}
55+
56+
# Usar bucles
57+
for i in range(5):
58+
print(i)
59+
60+
for item in my_list:
61+
print(item)
62+
63+
while my_integer > 0:
64+
my_integer -= 1
65+
print(my_integer)
66+
67+
# Crear funciones
68+
def my_function() -> None:
69+
print("Esta es una función sin parámetros ni retorno")
70+
71+
def my_function_with_params(param1: str, param2: int) -> None:
72+
print(f"Parámetros recibidos: {param1}, {param2}")
73+
74+
def my_function_with_return() -> str:
75+
return "Valor de retorno"
76+
77+
# Crear una clase
78+
class MyClass:
79+
def __init__(self, name: str) -> None:
80+
self.name = name
81+
82+
def greet(self) -> None:
83+
print(f"Hola, {self.name}!")
84+
85+
# Control de excepciones
86+
try:
87+
result = 10 / 0
88+
except ZeroDivisionError:
89+
print("No se puede dividir por cero")
90+
except Exception as e:
91+
print(f"Ocurrió un error: {e}")
92+
93+
# Ejemplo de uso de la clase
94+
my_object = MyClass("Mundo")
95+
my_object.greet()

0 commit comments

Comments
 (0)