Herramientas de usuario

Herramientas del sitio


informatica:programacion:python:cursos:introduccion_programacion_python:ejemplos_practicos

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:programacion:python:cursos:introduccion_programacion_python:ejemplos_practicos [2023/04/27 11:16] – [Conversión a números romanos] tempwininformatica:programacion:python:cursos:introduccion_programacion_python:ejemplos_practicos [2023/04/28 11:47] (actual) – [JSON en Python] tempwin
Línea 575: Línea 575:
     def test_19(self):     def test_19(self):
         self.assertEqual(roman(19), "XIX")         self.assertEqual(roman(19), "XIX")
 +        
 +    def test_20(self):
 +        self.assertEqual(roman(20), "XX")
 +        
 +    def test_27(self):
 +        self.assertEqual(roman(27), "XVII")
  
 +    def test_33(self):
 +        self.assertEqual(roman(33), "XXXIII")
 +        
 +    def test_40(self):
 +        self.assertEqual(roman(40), "XL")
 +
 +    def test_49(self):
 +        self.assertEqual(roman(49), "XLIX")
 +
 +    def test_50(self):
 +        self.assertEqual(roman(50), "L")
 +
 +    def test_62(self):
 +        self.assertEqual(roman(62), "LXII")
 +        
 +    def test_90(self):
 +        self.assertEqual(roman(90), "XC")
 +        
 +    def test_97(self):
 +        self.assertEqual(roman(90), "XCVII")
 +        
 +    def test_100(self):
 +        self.assertEqual(roman(100), "C")
 +
 +    def test_333(self):
 +        self.assertEqual(roman(333), "CCCXXXIII")
 +        
 +    def test_400(self):
 +        self.assertEqual(roman(400), "CD")
 +        
 +    def test_500(self):
 +        self.assertEqual(roman(500), "D")
 +        
 +    def test_666(self):
 +        self.assertEqual(roman(666), "DCLXVI")
 +        
 +    def test_900(self):
 +        self.assertEqual(roman(900), "CM")
 +        
 +    def test_1000(self):
 +        self.assertEqual(roman(1000), "M")
 +        
 +    def test_1666(self):
 +        self.assertEqual(roman(1666), "MDCLXVI")
 +        
 +    def test_3999(self):
 +        self.assertEqual(roman(3999), "MMMCMXCIX")
  
 if __name__ == '__main__': if __name__ == '__main__':
Línea 597: Línea 650:
  
 def roman(n: int) -> str: def roman(n: int) -> str:
 +
 +    cantidades = [
 +        (1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), 
 +        (90, "XC"), (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), 
 +        (5, "V"), (4, "IV"), (1, "I")
 +    ]
  
     conv = ""     conv = ""
 +    
 +    for cant, letras in cantidades:
 +        while n >= cant.
 +            n -= cant
 +            conv += letras
 +    
 +    return conv
 +</code>
  
-    if n >= 10: +Opción con recursividad:
-        n -= 10 +
-        conv += "X"+
  
-    if == 9: +<code python> 
-        n -= 9 +def roman2(n: int) -> str:
-        conv += "IX"+
  
-    if n >= 5+    if n >= 1000
-        n -= 5 +        return "M" + roman2(n - 1000) 
-        conv += "V"+    elif n >900: 
 +        return "CM" roman2(n - 900) 
 +    elif n >500: 
 +        return "D" + roman2(n - 500)     
 +    elif n >= 400: 
 +        return "CD" + roman2(n - 400)     
 +    elif n >= 100: 
 +        return "C" + roman2(n - 100)             
 +    elif n >= 90: 
 +        return "XC" + roman2(n - 90)             
 +    elif n >= 50: 
 +        return "L" + roman2(n - 50)             
 +    elif n >= 40: 
 +        return "XL" + roman2(n - 40)             
 +    elif n >= 10: 
 +        return "XL" + roman2(n - 10)             
 +    elif n >= 9: 
 +        return "XL" + roman2(n - 9)             
 +    elif n >= 5: 
 +        return "V" + roman2(n - 5)             
 +    elif n >= 4: 
 +        return "IV" + roman2(n - 4)             
 +    elif n >= 1: 
 +        return "I" + roman2(n - 1)                     
 +    else: 
 +        return "" 
 +</code>
  
-    if n == 4: +  * [[https://codewars.com|codewars]]: retos de programación
-        n -= 4 +
-        conv += "IV"+
  
-    conv +"I" n +===== JSON ===== 
-     + 
-    return conv+JSON (//JavaScript Object Notation//) formato para el intercambio de información. 
 + 
 +JSON no son más que objetos (que son equivalentes a los diccionarios de Python) y listas. 
 + 
 +Se trata de texto. 
 + 
 +  https://www.json.org/json-en.html 
 + 
 +==== JSON en Python ==== 
 + 
 +Aspecto de un JSON, que lo representamos como string: 
 + 
 +<code python> 
 +datos_json = ''' 
 +{ 
 +    "glossary":
 +        "title": "example glossary", 
 +        "GlossDiv":
 +            "title": "S", 
 +            "GlossList":
 +                "GlossEntry":
 +                    "ID": "SGML", 
 +                    "SortAs": "SGML", 
 +                    "GlossTerm": "Standard Generalized Markup Language", 
 +                    "Acronym": "SGML", 
 +                    "Abbrev": "ISO 8879:1986", 
 +                    "GlossDef":
 +                        "para": "A meta-markup language, used to create markup languages such as DocBook.", 
 +                        "GlossSeeAlso":
 +                            "GML", 
 +                            "XML" 
 +                        ] 
 +                    }, 
 +                    "GlossSee": "markup" 
 +                } 
 +            } 
 +        } 
 +    
 +
 +'''
 </code> </code>
 +
 +  * [[https://docs.python.org/3/library/json.html|Tratamiento de JSON en Python (documentación oficial)]]
 +
 +<code python>
 +# Biblioteca de Python para el tratamiento de JSON
 +import json
 +
 +# Cargamos a partir de un string un objeto JSON/diccionario
 +datos = json.loads(datos_json)
 +
 +type(datos) # dict
 +
 +datos.keys() # dict_keys(['glossary'])
 +
 +glossary = datos['glossary'] # dict
 +
 +glossary.keys() # dict_keys(['title', 'GlossDiv'])
 +
 +paises_capitales = {
 +    "España": "Madrid",
 +    "Portugal": "Lisboa",
 +    "Italia": "Roma",
 +    "Francia": "Paris",
 +    "Alemania": "Berlin"
 +}
 +
 +type(paises_capitales) # dict
 +
 +# Si queremos pasar de un diccionario a string en formato JSON
 +json.dumps(paises_capitales)
 +</code>
 +
 +  * [[https://jsonviewer.stack.hu/|Online JSON Viewer]]
 +
 +Si procesamos un JSON inválido:
 +
 +<code python>
 +mal_json = '''
 +{"mal": "json"
 +'''
 +
 +try:
 +    json.loads(mal_json)
 +except json.JSONDecodeError as error:
 +    print("Error cargando JSON")
 +</code>
 +
 +
 +disculpa, Jairo, sabes hasta qué día tenemos disponible el acceso al campus virtual?
informatica/programacion/python/cursos/introduccion_programacion_python/ejemplos_practicos.1682586982.txt.gz · Última modificación: por tempwin