├── 1.Fundamentos de Programación y Python ├── cadenas.py ├── holaMundo.py ├── input.py ├── int_float_boolean.py ├── operadores_comparación.py ├── operadores_numéricos.py └── variables.py ├── 2.Colección y Procesamiento de Datos en Python ├── comprehesions_list.py ├── diccionarios.py ├── listas.py ├── listas_slicing.py └── matrix_tuple.py ├── 3.Control de Flujo en Python ├── for while.py ├── if_ejercicio_1.py ├── if_ejercicio_2.py ├── if_ejercicio_3.py ├── iteradores_cadenas.py ├── iteradores_impares.py └── iteradores_my_list.py ├── 4.Funciones y Manejo de Excepciones en Python ├── exceptions.py ├── exceptions_tree.py ├── fibonacci.py ├── funciones.py ├── funciones_calculator.py └── lambda.py ├── 5.Programación Orientada a Objetos en Python ├── bankAccount.py ├── herencia_dealership.py ├── library.py ├── poo.py ├── poo_dealership copy.py ├── poo_dealership.py ├── super.py └── super_level_3.py ├── 6.Lectura y escritura de archivos ├── README.md ├── cuento.txt ├── monthly_sales.csv ├── new_column.py ├── new_data_csv.py ├── new_data_json.py ├── products.csv ├── products.json ├── products_updated.csv ├── read_csv.py ├── read_file.py ├── read_json.py └── sales_csv.py ├── 7.Biblioteca estándar de Python ├── math_example.py ├── monthly_sales.numbers ├── os_example.py ├── randoms.py └── statistics_example.py ├── Batalla_naval.py ├── Ejercicios ├── 1_scientific_calculator.py ├── 2_students_system.py ├── 3_dice_simulator.py └── README.md ├── Proyecto Final ├── Batalla_naval.py └── README.md └── README.md /1.Fundamentos de Programación y Python/cadenas.py: -------------------------------------------------------------------------------- 1 | name = 'CARLA Marcela' 2 | last_name = ' Florida Roman ' 3 | print(5 * name) 4 | print(name + ' ' + last_name) 5 | print(len(name)) 6 | print(len(last_name)) 7 | print(name.lower()) 8 | print(name.upper()) 9 | print(last_name.strip()) -------------------------------------------------------------------------------- /1.Fundamentos de Programación y Python/holaMundo.py: -------------------------------------------------------------------------------- 1 | print("Hola mundo") -------------------------------------------------------------------------------- /1.Fundamentos de Programación y Python/input.py: -------------------------------------------------------------------------------- 1 | name = input("Ingrese su nombre: ") 2 | print(name) 3 | print(type(name)) 4 | age = int(input("Ingrese su edad: ")) 5 | print(type(age)) -------------------------------------------------------------------------------- /1.Fundamentos de Programación y Python/int_float_boolean.py: -------------------------------------------------------------------------------- 1 | x = 10 2 | y = 5.678 3 | #z = 1.2E6 4 | #a = 1.2E-6 5 | print(type(x)) 6 | print(type(y)) 7 | #print(z) 8 | #print(a) 9 | print(x + x) 10 | print(x + y) 11 | print(y + y) 12 | is_true = True 13 | is_false = False 14 | print(is_true) 15 | print(type(is_true)) -------------------------------------------------------------------------------- /1.Fundamentos de Programación y Python/operadores_comparación.py: -------------------------------------------------------------------------------- 1 | a = 10 2 | b = 3 3 | print(a > b) 4 | print(a < b) 5 | print(a >= b) 6 | print(a <= b) 7 | print(a == b) 8 | print(a != b) -------------------------------------------------------------------------------- /1.Fundamentos de Programación y Python/operadores_numéricos.py: -------------------------------------------------------------------------------- 1 | #Operadores numéricos 2 | a = 10 3 | b = 10 4 | print("Suma:", a + b) 5 | print("Resta:", a - b) 6 | print("Multiplicación:", a * b) 7 | print("Potenciación:", a ** b) 8 | print("División:", a / b) 9 | print("Parte entera de la división:", a // b) 10 | print("Módulo:", a % b) 11 | a /= 2 12 | print(a) 13 | operation_1 = 2 + 3 * 4 14 | operation_2 = (2 + 3) * 4 15 | print(operation_1) 16 | print(operation_2) 17 | operation_3 = (2+3) * (4**2)/ 8 - 1 18 | print(operation_3) -------------------------------------------------------------------------------- /1.Fundamentos de Programación y Python/variables.py: -------------------------------------------------------------------------------- 1 | saludo_1 = "Hola" 2 | saludo_2 = "Hi" 3 | nombre = "carli" 4 | print(saludo_1) 5 | print(nombre) -------------------------------------------------------------------------------- /2.Colección y Procesamiento de Datos en Python/comprehesions_list.py: -------------------------------------------------------------------------------- 1 | squares = [x**2 for x in range(1,11)] 2 | #print("Cuadrados:", squares) 3 | 4 | celsius = [0, 10, 20, 30, 40] 5 | fahrenheit = [(temp * 9/5) *32 for temp in celsius] 6 | #print("Temperatura en F:", fahrenheit) 7 | 8 | #Numeros pares 9 | evens = [x for x in range(1,21) if x%2 ==0] 10 | #print(evens) 11 | 12 | matrix = [[1,2,3], 13 | [4,5,6], 14 | [7,8,9]] 15 | 16 | transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))] 17 | 18 | print(matrix) 19 | #print(transposed) 20 | 21 | transposed = [] 22 | for i in range(len(matrix[0])): 23 | transposed_row = [] 24 | for row in matrix: 25 | transposed_row.append(row[i]) 26 | transposed.append(transposed_row) 27 | 28 | print(transposed) 29 | -------------------------------------------------------------------------------- /2.Colección y Procesamiento de Datos en Python/diccionarios.py: -------------------------------------------------------------------------------- 1 | numbers = {1:"uno", 2:"dos", 3:"tres"} 2 | print(numbers[2]) 3 | information = {"nombre": "Carla", 4 | "Apellido": "Florida", 5 | "Altura": 1.60, 6 | "Edad": 29} 7 | print(information) 8 | del information["Edad"] 9 | print(information) 10 | claves = information.keys() 11 | print(claves) 12 | #print(type(claves)) 13 | values = information.values() 14 | print(values) 15 | pairs = information.items() 16 | print(pairs) 17 | contacts = {"Carla": {"Apellido": "Florida", 18 | "Altura": 1.60, 19 | "Edad": 29}, 20 | "Diego": {"Apellido": "Antezana", 21 | "Altura": 1.80, 22 | "Edad": 32}} 23 | print(contacts["Carla"]) -------------------------------------------------------------------------------- /2.Colección y Procesamiento de Datos en Python/listas.py: -------------------------------------------------------------------------------- 1 | to_do = ["Dirigirnos al hotel", 2 | "Ir a almorzar", 3 | "Visitar un museo", 4 | "Volver al hotel"] 5 | print(to_do) 6 | numbers = [1,2,3,4, "cinco"] 7 | print(type(numbers)) 8 | mix = ["uno", 2, 3.14, True, [1,2,3]] 9 | print(mix) 10 | print(len(mix)) 11 | print("Primer elemento", mix[0]) 12 | print("Segundo elemento", mix[1]) 13 | print("Ultimo elemento:", mix[-1]) 14 | string = "Hola mundo" 15 | print("Primer elemento", string[0]) 16 | print("Segundo elemento", string[1]) 17 | print("Ultimo elemento:", string[-1]) 18 | print(mix[2:-2]) 19 | print(mix) 20 | mix.append(False) 21 | print(mix) 22 | mix.append(["a","b"]) 23 | print(mix) 24 | mix.insert(1,["a","b"]) 25 | print(mix) 26 | print(mix.index(["a","b"])) 27 | numbers = [1,2,100.01,90.45,3,4, 5] 28 | print(numbers) 29 | print("Mayor:",max(numbers)) 30 | print("Menor:",min(numbers)) 31 | del numbers[-1] 32 | print(numbers) 33 | del numbers[:2] 34 | print(numbers) 35 | del numbers 36 | #print(numbers) -------------------------------------------------------------------------------- /2.Colección y Procesamiento de Datos en Python/listas_slicing.py: -------------------------------------------------------------------------------- 1 | a = [1,2,3,4,5] 2 | b = a 3 | print(a) 4 | print(b) 5 | del a[0] 6 | print(id(a)) 7 | print(id(b)) 8 | c = a[:] 9 | print(id(a)) 10 | print(id(b)) 11 | print(id(c)) 12 | a.append(6) 13 | print(a) 14 | print(b) 15 | print(c) 16 | -------------------------------------------------------------------------------- /2.Colección y Procesamiento de Datos en Python/matrix_tuple.py: -------------------------------------------------------------------------------- 1 | matrix = [[1,2,3], 2 | [4,5,6], 3 | [7,8,9]] 4 | print(matrix[2][1]) 5 | numbers = 1,2,3,4,5 6 | print(numbers) 7 | print(type(numbers)) 8 | print(numbers[0]) 9 | #numbers[0] = 'unos' 10 | #print(numbers) 11 | -------------------------------------------------------------------------------- /3.Control de Flujo en Python/for while.py: -------------------------------------------------------------------------------- 1 | numbers = [1, 2, 3, 4, 5, 6] 2 | for i in numbers: 3 | print("Aquí i es igual a:",i+1) 4 | 5 | for i in range(3,10): 6 | print(i) 7 | 8 | fruits = ["Manzana", "Pera", "Uva", "Naranja", "Tomate"] 9 | for fruit in fruits: 10 | print(fruit) 11 | if fruit == "Naranja": 12 | print("Naranja encontrada") 13 | 14 | x = 0 15 | while x<5: 16 | if x ==3: 17 | break 18 | print(x) 19 | x +=1 20 | 21 | numbers = [1, 2, 3, 4, 5, 6] 22 | for i in numbers: 23 | if i ==3: 24 | break 25 | print("Aquí i es igual a:",i) -------------------------------------------------------------------------------- /3.Control de Flujo en Python/if_ejercicio_1.py: -------------------------------------------------------------------------------- 1 | x = 5 2 | if x > 5: 3 | print("X es mayor que 5") 4 | elif x == 5: 5 | print("X es igual que 5") 6 | else: 7 | print("X es menor que 5") 8 | print("afuera") -------------------------------------------------------------------------------- /3.Control de Flujo en Python/if_ejercicio_2.py: -------------------------------------------------------------------------------- 1 | x = 15 2 | y = 20 3 | 4 | if x>10 and y>25: 5 | print("X es mayor que 10 y Y es mayor que 15") 6 | 7 | if x>10 or y>25: 8 | print("X es mayor que 10 O Y es Mayor que 25") 9 | 10 | if not x>10: 11 | print("X no es mayor que 10") -------------------------------------------------------------------------------- /3.Control de Flujo en Python/if_ejercicio_3.py: -------------------------------------------------------------------------------- 1 | is_member = True 2 | age = 11 3 | 4 | if is_member: 5 | if age>=15: 6 | print("Tienes acceso ya que eres miembro y mayor o igual a 15 años") 7 | else: 8 | print("No tienes acceso ya que eres miembro pero menor a 15 años") 9 | else: 10 | print("No eres miembro y NO TIENES ACCESO") 11 | -------------------------------------------------------------------------------- /3.Control de Flujo en Python/iteradores_cadenas.py: -------------------------------------------------------------------------------- 1 | # Iterar en cadenas 2 | #Creando la cadena 3 | text = "Hola mundo" 4 | #Creando el iterador 5 | iter_text = iter(text) 6 | 7 | #Iterar en la cadena 8 | for char in iter_text: 9 | print(char) 10 | 11 | -------------------------------------------------------------------------------- /3.Control de Flujo en Python/iteradores_impares.py: -------------------------------------------------------------------------------- 1 | # Crear un iterador para los numeros impares 2 | 3 | #Limite 4 | limit = 10 5 | 6 | #Crear iterador 7 | odd_itter = iter(range(1,limit+1,2)) 8 | 9 | #Usar el iterador 10 | for num in odd_itter: 11 | print(num) -------------------------------------------------------------------------------- /3.Control de Flujo en Python/iteradores_my_list.py: -------------------------------------------------------------------------------- 1 | # Ejemplo de iterador 2 | 3 | #Crear una lista 4 | my_list = [1,2,3,4] 5 | 6 | #Obtener el iterador 7 | my_iter = iter(my_list) 8 | 9 | #Usar el iterador 10 | print(next(my_iter)) 11 | print(next(my_iter)) 12 | print(next(my_iter)) 13 | print(next(my_iter)) 14 | #print(next(my_iter)) -------------------------------------------------------------------------------- /4.Funciones y Manejo de Excepciones en Python/exceptions.py: -------------------------------------------------------------------------------- 1 | try: 2 | divisor = int(input("Ingresa un numero divisor: ")) 3 | result = 100/divisor 4 | print(result) 5 | except ZeroDivisionError as e: 6 | print("Error: El divisor no puede ser cero") 7 | print("Ha ocurrido un error: ", e) 8 | except ValueError as e: 9 | print("Error: Debes introducir un número válido ") 10 | print("Ha ocurrido un error: ", e) -------------------------------------------------------------------------------- /4.Funciones y Manejo de Excepciones en Python/exceptions_tree.py: -------------------------------------------------------------------------------- 1 | def print_exception_hierarchy(exception_class, indent=0): 2 | print(' ' * indent + exception_class.__name__) 3 | for subclass in exception_class.__subclasses__(): 4 | print_exception_hierarchy(subclass, indent + 4) 5 | 6 | print_exception_hierarchy(Exception) -------------------------------------------------------------------------------- /4.Funciones y Manejo de Excepciones en Python/fibonacci.py: -------------------------------------------------------------------------------- 1 | def sum_numbers(n): 2 | # Caso base: si n es 0, la suma es 0 3 | if n == 0: 4 | return 0 5 | # Caso recursivo: n + suma de (n-1) 6 | else: 7 | return n + sum_numbers(n - 1) 8 | 9 | # Llamada a la función 10 | result = sum_numbers(5) 11 | print(f"Suma de los primeros 5 números es: {result}") -------------------------------------------------------------------------------- /4.Funciones y Manejo de Excepciones en Python/funciones.py: -------------------------------------------------------------------------------- 1 | def greet(name, last_name="No tiene apellido"): 2 | print("Hola", name, last_name) 3 | 4 | greet("Carli", "Florida") 5 | greet("Diego") 6 | greet(last_name = "Florida", name = "Carli") -------------------------------------------------------------------------------- /4.Funciones y Manejo de Excepciones en Python/funciones_calculator.py: -------------------------------------------------------------------------------- 1 | def add(a,b): 2 | return a+b 3 | 4 | def substract(a,b): 5 | return a - b 6 | 7 | def multiply(a,b): 8 | return a * b 9 | 10 | def divide(a,b): 11 | return a / b 12 | 13 | def calculator(): 14 | while True: 15 | print("Seleccione una operación") 16 | print("1. Suma") 17 | print("2. Resta") 18 | print("3. Multiplicación") 19 | print("4. División") 20 | print("5. Salir") 21 | 22 | option = input("Ingrese su opción (1,2,3,4,5): ") 23 | 24 | if option == "5": 25 | print("Saliendo de la calculadora") 26 | break 27 | 28 | if option in ["1","2","3","4"]: 29 | num1 = float(input("Ingrese el primer numero: ")) 30 | num2 = float(input("Ingrese el segundo numero: ")) 31 | 32 | if option == "1": 33 | print("La suma es:", add(num1, num2)) 34 | elif option == "2": 35 | print("La resta es:", substract(num1, num2)) 36 | elif option == "3": 37 | print("La división es:", divide(num1, num2)) 38 | elif option == "4": 39 | print("La multiplicación es:", multiply(num1, num2)) 40 | 41 | else: 42 | print("Opción no válida, por intenta de nuevo") 43 | 44 | calculator() -------------------------------------------------------------------------------- /4.Funciones y Manejo de Excepciones en Python/lambda.py: -------------------------------------------------------------------------------- 1 | add = lambda a, b: a + b 2 | print(add(10,4)) 3 | 4 | multiply = lambda a, b: a * b 5 | print(multiply(80,5)) 6 | 7 | #Cuadrado de cada numero 8 | numbers = range(11) 9 | squared_numbers = list(map(lambda x: x**2, numbers)) 10 | print("Cuadrados:", squared_numbers ) 11 | 12 | #Pares 13 | even_numbers = list(filter(lambda x: x%2 == 0, numbers)) 14 | print("Pares:", even_numbers) -------------------------------------------------------------------------------- /5.Programación Orientada a Objetos en Python/bankAccount.py: -------------------------------------------------------------------------------- 1 | class BankAccount: 2 | def __init__(self, account_holder, balance): 3 | self.account_holder = account_holder 4 | self. balance = balance 5 | self.is_active = True 6 | 7 | def deposit(self, amount): 8 | if self.is_active: 9 | self.balance += amount 10 | print(f"Se ha depositado {amount}. Saldo actual {self.balance}") 11 | else: 12 | print("No se puede depositar, Cuenta inactiva") 13 | 14 | def withdraw(self, amount): 15 | if self.active: 16 | if amount <= self.balance: 17 | self.balance -= amount 18 | print(f"Se ha retirado {amount}. Saldo actual {self.balance}") 19 | 20 | def deactivate_account(self): 21 | self.is_active = False 22 | print(f"La cuenta ha sido desactivada") 23 | 24 | def activate_account(self): 25 | self.is_active = True 26 | print(f"La cuenta ha sido activada") 27 | 28 | account1 = BankAccount("Ana", 500) 29 | account2 = BankAccount("Luis", 1000) 30 | 31 | #Llamada a los metodos 32 | account1.deposit(200) 33 | account2.deposit(100) 34 | account1.deactivate_account() 35 | account1.deposit(50) 36 | account1.activate_account() 37 | account1.deposit(50) -------------------------------------------------------------------------------- /5.Programación Orientada a Objetos en Python/herencia_dealership.py: -------------------------------------------------------------------------------- 1 | class Vehicle: 2 | def __init__(self, brand, model, price): 3 | #Encapsulación 4 | self.brand = brand 5 | self.model = model 6 | self.price = price 7 | self.is_available = True 8 | 9 | def sell(self): 10 | if self.is_available: 11 | self.is_available = False 12 | print(f"El vehiculo {self.brand}. Ha sido vendido") 13 | else: 14 | print(f"El vehiculo {self.brand}. No está disponible") 15 | 16 | #Abstracción 17 | def check_available(self): 18 | return self.is_available 19 | 20 | #Abstracción 21 | def get_price(self): 22 | return self.price 23 | 24 | def start_engine(self): 25 | raise NotImplementedError("Este metodo debe ser implementado por la subclase") 26 | 27 | def stop_engine(self): 28 | raise NotImplementedError("Este metodo debe ser implementado por la subclase") 29 | 30 | #Herencia 31 | class Car(Vehicle): 32 | #Polimorfismo 33 | def start_engine(self): 34 | if not self.is_available: 35 | return f"El motor del coche {self.brand} está en marcha" 36 | else: 37 | return f"El coche {self.brand} no está disponible" 38 | 39 | #Polimorfismo 40 | def stop_engine(self): 41 | if self.is_available: 42 | return f"El motor del coche {self.brand} se ha detenido" 43 | else: 44 | return f"El coche {self.brand} No está disponible" 45 | 46 | #Herencia 47 | class Bike(Vehicle): 48 | #Polimorfismo 49 | def start_engine(self): 50 | if not self.is_available: 51 | return f"La bicicleta {self.brand} está en marcha" 52 | else: 53 | return f"La bicicleta {self.brand} no está disponible" 54 | 55 | #Polimorfismo 56 | def stop_engine(self): 57 | if self.is_available: 58 | return f"La bicicleta {self.brand} se ha detenido" 59 | else: 60 | return f"La bicicleta {self.brand} No está disponible" 61 | 62 | #Herencia 63 | class Truck(Vehicle): 64 | #Polimorfismo 65 | def start_engine(self): 66 | if not self.is_available: 67 | return f"El motor del camión {self.brand} está en marcha" 68 | else: 69 | return f"El camión {self.brand} no está disponible" 70 | 71 | #Polimorfismo 72 | def stop_engine(self): 73 | if self.is_available: 74 | return f"El motor del camión {self.brand} se ha detenido" 75 | else: 76 | return f"El camión {self.brand} No está disponible" 77 | 78 | class Customer: 79 | def __init__(self, name): 80 | self.name = name 81 | self.purchased_vehicles = [] 82 | 83 | def buy_vehicle(self, vehicle: Vehicle): 84 | if vehicle.check_available(): 85 | vehicle.sell() 86 | self.purchased_vehicles.append(vehicle) 87 | else: 88 | print(f"Lo siento,{vehicle.brand} no está disponible") 89 | 90 | def inquire_vehicle(self, vehicle: Vehicle): 91 | if vehicle.check_available(): 92 | availablity = "Disponible" 93 | else: 94 | availablity = "No disponible" 95 | print(f"El {vehicle.brand} está {availablity} y cuesta {vehicle.get_price()}") 96 | 97 | class Dealership: 98 | def __init__(self): 99 | self.inventory = [] 100 | self.customers = [] 101 | 102 | def add_vehicles(self, vehicle: Vehicle): 103 | self.inventory.append(vehicle) 104 | print(f"El {vehicle.brand} ha sido añadido al inventario") 105 | 106 | def register_customers(self, customer: Customer): 107 | self.customers.append(customer) 108 | print(f"El cliente {customer.name} ha sido añadido") 109 | 110 | def show_available_vehicle(self): 111 | print("Vehiculos disponibles en la tienda") 112 | for vehicle in self.inventory: 113 | if vehicle.check_available(): 114 | print(f"- {vehicle.brand} por {vehicle.get_price()}") 115 | 116 | car1 = Car("Toyota", "Corolla", 20000) 117 | bike1 = Bike("Yamaha", "MT-07", 7000) 118 | truck1 = Truck("Volvo", "FH16", 80000) 119 | 120 | customer1 = Customer("Carlos") 121 | 122 | dealership = Dealership() 123 | dealership.add_vehicles(car1) 124 | dealership.add_vehicles(bike1) 125 | dealership.add_vehicles(truck1) 126 | 127 | #Mostrar vehiculos disponibles 128 | dealership.show_available_vehicle() 129 | 130 | #Cliente consultar un vehiculo 131 | customer1.inquire_vehicle(car1) 132 | 133 | #Cliente comprar un vehiculo 134 | customer1.buy_vehicle(car1) 135 | 136 | #Mostrar vehiculos disponibles 137 | dealership.show_available_vehicle() -------------------------------------------------------------------------------- /5.Programación Orientada a Objetos en Python/library.py: -------------------------------------------------------------------------------- 1 | from typing import Any 2 | 3 | 4 | class Book: 5 | def __init__(self, title, author): 6 | self.title = title 7 | self.author = author 8 | self.available = True 9 | 10 | def borrow(self): 11 | if self.available: 12 | self.available = False 13 | print(f"El libro {self.title} ha sido prestado") 14 | else: 15 | print(f"El libro {self.title} no está disponible") 16 | 17 | def return_book(self): 18 | self.available = True 19 | print(f"El libro {self.title} ha sido devuelto") 20 | 21 | class User: 22 | def __init__(self, name, user_id): 23 | self.name = name 24 | self.user_id = user_id 25 | self.borrowed_books = [] 26 | 27 | def borrow_book(self, book): 28 | if book.available: 29 | book.borrow() 30 | self.borrowed_books.append(book) 31 | else: 32 | print(f"El libro {book.title} No esta disponible") 33 | 34 | def return_book(self, book): 35 | if book in self.borrowed_books: 36 | book.return_book() 37 | self.borrowed_books.remove(book) 38 | else: 39 | print(f"El libro {book.title} No esta en la lista de prestados") 40 | 41 | class Library: 42 | def __init__(self): 43 | self.books = [] 44 | self.users = [] 45 | 46 | def add_book(self, book): 47 | self.books.append(book) 48 | print(f"El libro {book.title} ha sido agregado") 49 | 50 | def register_user(self, user): 51 | self.users.append(user) 52 | print(f"El usuario {user.name} ha sido registrado") 53 | 54 | def show_available_books(self): 55 | print("Libros disponibles:") 56 | for book in self.books: 57 | if book.available: 58 | print(f"{book.title} por {book. author}") 59 | 60 | #Crear los libros 61 | book1 = Book("El principito", "Antoine de Saint-Exupéry") 62 | book2 = Book("1984", "George Orwell") 63 | 64 | #Crear usuario 65 | user1 = User("Carli", "001") 66 | 67 | #Crear Biblioteca 68 | library = Library() 69 | library.add_book(book1) 70 | library.add_book(book2) 71 | library.register_user(user1) 72 | 73 | #Mostrar libros 74 | library.show_available_books() 75 | 76 | #Realizar prestamo 77 | user1.borrow_book(book1) 78 | 79 | #Mostrar libros 80 | library.show_available_books() 81 | 82 | #Devolver libro 83 | user1.return_book(book1) 84 | 85 | #Mostrar libros 86 | library.show_available_books() -------------------------------------------------------------------------------- /5.Programación Orientada a Objetos en Python/poo.py: -------------------------------------------------------------------------------- 1 | class Person: 2 | def __init__(self, name, age): 3 | self.name = name 4 | self.age = age 5 | 6 | def greet(self): 7 | print(f"Hola, mi nombre es {self.name} y tengo {self.age}") 8 | 9 | person1 = Person("Ana", 30) 10 | person2 = Person("Luis", 25) 11 | 12 | person1.greet() 13 | person2.greet() -------------------------------------------------------------------------------- /5.Programación Orientada a Objetos en Python/poo_dealership copy.py: -------------------------------------------------------------------------------- 1 | class Car: 2 | def __init__(self, brand, model, price): 3 | self.brand = brand 4 | self.model = model 5 | self.price = price 6 | self.is_available = True 7 | 8 | def sell(self): 9 | if self.is_available: 10 | self.is_available = False 11 | print(f"El coche {self.brand} {self.model} ha sido vendido.") 12 | else: 13 | print(f"El coche {self.brand} {self.model} no está disponible.") 14 | 15 | def check_availability(self): 16 | return self.is_available 17 | 18 | def get_price(self): 19 | return self.price 20 | 21 | 22 | class Customer: 23 | def __init__(self, name): 24 | self.name = name 25 | self.cars_purchased = [] 26 | 27 | def buy_car(self, car): 28 | if car.check_availability(): 29 | car.sell() 30 | self.cars_purchased.append(car) 31 | else: 32 | print(f"Lo siento, {car.brand} {car.model} no está disponible.") 33 | 34 | def inquire_car(self, car): 35 | availability = "disponible" if car.check_availability() else "no disponible" 36 | print(f"El coche {car.brand} {car.model} está {availability} y cuesta {car.get_price()}.") 37 | 38 | 39 | class Dealership: 40 | def __init__(self): 41 | self.inventory = [] 42 | self.customers = [] 43 | 44 | def add_car(self, car): 45 | self.inventory.append(car) 46 | print(f"El coche {car.brand} {car.model} ha sido añadido al inventario.") 47 | 48 | def register_customer(self, customer): 49 | self.customers.append(customer) 50 | print(f"El cliente {customer.name} ha sido registrado en la concesionaria.") 51 | 52 | def show_available_cars(self): 53 | print("Coches disponibles en la concesionaria:") 54 | for car in self.inventory: 55 | if car.check_availability(): 56 | print(f"- {car.brand} {car.model} por {car.get_price()}") 57 | 58 | 59 | # Crear instancias de coches 60 | car1 = Car("Toyota", "Corolla", 20000) 61 | car2 = Car("Honda", "Civic", 22000) 62 | car3 = Car("Ford", "Mustang", 35000) 63 | 64 | # Crear instancia de cliente 65 | customer1 = Customer("Carlos") 66 | 67 | # Crear instancia de concesionaria y registrar coches y clientes 68 | dealership = Dealership() 69 | dealership.add_car(car1) 70 | dealership.add_car(car2) 71 | dealership.add_car(car3) 72 | dealership.register_customer(customer1) 73 | 74 | # Mostrar coches disponibles 75 | dealership.show_available_cars() 76 | 77 | # Cliente consulta un coche 78 | customer1.inquire_car(car1) 79 | 80 | # Cliente compra un coche 81 | customer1.buy_car(car1) 82 | 83 | # Mostrar coches disponibles nuevamente 84 | dealership.show_available_cars() 85 | 86 | # Cliente intenta comprar un coche ya vendido 87 | customer1.buy_car(car1) 88 | -------------------------------------------------------------------------------- /5.Programación Orientada a Objetos en Python/poo_dealership.py: -------------------------------------------------------------------------------- 1 | class Car: 2 | def __init__(self, brand, model, price): 3 | self.brand = brand 4 | self.model = model 5 | self.price = price 6 | self.is_available = True 7 | 8 | def sell(self): 9 | if self.is_available: 10 | self.is_available = False 11 | print(f"El coche {self.brand} {self.model} ha sido vendido.") 12 | else: 13 | print(f"El coche {self.brand} {self.model} no está disponible.") 14 | 15 | def check_availability(self): 16 | return self.is_available 17 | 18 | def get_price(self): 19 | return self.price 20 | 21 | 22 | class Customer: 23 | def __init__(self, name): 24 | self.name = name 25 | self.cars_purchased = [] 26 | 27 | def buy_car(self, car): 28 | if car.check_availability(): 29 | car.sell() 30 | self.cars_purchased.append(car) 31 | else: 32 | print(f"Lo siento, {car.brand} {car.model} no está disponible.") 33 | 34 | def inquire_car(self, car): 35 | availability = "disponible" if car.check_availability() else "no disponible" 36 | print(f"El coche {car.brand} {car.model} está {availability} y cuesta {car.get_price()}.") 37 | 38 | 39 | class Dealership: 40 | def __init__(self): 41 | self.inventory = [] 42 | self.customers = [] 43 | 44 | def add_car(self, car): 45 | self.inventory.append(car) 46 | print(f"El coche {car.brand} {car.model} ha sido añadido al inventario.") 47 | 48 | def register_customer(self, customer): 49 | self.customers.append(customer) 50 | print(f"El cliente {customer.name} ha sido registrado en la concesionaria.") 51 | 52 | def show_available_cars(self): 53 | print("Coches disponibles en la concesionaria:") 54 | for car in self.inventory: 55 | if car.check_availability(): 56 | print(f"- {car.brand} {car.model} por {car.get_price()}") 57 | 58 | 59 | # Crear instancias de coches 60 | car1 = Car("Toyota", "Corolla", 20000) 61 | car2 = Car("Honda", "Civic", 22000) 62 | car3 = Car("Ford", "Mustang", 35000) 63 | 64 | # Crear instancia de cliente 65 | customer1 = Customer("Carlos") 66 | 67 | # Crear instancia de concesionaria y registrar coches y clientes 68 | dealership = Dealership() 69 | dealership.add_car(car1) 70 | dealership.add_car(car2) 71 | dealership.add_car(car3) 72 | dealership.register_customer(customer1) 73 | 74 | # Mostrar coches disponibles 75 | dealership.show_available_cars() 76 | 77 | # Cliente consulta un coche 78 | customer1.inquire_car(car1) 79 | 80 | # Cliente compra un coche 81 | customer1.buy_car(car1) 82 | 83 | # Mostrar coches disponibles nuevamente 84 | dealership.show_available_cars() 85 | 86 | # Cliente intenta comprar un coche ya vendido 87 | customer1.buy_car(car1) 88 | -------------------------------------------------------------------------------- /5.Programación Orientada a Objetos en Python/super.py: -------------------------------------------------------------------------------- 1 | class Person: 2 | def __init__(self, name, age): 3 | self.name = name 4 | self.age = age 5 | 6 | def greet(self): 7 | print("Hello! I am a person.") 8 | 9 | class Student(Person): 10 | def __init__(self, name, age, student_id): 11 | super().__init__(name, age) 12 | self.student_id = student_id 13 | 14 | def greet(self): 15 | super().greet() 16 | print(f"Hello, my student ID is {self.student_id}") 17 | 18 | student = Student("Ana", 20, "S123") 19 | student.greet() 20 | 21 | -------------------------------------------------------------------------------- /5.Programación Orientada a Objetos en Python/super_level_3.py: -------------------------------------------------------------------------------- 1 | class LivingBeing: 2 | def __init__(self, name): 3 | self.name = name 4 | 5 | class Person(LivingBeing): 6 | def __init__(self, name, age): 7 | super().__init__(name) 8 | self.age = age 9 | 10 | class Student(Person): 11 | def __init__(self, name, age, student_id): 12 | super().__init__(name, age) 13 | self.student_id = student_id 14 | 15 | def introduce(self): 16 | print(f"Hi, I'm {self.name}, {self.age} years old, and my student ID is {self.student_id}") 17 | 18 | student = Student("Carlos", 21, "S54321") 19 | student.introduce() 20 | 21 | -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/README.md: -------------------------------------------------------------------------------- 1 | ## Python 2 | -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/cuento.txt: -------------------------------------------------------------------------------- 1 | I'm on my way to see my Grandma who lives through the forest, near the brook," Little Red Riding Hood replied. 2 | 3 | Then she realized how late she was and quickly excused herself, rushing down the path to her Grandma's house. 4 | 5 | The wolf, in the meantime, took a shortcut... 6 | 7 | The wolf, a little out of breath from running, arrived at Grandma’s and knocked lightly at the door. 8 | 9 | "Oh thank goodness dear! Come in, come in! I was worried sick that something had happened to you in the forest," said Grandma thinking that the knock was her granddaughter. 10 | 11 | The wolf let himself in. Poor Granny did not have time to say another word before the wolf gobbled her up! 12 | 13 | The wolf let out a satisfied burp, and then poked through Granny’s wardrobe to find a nightgown that he liked. He added a frilly sleeping cap, and for good measure, dabbed some of Granny’s perfume behind his pointy ears. 14 | 15 | A few minutes later, Red Riding Hood knocked on the door. The wolf jumped into bed and pulled the covers over his nose. 16 | 17 | "Who is it?" he called in a cackly voice. 18 | 19 | "It's me, Little Red Riding Hood." 20 | 21 | "Oh how lovely! Do come in, my dear," croaked the wolf. 22 | 23 | When Little Red Riding Hood entered the little cottage, she could scarcely recognize her Grandmother. 24 | 25 | "Grandmother! Your voice sounds so odd. Is something the matter?" she asked. 26 | 27 | "Oh, I just have a touch of a cold," squeaked the wolf adding a cough at the end to prove the point. 28 | 29 | "But Grandmother! What big ears you have," said Little Red Riding Hood as she edged closer to the bed. 30 | 31 | "The better to hear you with, my dear," replied the wolf. 32 | 33 | "But Grandmother! What big eyes you have," said Little Red Riding Hood. 34 | 35 | "The better to see you with, my dear," replied the wolf. 36 | 37 | "But Grandmother! What big teeth you have," said Little Red Riding Hood her voice quivering slightly. 38 | 39 | "The better to eat you with, my dear," roared the wolf and he leapt out of the bed and began to chase the little girl. 40 | 41 | Almost too late, Little Red Riding Hood realized that the person in the bed was not her Grandmother, but a hungry wolf. 42 | 43 | She ran across the room and through the door, shouting, "Help! Wolf!" as loudly as she could. 44 | 45 | A woodsman who was chopping logs nearby heard her cry and ran towards the cottage as fast as he could. 46 | 47 | He grabbed the wolf and made him spit out the poor Grandmother who was a bit frazzled by the whole experience, but still in one piece. 48 | 49 | "Oh Grandma, I was so scared!" sobbed Little Red Riding Hood, "I'll never speak to strangers or dawdle in the forest again." 50 | 51 | "There, there, child. You've learned an important lesson. Thank goodness you shouted loud enough for this kind woodsman to hear you!" 52 | 53 | The woodsman knocked out the wolf and carried him deep into the forest where he wouldn't bother people any longer. 54 | 55 | Little Red Riding Hood and her Grandmother had a nice lunch and a long chat. 56 | 57 | The End. 58 | 59 | By:ChatGPT -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/monthly_sales.csv: -------------------------------------------------------------------------------- 1 | month,sales 2 | Enero,120 3 | Febrero,130 4 | Marzo,150 5 | Abril,170 6 | Mayo,160 7 | Junio,180 8 | Julio,190 9 | Agosto,200 10 | Septiembre,210 11 | Octubre,190 12 | Noviembre,185 13 | Diciembre,210 -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/new_column.py: -------------------------------------------------------------------------------- 1 | import csv 2 | 3 | file_path = 'products.csv' 4 | updated_file_path = 'products_updated.csv' 5 | 6 | with open(file_path, mode='r') as file: 7 | csv_reader = csv.DictReader(file) 8 | #Obtener los nombres de las columnas existentes 9 | fieldnames = csv_reader.fieldnames + ['total_value'] 10 | 11 | with open(updated_file_path, mode='w', newline='') as updated_file: 12 | csv_writer = csv.DictWriter(updated_file, fieldnames=fieldnames) 13 | csv_writer.writeheader() #Escribir los encabezados 14 | 15 | for row in csv_reader: 16 | row['total_value'] = float(row['price']) * int(row['quantity']) 17 | csv_writer.writerow(row) -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/new_data_csv.py: -------------------------------------------------------------------------------- 1 | import csv 2 | 3 | new_product = { 4 | 'name': 'Wireless Charger', 5 | 'price': 75, 6 | 'quantity': 100, 7 | 'brand': 'ChargerMaster', 8 | 'category': 'Accessories', 9 | 'entry_date': '2024-07-01' 10 | } 11 | 12 | with open('products.csv', mode='a', newline='') as file: 13 | file.write('\n') 14 | csv_writer = csv. DictWriter(file, fieldnames = new_product.keys()) 15 | csv_writer.writerow(new_product) -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/new_data_json.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | file_path = 'products.json' 4 | 5 | new_product = { 6 | "name": "Wireless Charger", 7 | "price": 75, 8 | "quantity": 100, 9 | "brand": "ChargeMaster", 10 | "category": "Accessories", 11 | "entry_date": "2024-07-01" 12 | } 13 | 14 | with open(file_path, mode='r') as file: 15 | products = json.load(file) 16 | 17 | products.append(new_product) 18 | 19 | with open(file_path, mode='w') as file: 20 | json.dump(products, file, indent=4) 21 | -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/products.csv: -------------------------------------------------------------------------------- 1 | name,price,quantity,brand,category,entry_date 2 | Laptop,1200,4,BrandName,Electronics,2024-01-05 3 | Mouse,45,120,TechGear,Accessories,2024-02-10 4 | Keyboard,70,60,KeyMasters,Accessories,2024-02-12 5 | Monitor,320,15,ViewSharp,Electronics,2024-03-01 6 | Headphones,150,25,SoundMax,Audio,2024-03-15 7 | Webcam,85,40,ClearView,Electronics,2024-03-20 8 | Printer,200,10,PrintWell,Office,2024-04-01 9 | Tablet,400,30,TabZone,Electronics,2024-04-05 10 | Smartphone,800,20,PhonePro,Electronics,2024-04-10 11 | External Hard Drive,100,50,StoreMore,Storage,2024-05-01 12 | Speaker,90,35,SoundMax,Audio,2024-05-05 13 | Microphone,110,18,VoiceClear,Audio,2024-05-10 14 | Charger,25,150,PowerPlus,Accessories,2024-05-15 15 | USB Cable,10,200,CableWorld,Accessories,2024-05-20 16 | Power Bank,60,80,ChargeIt,Accessories,2024-05-25 17 | Router,150,25,NetSpeed,Networking,2024-06-01 18 | Mouse Pad,20,100,ComfortZone,Accessories,2024-06-05 19 | Laptop Stand,55,45,ErgoLift,Accessories,2024-06-10 20 | Projector,550,8,ProView,Electronics,2024-06-15 21 | Graphics Tablet,250,12,ArtMaster,Electronics,2024-06-20 22 | Wireless Charger,75,100,ChargerMaster,Accessories,2024-07-01 -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/products.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Laptop", 4 | "price": 1200, 5 | "quantity": 4, 6 | "brand": "BrandName", 7 | "category": "Electronics", 8 | "entry_date": "2024-01-05" 9 | }, 10 | { 11 | "name": "Mouse", 12 | "price": 45, 13 | "quantity": 120, 14 | "brand": "TechGear", 15 | "category": "Accessories", 16 | "entry_date": "2024-02-10" 17 | }, 18 | { 19 | "name": "Headphones", 20 | "price": 150, 21 | "quantity": 25, 22 | "brand": "SoundMax", 23 | "category": "Audio", 24 | "entry_date": "2024-03-15" 25 | }, 26 | { 27 | "name": "Wireless Charger", 28 | "price": 75, 29 | "quantity": 100, 30 | "brand": "ChargeMaster", 31 | "category": "Accessories", 32 | "entry_date": "2024-07-01" 33 | }, 34 | { 35 | "name": "Wireless Charger", 36 | "price": 75, 37 | "quantity": 100, 38 | "brand": "ChargeMaster", 39 | "category": "Accessories", 40 | "entry_date": "2024-07-01" 41 | }, 42 | { 43 | "name": "Wireless Charger", 44 | "price": 75, 45 | "quantity": 100, 46 | "brand": "ChargeMaster", 47 | "category": "Accessories", 48 | "entry_date": "2024-07-01" 49 | }, 50 | { 51 | "name": "Wireless Charger", 52 | "price": 75, 53 | "quantity": 100, 54 | "brand": "ChargeMaster", 55 | "category": "Accessories", 56 | "entry_date": "2024-07-01" 57 | } 58 | ] -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/products_updated.csv: -------------------------------------------------------------------------------- 1 | name,price,quantity,brand,category,entry_date,total_value 2 | Laptop,1200,4,BrandName,Electronics,2024-01-05,4800.0 3 | Mouse,45,120,TechGear,Accessories,2024-02-10,5400.0 4 | Keyboard,70,60,KeyMasters,Accessories,2024-02-12,4200.0 5 | Monitor,320,15,ViewSharp,Electronics,2024-03-01,4800.0 6 | Headphones,150,25,SoundMax,Audio,2024-03-15,3750.0 7 | Webcam,85,40,ClearView,Electronics,2024-03-20,3400.0 8 | Printer,200,10,PrintWell,Office,2024-04-01,2000.0 9 | Tablet,400,30,TabZone,Electronics,2024-04-05,12000.0 10 | Smartphone,800,20,PhonePro,Electronics,2024-04-10,16000.0 11 | External Hard Drive,100,50,StoreMore,Storage,2024-05-01,5000.0 12 | Speaker,90,35,SoundMax,Audio,2024-05-05,3150.0 13 | Microphone,110,18,VoiceClear,Audio,2024-05-10,1980.0 14 | Charger,25,150,PowerPlus,Accessories,2024-05-15,3750.0 15 | USB Cable,10,200,CableWorld,Accessories,2024-05-20,2000.0 16 | Power Bank,60,80,ChargeIt,Accessories,2024-05-25,4800.0 17 | Router,150,25,NetSpeed,Networking,2024-06-01,3750.0 18 | Mouse Pad,20,100,ComfortZone,Accessories,2024-06-05,2000.0 19 | Laptop Stand,55,45,ErgoLift,Accessories,2024-06-10,2475.0 20 | Projector,550,8,ProView,Electronics,2024-06-15,4400.0 21 | Graphics Tablet,250,12,ArtMaster,Electronics,2024-06-20,3000.0 22 | Wireless Charger,75,100,ChargerMaster,Accessories,2024-07-01,7500.0 23 | -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/read_csv.py: -------------------------------------------------------------------------------- 1 | import csv 2 | 3 | #Leer un archivo 4 | """with open('products.csv', mode='r') as file: 5 | csv_reader = csv.DictReader(file) 6 | for row in csv_reader: 7 | print(row)""" 8 | 9 | #Mostrar la información por columnas 10 | with open('products.csv', mode='r') as file: 11 | csv_reader = csv.DictReader(file) 12 | for row in csv_reader: 13 | print(f"Producto: {row['name']}, Precio: {row['price']}") -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/read_file.py: -------------------------------------------------------------------------------- 1 | #Leer un archivo línea por línea 2 | """with open('caperucita.txt', 'r') as file: 3 | for lineas in file: 4 | print(lineas.strip())""" 5 | 6 | #Leer todas las líneas en una lista 7 | """with open('caperucita.txt', 'r') as file: 8 | lines = file.readlines() 9 | print(lines)""" 10 | 11 | #Añadir texto 12 | """with open('caperucita.txt', 'a') as file: 13 | file.write("\n\nBy:ChatGPT")""" 14 | 15 | #Sobreescribir el texto 16 | with open('caperucita.txt', 'w') as file: 17 | file.write("\n\nBy:ChatGPT") -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/read_json.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | #Lectura del archivo 4 | with open('products.json', mode='r') as file: 5 | products = json.load(file) 6 | 7 | #Mostrar el contenido 8 | for product in products: 9 | #print(product) 10 | print(f"Product: {product['name']}, Price: {product['price']}") -------------------------------------------------------------------------------- /6.Lectura y escritura de archivos/sales_csv.py: -------------------------------------------------------------------------------- 1 | import csv 2 | 3 | monthly_sales = {} 4 | 5 | with open('monthly_sales.csv', mode='r') as file: 6 | reader = csv.DictReader(file) 7 | for row in reader: 8 | month = row['Month'] 9 | sales = int(row['Sales']) 10 | monthly_sales[month] = sales 11 | 12 | print(monthly_sales) 13 | -------------------------------------------------------------------------------- /7.Biblioteca estándar de Python/math_example.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | #Hallar el area y perimetro de un circulo 4 | radius = 5 5 | area = math.pi * radius**2 6 | perimeter = 2 * math.pi * radius 7 | print(area) 8 | print(perimeter) -------------------------------------------------------------------------------- /7.Biblioteca estándar de Python/monthly_sales.numbers: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/platzi/python/03fb26a09202bb0d36662c863e804ed2cecdb33c/7.Biblioteca estándar de Python/monthly_sales.numbers -------------------------------------------------------------------------------- /7.Biblioteca estándar de Python/os_example.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | #Obtener el directorio actual 4 | """cwd = os.getcwd() 5 | print("Directorio de trabajo actual", cwd)""" 6 | 7 | #Listar los archivos .txt 8 | txt_files = [f for f in os.listdir('.') if f.endswith('.txt')] 9 | print("Archivos txt: ", txt_files) 10 | 11 | #Renombrar archivo 12 | os.rename('caperucita.txt', 'cuento.txt') 13 | print('Archivo renombrado') 14 | 15 | #Listar los archivos .txt 16 | txt_files = [f for f in os.listdir('.') if f.endswith('.txt')] 17 | print("Archivos txt: ", txt_files) -------------------------------------------------------------------------------- /7.Biblioteca estándar de Python/randoms.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | #Generar un numero entero aleatorio 4 | random_number = random.randint(1,10) 5 | print(random_number) 6 | 7 | #Elegir colores aleatorios 8 | colors = ['Rojo', 'Azul', 'Verde'] 9 | random_color = random.choice(colors) 10 | print(random_color) 11 | 12 | #Barajar una lista de cartas 13 | cards = ['As', 'Rey', 'Reina', 'Jota', '10'] 14 | random.shuffle(cards) 15 | print(cards) -------------------------------------------------------------------------------- /7.Biblioteca estándar de Python/statistics_example.py: -------------------------------------------------------------------------------- 1 | import statistics 2 | import csv 3 | 4 | # Leer los datos de ventas mensuales desde un archivo CSV 5 | monthly_sales = {} 6 | with open('monthly_sales.csv', mode='r') as file: 7 | reader = csv.DictReader(file) 8 | for row in reader: 9 | month = row['month'] 10 | sales = int(row['sales']) 11 | monthly_sales[month] = sales 12 | 13 | sales = list(monthly_sales.values()) 14 | #print(sales) 15 | 16 | #Hallar la media 17 | mean_sales = statistics.mean(sales) 18 | print(f"La media es: {mean_sales}") 19 | 20 | #Hallar la mediana 21 | median_sales = statistics.median(sales) 22 | print(f"La mediana es: {median_sales}") 23 | 24 | #Hallar la moda 25 | mode_sales = statistics.mode(sales) 26 | print(f"La moda es: {mode_sales}") 27 | 28 | #Desviación Estándar 29 | stdev_sales = statistics.stdev(sales) 30 | print(f"La desviación estándar es: {stdev_sales}") 31 | 32 | #Hallar la varianza 33 | variance_sales = statistics.variance(sales) 34 | print(f"La moda es: {variance_sales}") 35 | 36 | max_sales = max(sales) 37 | min_sales = min(sales) 38 | 39 | range_sales = max_sales - min_sales 40 | print(f'Rango de ventas: {range_sales}') -------------------------------------------------------------------------------- /Batalla_naval.py: -------------------------------------------------------------------------------- 1 | class Ship: 2 | def __init__(self, name, size): 3 | self.name = name 4 | self.size = size 5 | self.positions = [] 6 | self.hits = 0 7 | 8 | def place_ship(self, start_row, start_col, direction, board): 9 | positions = [] 10 | if direction == 'H': 11 | if start_col + self.size > len(board[0]): 12 | return False 13 | for i in range(self.size): 14 | if board[start_row][start_col + i] != ' ': 15 | return False 16 | positions.append((start_row, start_col + i)) 17 | elif direction == 'V': 18 | if start_row + self.size > len(board): 19 | return False 20 | for i in range(self.size): 21 | if board[start_row + i][start_col] != ' ': 22 | return False 23 | positions.append((start_row + i, start_col)) 24 | else: 25 | return False 26 | 27 | for pos in positions: 28 | board[pos[0]][pos[1]] = self.name[0] 29 | self.positions = positions 30 | return True 31 | 32 | def hit(self): 33 | self.hits += 1 34 | return self.hits == self.size 35 | 36 | class Destroyer(Ship): 37 | def __init__(self): 38 | super().__init__('Destructor', 2) 39 | 40 | class Submarine(Ship): 41 | def __init__(self): 42 | super().__init__('Submarino', 3) 43 | 44 | class Battleship(Ship): 45 | def __init__(self): 46 | super().__init__('Acorazado', 4) 47 | 48 | class Player: 49 | def __init__(self, name): 50 | self.name = name 51 | self.board = [[' ' for _ in range(10)] for _ in range(10)] 52 | self.ships = [] 53 | self.hits = [[' ' for _ in range(10)] for _ in range(10)] 54 | 55 | def place_ships(self): 56 | ships = [Destroyer(), Submarine(), Battleship()] 57 | for ship in ships: 58 | while True: 59 | print(f"{self.name}, coloca tu {ship.name} de tamaño {ship.size}.") 60 | start_row = int(input("Fila inicial: ")) 61 | start_col = int(input("Columna inicial: ")) 62 | direction = input("Dirección (H para horizontal, V para vertical): ").upper() 63 | if ship.place_ship(start_row, start_col, direction, self.board): 64 | self.ships.append(ship) 65 | self.print_board(self.board) 66 | break 67 | else: 68 | print("Posición no válida. Inténtalo de nuevo.") 69 | 70 | def print_board(self, board): 71 | for row in board: 72 | print(" ".join(row)) 73 | print() 74 | 75 | def attack(self, opponent): 76 | while True: 77 | print(f"{self.name}, elige una posición para atacar.") 78 | row = int(input("Fila: ")) 79 | col = int(input("Columna: ")) 80 | if 0 <= row < 10 and 0 <= col < 10: 81 | if opponent.board[row][col] == ' ': 82 | print("Agua!") 83 | self.hits[row][col] = 'A' 84 | opponent.board[row][col] = 'A' 85 | break 86 | elif opponent.board[row][col] != 'A': 87 | print("Impacto!") 88 | self.hits[row][col] = 'T' 89 | for ship in opponent.ships: 90 | if (row, col) in ship.positions: 91 | if ship.hit(): 92 | print(f"¡Hundido! Has hundido el {ship.name}.") 93 | break 94 | opponent.board[row][col] = 'T' 95 | break 96 | else: 97 | print("Ya has atacado esta posición. Intenta de nuevo.") 98 | else: 99 | print("Posición no válida. Intenta de nuevo.") 100 | 101 | def all_ships_sunk(self): 102 | return all(ship.hits == ship.size for ship in self.ships) 103 | 104 | class BattleshipGame: 105 | def __init__(self): 106 | self.player1 = Player("Jugador 1") 107 | self.player2 = Player("Jugador 2") 108 | 109 | def play(self): 110 | print("Bienvenido al juego de Batalla Naval!") 111 | print("Jugador 1 coloca sus barcos.") 112 | self.player1.place_ships() 113 | print("Jugador 2 coloca sus barcos.") 114 | self.player2.place_ships() 115 | 116 | current_player = self.player1 117 | opponent = self.player2 118 | 119 | while True: 120 | current_player.attack(opponent) 121 | if opponent.all_ships_sunk(): 122 | print(f"¡{current_player.name} ha ganado el juego!") 123 | break 124 | current_player, opponent = opponent, current_player 125 | 126 | # Crear una instancia del juego y jugar 127 | game = BattleshipGame() 128 | game.play() 129 | -------------------------------------------------------------------------------- /Ejercicios/1_scientific_calculator.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | class Calculator: 4 | def __init__(self): 5 | pass 6 | 7 | def add(self, num1, num2): 8 | return num1 + num2 9 | 10 | def subtract(self, num1, num2): 11 | return num1 - num2 12 | 13 | def multiply(self, num1, num2): 14 | return num1 * num2 15 | 16 | def divide(self, num1, num2): 17 | try: 18 | return num1 / num2 19 | except ZeroDivisionError: 20 | return "Error: División por cero no permitida." 21 | 22 | def power(self, base, exponent): 23 | return math.pow(base, exponent) 24 | 25 | def square_root(self, num): 26 | if num < 0: 27 | return "Error: No se puede calcular la raíz cuadrada de un número negativo." 28 | return math.sqrt(num) 29 | 30 | def logarithm(self, num): 31 | if num <= 0: 32 | return "Error: El logaritmo de un número menor o igual a cero no está definido." 33 | return math.log(num) 34 | 35 | def sine(self, angle): 36 | return math.sin(math.radians(angle)) 37 | 38 | def cosine(self, angle): 39 | return math.cos(math.radians(angle)) 40 | 41 | def menu(self): 42 | while True: 43 | print("\n--- Calculadora Científica ---") 44 | print("1. Suma") 45 | print("2. Resta") 46 | print("3. Multiplicación") 47 | print("4. División") 48 | print("5. Potencia") 49 | print("6. Raíz Cuadrada") 50 | print("7. Logaritmo") 51 | print("8. Seno") 52 | print("9. Coseno") 53 | print("10. Salir") 54 | 55 | option = input("Selecciona una operación (1-10): ") 56 | 57 | if option == '10': 58 | print("Saliendo de la calculadora...") 59 | break 60 | 61 | if option in ['1', '2', '3', '4', '5']: 62 | num1 = float(input("Ingresa el primer número: ")) 63 | num2 = float(input("Ingresa el segundo número: ")) 64 | if option == '1': 65 | print(f"Resultado: {self.add(num1, num2)}") 66 | elif option == '2': 67 | print(f"Resultado: {self.subtract(num1, num2)}") 68 | elif option == '3': 69 | print(f"Resultado: {self.multiply(num1, num2)}") 70 | elif option == '4': 71 | print(f"Resultado: {self.divide(num1, num2)}") 72 | elif option == '5': 73 | print(f"Resultado: {self.power(num1, num2)}") 74 | elif option in ['6', '7', '8', '9']: 75 | num = float(input("Ingresa el número: ")) 76 | if option == '6': 77 | print(f"Resultado: {self.square_root(num)}") 78 | elif option == '7': 79 | print(f"Resultado: {self.logarithm(num)}") 80 | elif option == '8': 81 | print(f"Resultado: {self.sine(num)}") 82 | elif option == '9': 83 | print(f"Resultado: {self.cosine(num)}") 84 | else: 85 | print("Opción no válida. Por favor, selecciona una opción del 1 al 10.") 86 | 87 | if __name__ == "__main__": 88 | calc = Calculator() 89 | calc.menu() 90 | -------------------------------------------------------------------------------- /Ejercicios/2_students_system.py: -------------------------------------------------------------------------------- 1 | class Student: 2 | def __init__(self, name, student_id): 3 | self.name = name 4 | self.student_id = student_id 5 | self.subjects = {} # Diccionario para almacenar materias y calificaciones 6 | 7 | def add_subject(self, subject, grade): 8 | self.subjects[subject] = grade 9 | 10 | def calculate_average(self): 11 | if not self.subjects: 12 | return 0 # Si no hay materias, el promedio es 0 13 | total_grades = sum(self.subjects.values()) 14 | return total_grades / len(self.subjects) 15 | 16 | def classify_performance(self): 17 | average = self.calculate_average() 18 | if average >= 90: 19 | return "Excelente" 20 | elif average >= 75: 21 | return "Bueno" 22 | elif average >= 60: 23 | return "Regular" 24 | else: 25 | return "Insuficiente" 26 | 27 | def __str__(self): 28 | return f"Estudiante: {self.name}, ID: {self.student_id}, Promedio: {self.calculate_average():.2f}, Rendimiento: {self.classify_performance()}" 29 | 30 | class ManagementSystem: 31 | def __init__(self): 32 | self.students = [] # Lista para almacenar objetos Student 33 | 34 | def register_student(self, student): 35 | self.students.append(student) 36 | 37 | def show_students(self): 38 | for student in self.students: 39 | print(student) 40 | 41 | def find_student(self, student_id): 42 | for student in self.students: 43 | if student.student_id == student_id: 44 | return student 45 | return None 46 | 47 | def delete_student(self, student_id): 48 | student = self.find_student(student_id) 49 | if student: 50 | self.students.remove(student) 51 | print(f"Estudiante {student_id} eliminado con éxito.") 52 | else: 53 | print(f"Estudiante con ID {student_id} no encontrado.") 54 | 55 | if __name__ == "__main__": 56 | system = ManagementSystem() 57 | 58 | while True: 59 | print("\n--- Sistema de Gestión de Estudiantes ---") 60 | print("1. Registrar nuevo estudiante") 61 | print("2. Agregar materia y calificación") 62 | print("3. Mostrar todos los estudiantes") 63 | print("4. Buscar estudiante por ID") 64 | print("5. Eliminar estudiante por ID") 65 | print("6. Salir") 66 | 67 | option = input("Selecciona una opción (1-6): ") 68 | 69 | if option == '1': 70 | name = input("Nombre del estudiante: ") 71 | student_id = input("ID del estudiante: ") 72 | student = Student(name, student_id) 73 | system.register_student(student) 74 | print(f"Estudiante {name} registrado con éxito.") 75 | 76 | elif option == '2': 77 | student_id = input("ID del estudiante: ") 78 | student = system.find_student(student_id) 79 | if student: 80 | subject = input("Nombre de la materia: ") 81 | grade = float(input("Calificación: ")) 82 | student.add_subject(subject, grade) 83 | print(f"Materia {subject} con calificación {grade} agregada a {student.name}.") 84 | else: 85 | print(f"Estudiante con ID {student_id} no encontrado.") 86 | 87 | elif option == '3': 88 | system.show_students() 89 | 90 | elif option == '4': 91 | student_id = input("ID del estudiante: ") 92 | student = system.find_student(student_id) 93 | if student: 94 | print(student) 95 | else: 96 | print(f"Estudiante con ID {student_id} no encontrado.") 97 | 98 | elif option == '5': 99 | student_id = input("ID del estudiante: ") 100 | system.delete_student(student_id) 101 | 102 | elif option == '6': 103 | print("Saliendo del sistema...") 104 | break 105 | 106 | else: 107 | print("Opción no válida. Por favor, selecciona una opción del 1 al 6.") 108 | -------------------------------------------------------------------------------- /Ejercicios/3_dice_simulator.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | class Die: 4 | def __init__(self, sides=6): 5 | self.sides = sides 6 | 7 | def roll(self): 8 | return random.randint(1, self.sides) 9 | 10 | class DiceSimulator: 11 | def __init__(self, die): 12 | self.die = die 13 | self.results = [] 14 | 15 | def simulate_rolls(self, num_rolls): 16 | self.results = [self.die.roll() for _ in range(num_rolls)] 17 | 18 | def calculate_average(self): 19 | if not self.results: 20 | return 0 21 | return sum(self.results) / len(self.results) 22 | 23 | def calculate_frequencies(self): 24 | frequencies = {} 25 | for result in self.results: 26 | if result in frequencies: 27 | frequencies[result] += 1 28 | else: 29 | frequencies[result] = 1 30 | return frequencies 31 | 32 | def show_statistics(self): 33 | if not self.results: 34 | print("No se han realizado lanzamientos.") 35 | return 36 | 37 | average = self.calculate_average() 38 | frequencies = self.calculate_frequencies() 39 | 40 | print(f"\nEstadísticas después de {len(self.results)} lanzamientos:") 41 | print(f"Promedio de los resultados: {average:.2f}") 42 | print("Frecuencia de cada cara:") 43 | for side, frequency in frequencies.items(): 44 | print(f"Cara {side}: {frequency} veces") 45 | 46 | if __name__ == "__main__": 47 | # Crear un dado de 6 caras 48 | die = Die() 49 | 50 | # Crear un simulador de dados 51 | simulator = DiceSimulator(die) 52 | 53 | while True: 54 | print("\n--- Simulación de Lanzamiento de Dados ---") 55 | num_rolls = int(input("¿Cuántos lanzamientos quieres simular? (0 para salir): ")) 56 | 57 | if num_rolls == 0: 58 | print("Saliendo de la simulación...") 59 | break 60 | 61 | simulator.simulate_rolls(num_rolls) 62 | simulator.show_statistics() -------------------------------------------------------------------------------- /Ejercicios/README.md: -------------------------------------------------------------------------------- 1 | # Ejercicios de Python 2 | 3 | Bienvenido a la carpeta de **Ejercicios** del curso de Python. Aquí encontrarás una serie de ejercicios diseñados para ayudarte a practicar y consolidar los conceptos que has aprendido a lo largo del curso. Estos ejercicios abarcan desde los fundamentos básicos del lenguaje hasta la aplicación de Programación Orientada a Objetos (POO) y el uso de librerías estándar como `math` y `random`. 4 | 5 | ## Ejercicio 1: Calculadora Científica Mejorada 6 | 7 | **Descripción:** 8 | En este ejercicio, crearás una calculadora científica utilizando POO y la librería `math`. La calculadora permitirá realizar operaciones básicas (suma, resta, multiplicación, división) y funciones matemáticas avanzadas como potencia, raíz cuadrada, logaritmos, y seno/coseno. 9 | 10 | **Instrucciones:** 11 | - Crea la clase `Calculadora` con métodos para cada operación. 12 | - Utiliza la librería `math` para las funciones avanzadas. 13 | - Implementa un menú interactivo para que el usuario seleccione la operación que desea realizar. 14 | - Maneja posibles excepciones para evitar errores durante las operaciones. 15 | 16 | **Objetivos de Aprendizaje:** 17 | - Aplicar POO en la construcción de una herramienta útil. 18 | - Utilizar la librería `math` para resolver problemas matemáticos. 19 | - Mejorar la interacción con el usuario a través de la consola. 20 | 21 | ## Ejercicio 2: Sistema de Gestión de Estudiantes 22 | 23 | **Descripción:** 24 | Desarrolla un sistema de gestión de estudiantes que permita registrar estudiantes, asignarles calificaciones en diferentes materias, y calcular su promedio general. El sistema también debe categorizar a los estudiantes según su rendimiento. 25 | 26 | **Instrucciones:** 27 | - Crea la clase `Estudiante` con métodos para gestionar materias y calificaciones. 28 | - Implementa una clase `SistemaGestion` para administrar la lista de estudiantes y sus registros. 29 | - Calcula promedios y clasifica a los estudiantes según su rendimiento. 30 | 31 | **Objetivos de Aprendizaje:** 32 | - Desarrollar habilidades en POO, especialmente en la creación de sistemas de gestión. 33 | - Practicar la manipulación de datos utilizando listas y diccionarios. 34 | - Aplicar lógica para calcular estadísticas y clasificar información. 35 | 36 | ## Ejercicio 3: Simulación de Lanzamiento de Dados 37 | 38 | **Descripción:** 39 | Crea un programa que simule el lanzamiento de dados utilizando POO y la librería `random`. El programa debe permitir realizar múltiples lanzamientos y calcular estadísticas como el promedio de los resultados y la distribución de frecuencias. 40 | 41 | **Instrucciones:** 42 | - Crea la clase `Dado` para representar un dado con un número configurable de caras. 43 | - Implementa la clase `SimuladorDados` para manejar los lanzamientos y calcular las estadísticas. 44 | - Usa la librería `random` para generar los resultados de los lanzamientos. 45 | 46 | **Objetivos de Aprendizaje:** 47 | - Aplicar conceptos de POO en simulaciones de eventos aleatorios. 48 | - Utilizar la librería `random` para generar valores aleatorios. 49 | - Analizar y calcular estadísticas básicas a partir de datos generados. 50 | 51 | --- 52 | 53 | ¡Diviértete programando y aprendiendo Python con Platzi y con estos ejercicios! 54 | -------------------------------------------------------------------------------- /Proyecto Final/Batalla_naval.py: -------------------------------------------------------------------------------- 1 | class Ship: 2 | def __init__(self, name, size): 3 | self.name = name 4 | self.size = size 5 | self.positions = [] 6 | self.hits = 0 7 | 8 | def place_ship(self, start_row, start_col, direction, board): 9 | positions = [] 10 | if direction == 'H': 11 | if start_col + self.size > len(board[0]): 12 | return False 13 | for i in range(self.size): 14 | if board[start_row][start_col + i] != ' ': 15 | return False 16 | positions.append((start_row, start_col + i)) 17 | elif direction == 'V': 18 | if start_row + self.size > len(board): 19 | return False 20 | for i in range(self.size): 21 | if board[start_row + i][start_col] != ' ': 22 | return False 23 | positions.append((start_row + i, start_col)) 24 | else: 25 | return False 26 | 27 | for pos in positions: 28 | board[pos[0]][pos[1]] = self.name[0] 29 | self.positions = positions 30 | return True 31 | 32 | def hit(self): 33 | self.hits += 1 34 | return self.hits == self.size 35 | 36 | class Destroyer(Ship): 37 | def __init__(self): 38 | super().__init__('Destructor', 2) 39 | 40 | class Submarine(Ship): 41 | def __init__(self): 42 | super().__init__('Submarino', 3) 43 | 44 | class Battleship(Ship): 45 | def __init__(self): 46 | super().__init__('Acorazado', 4) 47 | 48 | class Player: 49 | def __init__(self, name): 50 | self.name = name 51 | self.board = [[' ' for _ in range(10)] for _ in range(10)] 52 | self.ships = [] 53 | self.hits = [[' ' for _ in range(10)] for _ in range(10)] 54 | 55 | def place_ships(self): 56 | ships = [Destroyer(), Submarine(), Battleship()] 57 | for ship in ships: 58 | while True: 59 | print(f"{self.name}, coloca tu {ship.name} de tamaño {ship.size}.") 60 | start_row = int(input("Fila inicial: ")) 61 | start_col = int(input("Columna inicial: ")) 62 | direction = input("Dirección (H para horizontal, V para vertical): ").upper() 63 | if ship.place_ship(start_row, start_col, direction, self.board): 64 | self.ships.append(ship) 65 | self.print_board(self.board) 66 | break 67 | else: 68 | print("Posición no válida. Inténtalo de nuevo.") 69 | 70 | def print_board(self, board): 71 | for row in board: 72 | print(" ".join(row)) 73 | print() 74 | 75 | def attack(self, opponent): 76 | while True: 77 | print(f"{self.name}, elige una posición para atacar.") 78 | row = int(input("Fila: ")) 79 | col = int(input("Columna: ")) 80 | if 0 <= row < 10 and 0 <= col < 10: 81 | if opponent.board[row][col] == ' ': 82 | print("Agua!") 83 | self.hits[row][col] = 'A' 84 | opponent.board[row][col] = 'A' 85 | break 86 | elif opponent.board[row][col] != 'A': 87 | print("Impacto!") 88 | self.hits[row][col] = 'T' 89 | for ship in opponent.ships: 90 | if (row, col) in ship.positions: 91 | if ship.hit(): 92 | print(f"¡Hundido! Has hundido el {ship.name}.") 93 | break 94 | opponent.board[row][col] = 'T' 95 | break 96 | else: 97 | print("Ya has atacado esta posición. Intenta de nuevo.") 98 | else: 99 | print("Posición no válida. Intenta de nuevo.") 100 | 101 | def all_ships_sunk(self): 102 | return all(ship.hits == ship.size for ship in self.ships) 103 | 104 | class BattleshipGame: 105 | def __init__(self): 106 | self.player1 = Player("Jugador 1") 107 | self.player2 = Player("Jugador 2") 108 | 109 | def play(self): 110 | print("Bienvenido al juego de Batalla Naval!") 111 | print("Jugador 1 coloca sus barcos.") 112 | self.player1.place_ships() 113 | print("Jugador 2 coloca sus barcos.") 114 | self.player2.place_ships() 115 | 116 | current_player = self.player1 117 | opponent = self.player2 118 | 119 | while True: 120 | current_player.attack(opponent) 121 | if opponent.all_ships_sunk(): 122 | print(f"¡{current_player.name} ha ganado el juego!") 123 | break 124 | current_player, opponent = opponent, current_player 125 | 126 | # Crear una instancia del juego y jugar 127 | game = BattleshipGame() 128 | game.play() 129 | -------------------------------------------------------------------------------- /Proyecto Final/README.md: -------------------------------------------------------------------------------- 1 | # Juego de Batalla Naval en Python 2 | 3 | En este proyecto, crearás un juego de Batalla Naval (Battleship) en Python, donde dos jugadores colocan sus barcos en un tablero y se turnan para atacar las posiciones del oponente hasta que uno de los jugadores hunda todos los barcos del otro. Sigue estos pasos detallados para construir el juego. 4 | 5 | ## Paso 1: Define la Clase `Ship` 6 | 7 | 1. **Crea la clase `Ship`**: 8 | - Define el constructor `__init__` que reciba `name` y `size` como parámetros. 9 | - Agrega atributos: `self.name`, `self.size`, `self.positions` (una lista vacía para las posiciones del barco) y `self.hits` (inicializado en 0). 10 | 11 | 2. **Método `place_ship`**: 12 | - Este método coloca el barco en el tablero (`board`) según la posición inicial (`start_row`, `start_col`) y la dirección (`direction`). 13 | - Verifica si el barco cabe en el tablero. Si no cabe, devuelve `False`. 14 | - Si la posición está libre (`' '`), almacena las posiciones en la lista `positions`. Si no, devuelve `False`. 15 | - Actualiza el tablero con el símbolo del barco (`self.name[0]`), almacena las posiciones en `self.positions`, y devuelve `True`. 16 | 17 | 3. **Método `hit`**: 18 | - Incrementa el contador `self.hits`. 19 | - Devuelve `True` si el número de impactos (`self.hits`) es igual al tamaño del barco (`self.size`), indicando que el barco ha sido hundido. 20 | 21 | ## Paso 2: Define Clases Específicas de Barcos 22 | 23 | 1. **Crea las subclases**: 24 | - Crea una clase `Destroyer` que herede de `Ship` y tenga un tamaño de 2. 25 | - Crea una clase `Submarine` que herede de `Ship` y tenga un tamaño de 3. 26 | - Crea una clase `Battleship` que herede de `Ship` y tenga un tamaño de 4. 27 | 28 | ```python 29 | class Destroyer(Ship): 30 | def __init__(self): 31 | super().__init__('Destructor', 2) 32 | 33 | class Submarine(Ship): 34 | def __init__(self): 35 | super().__init__('Submarino', 3) 36 | 37 | class Battleship(Ship): 38 | def __init__(self): 39 | super().__init__('Acorazado', 4) 40 | ``` 41 | 42 | ## Paso 3: Define la Clase `Player` 43 | 44 | 1. **Crea la clase `Player`**: 45 | - Define el constructor `__init__` que reciba `name` como parámetro. 46 | - Crea un tablero `self.board` de 10x10, representado por una lista de listas, inicializado con espacios en blanco `' '`. 47 | - Crea una lista `self.ships` para almacenar los barcos del jugador. 48 | - Crea un segundo tablero `self.hits` para registrar los ataques. 49 | 50 | 2. **Método `place_ships`**: 51 | - Crea instancias de `Destroyer`, `Submarine` y `Battleship`. 52 | - Para cada barco, pide al jugador que ingrese la fila, columna y dirección (H para horizontal, V para vertical) donde desea colocar el barco. 53 | - Llama a `place_ship` para intentar colocar el barco. Si no es posible, solicita nuevamente la entrada del usuario. 54 | 55 | 3. **Método `print_board`**: 56 | - Imprime el tablero de juego para mostrar la posición actual de los barcos o los impactos. 57 | 58 | 4. **Método `attack`**: 59 | - Solicita al jugador la fila y columna para atacar. 60 | - Verifica si la posición es válida y si el ataque es un impacto o agua. 61 | - Actualiza el tablero del oponente y el tablero de impactos del jugador en consecuencia. 62 | - Si se impacta un barco, verifica si ha sido hundido. 63 | 64 | 5. **Método `all_ships_sunk`**: 65 | - Devuelve `True` si todos los barcos del jugador han sido hundidos. 66 | 67 | ## Paso 4: Define la Clase `BattleshipGame` 68 | 69 | 1. **Crea la clase `BattleshipGame`**: 70 | - Define el constructor `__init__` que inicialice dos jugadores (`player1` y `player2`). 71 | 72 | 2. **Método `play`**: 73 | - Pide a cada jugador que coloque sus barcos en el tablero. 74 | - Alterna turnos entre los jugadores para atacar el tablero del oponente. 75 | - Finaliza el juego cuando todos los barcos de un jugador han sido hundidos, declarando al otro jugador como ganador. 76 | 77 | ## Paso 5: Ejecuta el Juego 78 | 79 | 1. **Crea una instancia de `BattleshipGame`** y llama al método `play()` para iniciar el juego. 80 | 81 | ```python 82 | game = BattleshipGame() 83 | game.play() 84 | ``` 85 | 86 | ## Ejecución 87 | 88 | Al ejecutar el programa, los jugadores colocarán sus barcos en el tablero y se turnarán para atacar hasta que uno de los jugadores hunda todos los barcos del oponente, ganando así el juego. 89 | 90 | Este proyecto te permitirá practicar la manipulación de listas, clases, métodos, y cómo gestionar la interacción entre varias clases en Python. ¡Diviértete creando tu propio juego de Batalla Naval! 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # python 2 | 3 | 4 | Hola, Soy tu profesora Carli Code. Bienvenido al **Curso de Python**. Este curso está diseñado para llevarte desde los fundamentos del lenguaje hasta conceptos avanzados, utilizando tanto la Biblioteca Estándar de Python como librerías externas esenciales. A lo largo del curso, aprenderás a construir aplicaciones robustas y eficaces, y desarrollarás una comprensión profunda de cómo utilizar Python para resolver problemas de programación. Puedes acceder al curso completo en [Curso de Python de Platzi](https://platzi.com/cursos/python/). 5 | 6 | 7 | --- 8 | 9 | ### Módulo 1: Fundamentos Básicos de Python 10 | En este módulo, aprenderás los conceptos básicos del lenguaje Python, incluyendo su sintaxis, manejo de variables, tipos de datos y estructuras de control. Este es el punto de partida para cualquier programador que quiera dominar Python. 11 | 12 | ### Módulo 2: Colección y Procesamiento de Datos en Python 13 | Este módulo te introduce a las estructuras de datos fundamentales en Python, como listas, tuplas, diccionarios, y matrices. Aprenderás a manipular y procesar datos de manera eficiente, utilizando estas estructuras para resolver problemas comunes en la programación. 14 | 15 | ### Módulo 3: Control de Flujo en Python 16 | Aquí explorarás cómo controlar el flujo de ejecución de tu programa usando estructuras condicionales, bucles, y técnicas avanzadas como iteradores y generadores. Este conocimiento es esencial para escribir código flexible y dinámico. 17 | 18 | ### Módulo 4: Funciones y Manejo de Excepciones en Python 19 | En este módulo, te sumergirás en la creación y uso de funciones, incluidas las funciones lambda, y aprenderás cómo manejar excepciones para crear programas robustos que puedan gestionar errores de manera efectiva. 20 | 21 | ### Módulo 5: Programación Orientada a Objetos en Python 22 | Este módulo se centra en la Programación Orientada a Objetos (POO), un paradigma esencial en Python. Aprenderás a crear y gestionar clases y objetos, y entenderás los pilares de la POO, como la herencia y el polimorfismo, aplicando estos conceptos en proyectos prácticos. 23 | 24 | ### Módulo 6: Lectura y Escritura de Archivos 25 | En este módulo, aprenderás a manejar la entrada y salida de datos a través de archivos, incluyendo archivos de texto, CSV, y JSON. Estas habilidades son cruciales para trabajar con grandes volúmenes de datos y para la persistencia de datos en tus aplicaciones. 26 | 27 | ### Módulo 7: Biblioteca Estándar de Python 28 | Explorarás la Biblioteca Estándar de Python, descubriendo módulos como `os`, `math`, `random`, y `statistics`, que te permitirán realizar operaciones complejas de manera eficiente sin necesidad de librerías externas. Además, aprenderás cómo utilizar `pip` para gestionar paquetes adicionales. 29 | 30 | ### Módulo 8: Programación Asíncrona en Python 31 | Este módulo te introduce al asincronismo en Python, una técnica avanzada para manejar operaciones concurrentes. Aprenderás a usar el módulo `asyncio` y a implementar patrones de programación asíncrona que mejoran la eficiencia y rendimiento de tus aplicaciones. 32 | 33 | ## Proyecto Final: Batalla Naval en Python 34 | 35 | El proyecto final de este curso consiste en crear un juego de **Batalla Naval** en Python. En este juego, dos jugadores colocan estratégicamente sus barcos en un tablero y se turnan para atacar las posiciones del oponente. El objetivo es hundir todos los barcos del adversario antes de que él hunda los tuyos. Este proyecto te permitirá aplicar los conceptos y habilidades adquiridos a lo largo del curso, incluyendo el uso de clases, estructuras de control, y manipulación de datos. ¡Es una excelente oportunidad para poner a prueba tu conocimiento y creatividad en Python! 36 | 37 | --- 38 | 39 | ## Manual de Instalación de Python 40 | 41 | Antes de comenzar con el curso, asegúrate de tener Python instalado en tu sistema. Puedes descargar la última versión de Python desde el sitio oficial: [python.org](https://www.python.org/downloads/). 42 | 43 | 1. **Descarga e Instalación:** 44 | - Dirígete a [python.org](https://www.python.org/downloads/) y descarga la versión más reciente para tu sistema operativo. 45 | - Sigue las instrucciones del instalador. Asegúrate de marcar la opción "Agregar Python al PATH" durante la instalación. 46 | 47 | 2. **Verificación:** 48 | - Abre una terminal (Command Prompt en Windows, Terminal en macOS/Linux) y escribe: 49 | ```bash 50 | python --version 51 | ``` 52 | - Deberías ver la versión de Python instalada. 53 | 54 | 3. **Instalación de `pip`:** 55 | - `pip` viene preinstalado con las versiones recientes de Python. Verifica su instalación con: 56 | ```bash 57 | pip --version 58 | ``` 59 | 60 | --- 61 | 62 | ## Carpeta de Ejercicios 63 | 64 | En la carpeta `Ejercicios`, encontrarás una serie de prácticas diseñadas para ayudarte a reforzar los conocimientos adquiridos en cada módulo. Estos ejercicios te desafiarán a aplicar lo que has aprendido y a pensar críticamente sobre cómo resolver problemas utilizando Python. Te recomendamos completarlos después de cada módulo para consolidar tus habilidades. 65 | 66 | --- 67 | 68 | ## Derechos Reservados 69 | 70 | Este contenido es propiedad de Platzi. Todos los derechos reservados. El uso de este material está sujeto a los términos y condiciones de Platzi. 71 | --------------------------------------------------------------------------------