Skip to content

Commit e3daec0

Browse files
committed
mouredev#11 - Python
1 parent 4a9c637 commit e3daec0

File tree

1 file changed

+305
-0
lines changed

1 file changed

+305
-0
lines changed
Lines changed: 305 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,305 @@
1+
# Importamos el módulo os, que permite interactuar con el sistema operativo (por ejemplo: borrar archivos)
2+
import os
3+
4+
"""
5+
Ficheros
6+
"""
7+
file_name = "Complex_303" # Definimos el nombre del archivo que se va a crear, leer y luego borrar
8+
9+
# Comentario de ejemplo de cómo se podría abrir un archivo sin 'with'
10+
# open(file_name, "w") # No se cierra automáticamente y es menos seguro
11+
12+
# Aquí abrimos (o creamos) el archivo en modo escritura ("w") usando with, que cierra el archivo automáticamente al salir del bloque
13+
with open(file_name, "w") as file:
14+
file.write("Complex_303\n") # Escribe la cadena "Complex_303" y un salto de línea
15+
file.write("24\n") # Escribe la cadena "24" y un salto de línea
16+
file.write("Python") # Escribe la cadena "Python" sin salto de línea
17+
18+
# Ahora volvemos a abrir el mismo archivo, pero en modo lectura ("r") para leer su contenido
19+
with open(file_name, "r") as file:
20+
print(file.read()) # Leemos todo el contenido del archivo y lo mostramos por pantalla
21+
22+
# Finalmente, usamos os.remove() para borrar el archivo del sistema
23+
os.remove(file_name)
24+
25+
26+
""" * DIFICULTAD EXTRA (opcional):
27+
* Desarrolla un programa de gestión de ventas que almacena sus datos en un
28+
* archivo .txt.
29+
* - Cada producto se guarda en una línea del archivo de la siguiente manera:
30+
* [nombre_producto], [cantidad_vendida], [precio].
31+
* - Siguiendo ese formato, y mediante terminal, debe permitir añadir, consultar,
32+
* actualizar, eliminar productos y salir.
33+
* - También debe poseer opciones para calcular la venta total y por producto.
34+
* - La opción salir borra el .txt."""
35+
36+
37+
# Definimos el nombre del archivo donde se almacenarán los productos
38+
file_name = "Complex_303_productos"
39+
40+
# Creamos (si no existe) el archivo en modo añadir ('a'), y lo cerramos inmediatamente
41+
open(file_name, 'a')
42+
43+
# Iniciamos un bucle infinito para mostrar un menú hasta que el usuario decida salir
44+
while True:
45+
# Mostramos el menú de opciones en consola
46+
print("1. Añadir producto")
47+
print("2. Consultar producto")
48+
print("3. Actualizar producto")
49+
print("4. Borrar producto")
50+
print("5. Mostrar productos")
51+
print("6. Calcular venta total")
52+
print("7. Calcular venta por producto")
53+
print("8. Salir")
54+
55+
# Pedimos al usuario que ingrese una opción del menú
56+
option = int(input("Seleccione una opcion: "))
57+
58+
# OPCIÓN 1: Añadir un producto
59+
if option == 1:
60+
# Pedimos al usuario los datos del producto
61+
name = input("Nombre: ")
62+
quantity = input("Cantidad: ")
63+
precio = input("Indique el precio: ")
64+
65+
# Abrimos el archivo en modo añadir ('a') para escribir al final del archivo
66+
with open(file_name, "a") as file:
67+
# Guardamos el producto en una línea con el formato: nombre, cantidad, precio
68+
file.write(f"{name}, {quantity}, {precio}\n")
69+
70+
# OPCIÓN 2: Consultar un producto por su nombre
71+
elif option == 2:
72+
name = input("Nombre: ")
73+
found = False # Variable para saber si se encontró o no el producto
74+
with open(file_name, "r") as file:
75+
for line in file.readlines(): # Leemos todas las líneas una por una
76+
if line.split(", ")[0] == name: # Comparamos el nombre del producto (que está en la primera posición)
77+
print(line) # Mostramos la línea completa
78+
found = True
79+
if not found:
80+
print("Producto no encontrado") # Solo muestra si no se encontró nada
81+
82+
# OPCIÓN 3: Actualizar un producto existente
83+
elif option == 3:
84+
name = input("Nombre: ")
85+
quantity = input("Cantidad: ")
86+
precio = input("Indique el precio: ")
87+
88+
# Leemos todas las líneas del archivo
89+
with open(file_name, "r") as file:
90+
lines = file.readlines()
91+
92+
# Reescribimos el archivo completo
93+
with open(file_name, "w") as file:
94+
for line in lines:
95+
if line.split(", ")[0] == name:
96+
# Si el nombre coincide, escribimos los nuevos datos
97+
file.write(f"{name}, {quantity}, {precio}\n")
98+
else:
99+
# Si no coincide, dejamos la línea tal como estaba
100+
file.write(line)
101+
102+
# OPCIÓN 4: Borrar un producto por su nombre
103+
elif option == 4:
104+
name = input("Nombre: ")
105+
found = False # Variable para indicar si se eliminó algo o no
106+
107+
# Leemos todas las líneas
108+
with open(file_name, "r") as file:
109+
lines = file.readlines()
110+
111+
# Reescribimos el archivo sin las líneas del producto a borrar
112+
with open(file_name, "w") as file:
113+
for line in lines:
114+
if line.split(", ")[0] != name:
115+
file.write(line) # Escribimos las líneas que no coinciden
116+
else:
117+
found = True # Marcamos que se encontró y eliminó
118+
if not found:
119+
print("Producto no encontrado") # Mostramos este mensaje solo si no se encontró
120+
121+
# OPCIÓN 5: Mostrar todos los productos
122+
elif option == 5:
123+
with open(file_name, "r") as file:
124+
print(file.read()) # Leemos y mostramos todo el contenido del archivo
125+
126+
# OPCIÓN 6: Calcular el total de todas las ventas
127+
elif option == 6:
128+
total = 0 # Inicializamos el total en cero
129+
with open(file_name, "r") as file:
130+
for line in file.readlines():
131+
components = line.split(", ") # Dividimos cada línea en nombre, cantidad, precio
132+
quantity = int(components[1]) # Convertimos la cantidad a entero
133+
price = float(components[2]) # Convertimos el precio a decimal
134+
total += quantity * price # Sumamos el total de cada producto (cantidad × precio)
135+
print(f"Total: {total}") # Mostramos el total
136+
137+
# OPCIÓN 7: Calcular la venta total de un producto específico
138+
elif option == 7:
139+
name = input("Nombre: ")
140+
total = 0
141+
with open(file_name, "r") as file:
142+
for line in file.readlines():
143+
components = line.split(", ")
144+
if components[0] == name:
145+
quantity = int(components[1])
146+
price = float(components[2])
147+
total = quantity * price # Calculamos el total de ese producto
148+
break # Ya que el producto se encontró, salimos del bucle
149+
print(f"Total: {total}") # Mostramos el total del producto
150+
151+
# OPCIÓN 8: Salir del programa
152+
elif option == 8:
153+
os.remove(file_name) # Eliminamos el archivo antes de salir
154+
break # Rompemos el bucle para terminar el programa
155+
156+
#Si el usuario ingresa una opción que no existe
157+
else:
158+
print("Elegi una opcion valida") # Mostramos mensaje de error
159+
160+
161+
"""
162+
Otra forma mas optima
163+
"""
164+
165+
import os # Importamos el módulo os para operaciones con el sistema (como eliminar archivos)
166+
167+
# 📌 Nombre del archivo donde se almacenarán los productos
168+
file_name = "Complex_303_productos"
169+
170+
# 📌 Si el archivo no existe, lo creamos vacío para evitar errores al intentar abrirlo después
171+
if not os.path.exists(file_name):
172+
open(file_name, 'w').close()
173+
174+
# 📦 Función para cargar todos los productos desde el archivo a una lista en memoria
175+
def cargar_productos():
176+
productos = [] # Lista vacía para almacenar los productos
177+
with open(file_name, "r") as file:
178+
for line in file:
179+
# Cada línea se divide en nombre, cantidad y precio, separados por ", "
180+
name, quantity, price = line.strip().split(", ")
181+
# Se almacena como un diccionario
182+
productos.append({"name": name, "quantity": int(quantity), "price": float(price)})
183+
return productos
184+
185+
# 💾 Función para guardar todos los productos desde la lista al archivo
186+
def guardar_productos(productos):
187+
with open(file_name, "w") as file:
188+
for p in productos:
189+
# Cada producto se guarda como una línea en formato: nombre, cantidad, precio
190+
file.write(f"{p['name']}, {p['quantity']}, {p['price']}\n")
191+
192+
# 📋 Función para mostrar el menú de opciones
193+
def mostrar_menu():
194+
print("""
195+
1. Añadir producto
196+
2. Consultar producto
197+
3. Actualizar producto
198+
4. Borrar producto
199+
5. Mostrar productos
200+
6. Calcular venta total
201+
7. Calcular venta por producto
202+
8. Salir
203+
""")
204+
205+
# ➕ Añadir producto nuevo a la lista
206+
def añadir_producto(productos):
207+
name = input("Nombre: ")
208+
quantity = int(input("Cantidad: "))
209+
price = float(input("Precio: "))
210+
# Añadimos el producto como un diccionario a la lista
211+
productos.append({"name": name, "quantity": quantity, "price": price})
212+
print("✅ Producto añadido.")
213+
214+
# 🔍 Consultar un producto por nombre
215+
def consultar_producto(productos):
216+
name = input("Nombre: ")
217+
for p in productos:
218+
if p["name"] == name:
219+
print(f"{p['name']}, {p['quantity']}, {p['price']}")
220+
return # Salimos si se encuentra
221+
print("❌ Producto no encontrado.")
222+
223+
# 🛠️ Actualizar datos de un producto existente
224+
def actualizar_producto(productos):
225+
name = input("Nombre: ")
226+
for p in productos:
227+
if p["name"] == name:
228+
# Solicitamos nuevos valores y los actualizamos
229+
p["quantity"] = int(input("Nueva cantidad: "))
230+
p["price"] = float(input("Nuevo precio: "))
231+
print("✅ Producto actualizado.")
232+
return
233+
print("❌ Producto no encontrado.")
234+
235+
# ❌ Borrar un producto de la lista
236+
def borrar_producto(productos):
237+
name = input("Nombre: ")
238+
for p in productos:
239+
if p["name"] == name:
240+
productos.remove(p) # Eliminamos el producto de la lista
241+
print("✅ Producto eliminado.")
242+
return
243+
print("❌ Producto no encontrado.")
244+
245+
# 📄 Mostrar todos los productos registrados
246+
def mostrar_productos(productos):
247+
if not productos:
248+
print("⚠️ No hay productos registrados.")
249+
else:
250+
for p in productos:
251+
print(f"{p['name']}, {p['quantity']}, {p['price']}")
252+
253+
# 💰 Calcular el total de todas las ventas
254+
def calcular_total_ventas(productos):
255+
total = sum(p["quantity"] * p["price"] for p in productos)
256+
print(f"💸 Total de ventas: {total}")
257+
258+
# 💵 Calcular total de venta de un producto específico
259+
def calcular_venta_producto(productos):
260+
name = input("Nombre: ")
261+
for p in productos:
262+
if p["name"] == name:
263+
total = p["quantity"] * p["price"]
264+
print(f"💰 Total de {name}: {total}")
265+
return
266+
print("❌ Producto no encontrado.")
267+
268+
# 🚀 Bucle principal del programa
269+
productos = cargar_productos() # Cargamos productos desde el archivo al iniciar
270+
271+
# Mientras no se elija salir
272+
while True:
273+
mostrar_menu() # Mostramos menú de opciones
274+
275+
try:
276+
option = int(input("Seleccione una opción: ")) # Leemos la opción elegida
277+
except ValueError:
278+
print("❌ Debes ingresar un número.")
279+
continue # Si no es número, vuelve a mostrar el menú
280+
281+
# Según la opción elegida, ejecutamos la función correspondiente
282+
if option == 1:
283+
añadir_producto(productos)
284+
guardar_productos(productos)
285+
elif option == 2:
286+
consultar_producto(productos)
287+
elif option == 3:
288+
actualizar_producto(productos)
289+
elif option == 4:
290+
borrar_producto(productos)
291+
elif option == 5:
292+
mostrar_productos(productos)
293+
elif option == 6:
294+
calcular_total_ventas(productos)
295+
elif option == 7:
296+
calcular_venta_producto(productos)
297+
elif option == 8:
298+
# Antes de salir, guardamos los productos actualizados
299+
guardar_productos(productos)
300+
# Eliminamos el archivo si así se desea
301+
os.remove(file_name)
302+
print("✅ Archivo eliminado y programa cerrado.")
303+
break # Terminamos el bucle y cerramos programa
304+
else:
305+
print("⚠️ Opción no válida.")

0 commit comments

Comments
 (0)