Desarrollo de programas en Python
Los proyectos descritos requieren Python como lenguaje de programación y un IDE para su ejecución. Aunque utilizaremos Microsoft Visual Studio Code para esta demostración, puedes optar por tu IDE favorito, ya sea Sublime Text, Atom o Pycharm."
Cifrado Cesar
Para este programa explicaremos el codigo del Cifrado César, una herramienta valiosa para encriptar mensajes. A continuación, te presento el código correspondiente.
# Cifrado César.
text = input("Ingresa tu mensaje: ")
cipher = ''
for char in text:
if not char.isalpha():
continue
char = char.upper()
code = ord(char) + 1
if code > ord('Z'):
code = ord('A')
cipher += chr(code)
print(cipher)
#Codigo created by Cristian Felipe Espitia Garcia
El funcionamiento del código es bastante sencillo, funciona de la siguiente manera:
Utilizamos la funcion Input por consola para pedir al usuario que escriba un mensaje.
Declaramos la variable "cifer" para que almacene nuestro cifrado.
Utilizamos la función for que es la función que recorerá toda la cadena de caracteres
La llave para este cifrado es de condición 1, correrá el caracter en el alfabeto 1 posición por eso utilizamos las funciones ord(letra), para que evalue el valor y el if para que evalúe si se sale del rango, en caso de que se salga, dará reinicio a la letra inicial del alfabeto y lo agrega a la variable cifer, en caso de que no lo agregará a la variable cifer directamente, podremos añadir una parte del codigo para que las letras, nos separe pero este es el programa.
La función .upper es para convertir los carácteres en mayúscula
Juego TicTacToc
En esta sección, exploraremos el juego de Tic Tac Toe, que en esta región es conocido como 'Triqui'. Fue diseñado con una inteligencia artificial básica, por lo que muestra un tablero y nos solicita indicar nuestro próximo movimiento. Hemos importado las librerías 'random' y 'randrange' para permitir que la máquina decida de manera aleatoria dónde colocar el valor correspondiente. Este juego se diseño basado en funciones y condicionales para evaluar los valores cuando alguién gana o hay un empate.
from random import randrange
import time
tab = [[1,2,3],[4,5,6],[7,8,9]]
position = {
1:(0,0),
2:(0,1),
3:(0,2),
4:(1,0),
5:(1,1),
6:(1,2),
7:(2,0),
8:(2,1),
9:(2,2),
}
dibujar = {"maquina": "X", "jugador": "O"}
def DisplayBoard(board):
print("---------------------------------------------")
print(" ")
print(f"|{board[0][0]}||{board[0][1]}||{board[0][2]}|")
print(f"|{board[1][0]}||{board[1][1]}||{board[1][2]}|")
print(f"|{board[2][0]}||{board[2][1]}||{board[2][2]}|")
# La función acepta un parámetro el cual contiene el estado actual del tablero
# y lo muestra en la consola.
def EnterMove(board):
empty_cell = MakeListOfFreeFields(board)
if len(empty_cell) > 1:
ingresado = False
movement = 0
while not ingresado:
try:
movement = int (input("ingresa tu movimiento:"))
if movement < 1 or movement > 9:
print("!Advertencia!, INGRESA UNA POSICIÓN VALIDA")
ingresado = False
elif position[movement] not in empty_cell:
print("!Advertencia!, CASILLA OCUPADA INGRESA UNA CASILLA QUE ESTE DESOCUPADA")
ingresado = False
else:
ingresado = True
except ValueError:
print("!Advertencia!, DEBES INGRESAR UN NÚMERO ENTERO")
ingresado = False
focus = position[movement]
board[focus[0]][focus[1]] = "O"
if VictoryFor(board,"O"):
DisplayBoard(board)
print("Ganaste")
time.sleep(30)
return 0
else:
DisplayBoard(board)
DrawMove(board)
# La función acepta el estado actual del tablero y pregunta al usuario acerca de su movimiento,
# verifica la entrada y actualiza el tablero acorde a la decisión del usuario.
def MakeListOfFreeFields(board):
empty_cell = []
for fila in range(len(board)):
for columna in range(len(board[fila])):
if board[fila][columna] == "X" or board[fila][columna] == "O":
continue
empty_cell.append((fila, columna))
return empty_cell
# La función examina el tablero y construye una lista de todos los cuadros vacíos.
# La lista esta compuesta por tuplas, cada tupla es un par de números que indican la fila y columna.
def VictoryFor(board, sign):
empty_cell = MakeListOfFreeFields(board)
if len(empty_cell) >= 1:
# Verificación horizontaL
for fila in board:
if fila == [sign, sign, sign]:
return True
# Verificacion Vertical
vertical_list = []
posRow = 0
posColum = 0
for i in range(3):
vertical_list.append([board[posRow][posColum],board[posRow + 1][posColum],board[posRow + 2][posColum]])
posRow = 0
posColum += 1
for fila in vertical_list:
if fila == [sign, sign, sign]:
return True
# Verificacion Diagonal
diagonal_list = [[board[0][0],board[1][1],board[2][2]],[board[0][2],board[1][1],board[2][0]]]
for fila in diagonal_list:
if fila == [sign, sign, sign]:
return True
else:
print("Es un empate")
time.sleep(30)
return 0
# La función analiza el estatus del tablero para verificar si
# el jugador que utiliza las 'O's o las 'X's ha ganado el juego.
def DrawMove(board):
empty_cell = MakeListOfFreeFields(board)
if len(empty_cell) >= 1:
there = False
number = ()
while not there:
number = (randrange(0,3), randrange(0,3))
there = number in empty_cell
board[number[0]][number[1]] = "X"
if VictoryFor(board, "X"):
DisplayBoard(board)
print("gano la maquina")
time.sleep(30)
return 0
else:
DisplayBoard(board)
EnterMove(board)
# La función dibuja el movimiento de la maquina y actualiza el tablero
DisplayBoard(tab)
DrawMove(tab)
# Code Created By Cristian Espitia
Copia y pega el codigo para que disfrutes de este entretenido juego hecho en Python.
Extrayendo información de Mercado Libre
Para este ejercicio estaremos aplicando las bases Scraping para extraer información de los productos de Mercado Libre. para esto deberemos instalar una libreria que es la que nos ayuda explorar en la web com lo es beautifulsoup4, la librería requests para hacer las solicitudes a la página y pandas para la organización de los datos, una vez instalado desde el pip de python, copia y pega el siguiente script.
import requests
from bs4 import BeautifulSoup
import sys
import os
import pandas as pd
"""
PROGRAM THAT CAN SEARCH THE FIRST PAGE IN THE MARCADOLIBRE WBSIDE WHEN YOU EXECUTE THE PROGRAM
THE PROGRAM WILL GIVE THE PRICES AND PRODUCS IN MERCADOLIBRE.COM
"""
__esp__ = {
"ELEMENT_NAME":0,
"PRICE":1,
"RECOMENDED":2,
}
def modify(param:str, caracter: str) -> str:
param = param.strip()
new_param = param.replace(" ",caracter)
return new_param
data = {}
buscar = input("ecriba aquí lo que desea buscar: ")
modify_1 = modify(buscar,"-")
modify_2 = modify(buscar,"%20")
url = f"https://listado.mercadolibre.com.co/{modify_1}#D[A:{modify_2}]"
r = requests.get(url)
soup = BeautifulSoup(r.text, features= "html.parser")
main_container = soup.find("ol", attrs={"class":"ui-search-layout ui-search-layout--stack shops__layout"})
andres_card = main_container.find_all("div",
attrs= {"class":"andes-card andes-card--flat andes-card--default ui-search-result shops__cardStyles ui-search-result--core andes-card--padding-default"}
)
for section in andres_card:
price = section.find_all("span", attrs= {"class": "price-tag-text-sr-only"})
price = price[0]
temp_ = ""
for letter in price:
for char_ in letter:
try:
if int(char_):
temp_ += char_
if char_ == "0":
temp_ += char_
except:
pass
def search(container:BeautifulSoup, tag: str, attribute : dict, target: int) :
list_element :list = []
if target == 0:
for section in container:
object_ = section.find_all(tag, attrs = attribute)
for letter in object_:
letter = str(letter)
ind_ = letter.find("\">")
ind_2 = letter.find(f"</ {tag} >")
letter = letter[ind_ + 2 : ind_2 - 4]
list_element.append(letter)
elif target == 1:
for section in container:
temp_ = ""
object_ = section. find_all(tag, attrs = attribute)
aim = object_[0]
for letter in aim:
for char_ in letter:
try:
if int(char_):
temp_ += char_
elif char_ == "0":
temp_ += char_
except:
pass
list_element.append(float(temp_))
return list_element
def hash_table(tag:str, args : list):
data [tag] = args
price = search(
andres_card,
"span",
{"class": "price-tag-text-sr-only"},
__esp__["PRICE"]
)
produc_name = search(
andres_card,
"h2",
{"class": "ui-search-item__title shops__item-title"},
__esp__["ELEMENT_NAME"]
)
hash_table("product_name", produc_name)
hash_table("price", price)
table = pd.DataFrame(data)
print(table)
#Codigo created by Cristian Espitia
En tal caso de obtener un error y no obtener los productos o el resultado, deberemos analizar el sitio web para encontrar los tags correspondientes ya que mensualmente las paginas hacen el intercambio de tags, para evitar el Scraping
QNotePad desarrollado en PyQT
Utilizando python y QT, se desarrollo un NotePad con las funcionalidades de un NotePad de Windows 11, este projecto puede ser instalado o probado cualquier información pueden escribir a mi correo cristianfelipeespitiagarcia@gmail.com.
DownTube desarrollado en PyQT
Esta aplicación descarga videos y audios de youtube, fue desarrollado usando netamente Python. Tiene algunas restricciones como
No se pueden descargar videos que no sean aptos para niños ya que se require logueo, proceso en desarrollo.
No descarga videos de carácter privado
Videos que se estén transmitiendo en vivo generará error para descargar.
Los videos los encuentras en al carpeta C\Users\<user>\videos\
DownTube_Downloads