top of page

Programas desarrollados en Python

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:


  1. Utilizamos la funcion Input por consola para pedir al usuario que escriba un mensaje.

  2. Declaramos la variable "cifer" para que almacene nuestro cifrado.

  3. Utilizamos la función for que es la función que recorerá toda la cadena de caracteres

  4. 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.

  5. 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


  1. No se pueden descargar videos que no sean aptos para niños ya que se require logueo, proceso en desarrollo.

  2. No descarga videos de carácter privado

  3. Videos que se estén transmitiendo en vivo generará error para descargar.

  4. Los videos los encuentras en al carpeta C\Users\<user>\videos\

    DownTube_Downloads





bottom of page