Clase Numero 11 – Json y OOP

Recursos

https://blog.nubecolectiva.com/que-es-y-como-configurar-manifest-json-en-una-pagina-web/

http://zetcode.com/python/requests/

https://www.geeksforgeeks.org/get-post-requests-using-python/

https://realpython.com/python-json/

https://dev.to/twilio/working-with-json-in-python-4hd1?utm_source=additional_box&utm_medium=internal&utm_campaign=twilio_boosted&booster_org=twilio

https://programacion.net/articulo/como_trabajar_con_datos_json_utilizando_python_1403

Archivos JSON y Python

https://www.coursera.org/lecture/python-visualization/installing-packages-in-thonny-aX4ea


Ejercicios

"""
Ejemplo creacion archivo JSON
"""

import json

#CONSTANTE DEFINIDA PARA GENERALIZAR EL NOMBRE DEL ARCHIVO
ARCHIVO = "datos.json"

#RECUPERAMOS EL json Y EN UN NUEVO DICCIONARIO
def leer():
    try:#BLOQUE CONTROLADO PARA TOMAR EXCEPCIONES
        with open(ARCHIVO,'r') as archivo:
            return json.loads(archivo.read())
    except IOError:#EN CASO DE ERROR 
        return { }#RETORNAMOS EL DICCIONARIO VACIO



#SOBREESCRIBIMOS LOS VIEJOS DATOS CON LOS NUEVOS DATOS
def escribir(datos):
    try:
        with open(ARCHIVO,'w') as archivo:
            archivo.write(json.dumps(datos,indent=4))
    except IOError:
        pass       
        

Resultado:

Crea un archico JSON de nombre datos.json con el siguiente contenido (resumido)

{
    "Juan": {
        "Historia": [
            2,
            4,
            3,
            5,
            6,
            7,
            8
        ],
        "Geografia": [
            4,
            7,
            8,
            10
        ]
    },
    "Raul": {
        "Geografia": [
            2,
            3,
            4,
            5
        ],
        "Matematica": [
            3,
            4,
            2,
            6
        ],
        "Historia": [
            4,
            5,
            2
        ]
    },
    "Pedro": {
        "Geografia": [
            9,

Ejemplo

import archjson as arch
import teclado as T
def main():
    
    dic={'Juan':{'Historia':[2,4,3,5,6,7,8],'Geografia':[4,7,8,10]},'Raul':{'Geografia':[2,3,4,5],'Matematica':[3,4,2,6],'Historia':[4,5,2]},'Pedro':{'Geografia':[9,9,9,5],'Matematica':[1,2,1],'Historia':[10,10,2]}}
    print(dic)
    
    arch.escribir(dic)

    dic = arch.leer()

    print(dic)

    x = T.leerInt("Ing. un entero: ")
main() 

Resultado:

Notar que muestra DOS veces el dic porque asi lo pedimos, y valida una entrada de valor nuemrico al final.

{'Juan': {'Historia': [2, 4, 3, 5, 6, 7, 8], 'Geografia': [4, 7, 8, 10]}, 'Raul': {'Geografia': [2, 3, 4, 5], 'Matematica': [3, 4, 2, 6], 'Historia': [4, 5, 2]}, 'Pedro': {'Geografia': [9, 9, 9, 5], 'Matematica': [1, 2, 1], 'Historia': [10, 10, 2]}}
{'Juan': {'Historia': [2, 4, 3, 5, 6, 7, 8], 'Geografia': [4, 7, 8, 10]}, 'Raul': {'Geografia': [2, 3, 4, 5], 'Matematica': [3, 4, 2, 6], 'Historia': [4, 5, 2]}, 'Pedro': {'Geografia': [9, 9, 9, 5], 'Matematica': [1, 2, 1], 'Historia': [10, 10, 2]}}
Ing. un entero: 8

Ejercicio Codificar y Decodificar JSON strings

Nota: tengo un archivo en formato JSON (nasa.json) para usar en el ejercicio

"""
Ejemplo que que pasa un texto en
formato JSON a un diccionario en python
y viceversa
"""

import json

def main ():

    with open('nasa.json', 'r') as file:
        json_text = file.read()

# Pasa (DECODIFICA) de JSON string a diccionario Python 
    nasa_dict = json.loads(json_text)
    print(nasa_dict['explanation'])

# Pasa (CODIFICA) de diccionaro Python a JSON string
    new_json_string = json.dumps(nasa_dict, indent=4)
    print(new_json_string)
    
main ()

Resultado

>>> %Run request_json.py
Meteors have been shooting out from the constellation of Orion...
{
    "copyright": "Yin Hao",
    "date": "2018-10-30",
    "explanation": "Meteors have been shooting out from the constellation of Orion...",
    "hdurl": "https://apod.nasa.gov/apod/image/1810/Orionids_Hao_2324.jpg",
    "media_type": "image",
    "service_version": "v1",
    "title": "Orionids Meteors over Inner Mongolia",
    "url": "https://apod.nasa.gov/apod/image/1810/Orionids_Hao_960.jpg"
}
>>> 

Intro a OOP – Programación Orientada a Objetos

Ejemplo

"""
OOP
genera mazo de cartas con objetos

"""

import archjson as ajs

class Carta:
    def __init__(self,numero , palo):
        self.numero = numero
        self.palo = palo
    def elNumero(self):
        numeros = ["","A","2","3","4","5","6","7","8","9","10","J","Q","K"]
        return numeros[self.numero]
    
    def elPalo(self):
        palos = ["","♥","♦","♣","♠"]
        return palos[self.palo]
    
    def ver(self):
        return "["+self.elNumero()+" "+self.elPalo()+"]"
    
    def toList(self):
        return [self.elNumero(),self.elPalo()]

class Mazo:

    def __init__(self):
        self.lasCartas = []
        
    def llenar(self):
        for numero in range(1,14):
            for palo in range(1,5):
                self.lasCartas.append(Carta(numero,palo))     
    
    def ver(self):
        sale = ""
        for carta in self.lasCartas:
            sale += (carta.ver()+",")
        return sale

    def toList(self):
        lista = []

        for carta in self.lasCartas:
            lista.append(carta.toList())
        return lista


def main():
 #   c = Carta(1,3)
 #   print(c.ver())

    m = Mazo()
    m.llenar()
    #print(m.ver())
    #print(type(m))
    print(m.toList())
    print(type(m.toList()))
    ajs.escribir(m.toList()) 
main()

Resultado

>>> %Run cartas.py
[['A', '♥'], ['A', '♦'], ['A', '♣'], ['A', '♠'], ['2', '♥'], ['2', '♦'], ['2', '♣'], ['2', '♠'], ['3', '♥'], ['3', '♦'], ['3', '♣'], ['3', '♠'], ['4', '♥'], ['4', '♦'], ['4', '♣'], ['4', '♠'], ['5', '♥'], ['5', '♦'], ['5', '♣'], ['5', '♠'], ['6', '♥'], ['6', '♦'], ['6', '♣'], ['6', '♠'], ['7', '♥'], ['7', '♦'], ['7', '♣'], ['7', '♠'], ['8', '♥'], ['8', '♦'], ['8', '♣'], ['8', '♠'], ['9', '♥'], ['9', '♦'], ['9', '♣'], ['9', '♠'], ['10', '♥'], ['10', '♦'], ['10', '♣'], ['10', '♠'], ['J', '♥'], ['J', '♦'], ['J', '♣'], ['J', '♠'], ['Q', '♥'], ['Q', '♦'], ['Q', '♣'], ['Q', '♠'], ['K', '♥'], ['K', '♦'], ['K', '♣'], ['K', '♠']]
<class 'list'>
>>> 

Ejemplo

"""
Creacion de colas y pilas
para demostrar OOP
"""



class Nodo:
    
    def __init__(self,elem,next=None):
        self.elem = elem
        self.next = next

class Pila:

    #Crea una nueva lista enlazada vacía
    def __init__(self):
        self.prim = None

    def is_empty(self):
        return self.prim == None

    def pop(self):
        elem = self.prim.elem
        self.prim = self.prim.next
        return elem

    def push(self,elem):
        nuevo = Nodo(elem)
        nuevo.next = self.prim
        self.prim = nuevo

    def __len__(self):
        aux = self.prim
        cont = 0
        while aux != None:
            cont +=1
            aux = aux.next
        return cont              

class Cola:
    #Crea una nueva lista enlazada vacía
    def __init__(self):
        self.prim = None

    def is_empty(self):
        return self.prim == None

    def dequeue(self):
        elem = self.prim.elem
        self.prim = self.prim.next
        return elem

    def queue(self,elem):
        nuevo = Nodo(elem)
        if self.prim == None:
            self.prim = nuevo
        else:
            aux = self.prim
            while aux.next != None:
                aux = aux.next
            aux.next = nuevo

    def __len__(self):
        aux = self.prim
        cont = 0
        while aux != None:
            cont +=1
            aux = aux.next
        return cont              

   

def main():
    pila = Pila()

    
    pila.push("carlos")
    pila.push(2)
    pila.push("oscar")
    print("largo de la pila ",len(pila))
    print("pila")
    while not pila.is_empty():
        print(pila.pop())

    cola = Cola()

    cola.queue(1)
    cola.queue(2)
    cola.queue(3)

    print("cola")
    while not cola.is_empty():
        print(cola.dequeue())


main() 

Resultado

>>> %Run colasPilas.py
largo de la pila  3
pila
oscar
2
carlos
cola
1
2
3
>>> 

Leave a Reply

Your email address will not be published. Required fields are marked *