informatica:programacion:python:cursos:introduccion_programacion_python:ejemplos_practicos
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| informatica:programacion:python:cursos:introduccion_programacion_python:ejemplos_practicos [2023/04/27 11:06] – [Conversión a números romanos] tempwin | informatica:programacion:python:cursos:introduccion_programacion_python:ejemplos_practicos [2023/04/28 11:47] (actual) – [JSON en Python] tempwin | ||
|---|---|---|---|
| Línea 420: | Línea 420: | ||
| </ | </ | ||
| - | ==== Testing: Pruebas unitarias ===== | + | ===== Testing: Pruebas unitarias ===== |
| Usaremos el módulo [[https:// | Usaremos el módulo [[https:// | ||
| Línea 569: | Línea 569: | ||
| def test_14(self): | def test_14(self): | ||
| self.assertEqual(roman(14), | self.assertEqual(roman(14), | ||
| + | | ||
| + | def test_17(self): | ||
| + | self.assertEqual(roman(17), | ||
| + | | ||
| + | def test_19(self): | ||
| + | self.assertEqual(roman(19), | ||
| + | | ||
| + | def test_20(self): | ||
| + | self.assertEqual(roman(20), | ||
| + | | ||
| + | def test_27(self): | ||
| + | self.assertEqual(roman(27), | ||
| + | def test_33(self): | ||
| + | self.assertEqual(roman(33), | ||
| + | | ||
| + | def test_40(self): | ||
| + | self.assertEqual(roman(40), | ||
| + | |||
| + | def test_49(self): | ||
| + | self.assertEqual(roman(49), | ||
| + | |||
| + | def test_50(self): | ||
| + | self.assertEqual(roman(50), | ||
| + | |||
| + | def test_62(self): | ||
| + | self.assertEqual(roman(62), | ||
| + | | ||
| + | def test_90(self): | ||
| + | self.assertEqual(roman(90), | ||
| + | | ||
| + | def test_97(self): | ||
| + | self.assertEqual(roman(90), | ||
| + | | ||
| + | def test_100(self): | ||
| + | self.assertEqual(roman(100), | ||
| + | |||
| + | def test_333(self): | ||
| + | self.assertEqual(roman(333), | ||
| + | | ||
| + | def test_400(self): | ||
| + | self.assertEqual(roman(400), | ||
| + | | ||
| + | def test_500(self): | ||
| + | self.assertEqual(roman(500), | ||
| + | | ||
| + | def test_666(self): | ||
| + | self.assertEqual(roman(666), | ||
| + | | ||
| + | def test_900(self): | ||
| + | self.assertEqual(roman(900), | ||
| + | | ||
| + | def test_1000(self): | ||
| + | self.assertEqual(roman(1000), | ||
| + | | ||
| + | def test_1666(self): | ||
| + | self.assertEqual(roman(1666), | ||
| + | | ||
| + | def test_3999(self): | ||
| + | self.assertEqual(roman(3999), | ||
| if __name__ == ' | if __name__ == ' | ||
| Línea 592: | Línea 651: | ||
| def roman(n: int) -> str: | def roman(n: int) -> str: | ||
| - | | + | |
| - | | + | |
| - | if n >= 10: | + | |
| - | | + | |
| - | if n == 9: | + | |
| - | return | + | |
| - | if n >= 5: | + | conv = "" |
| - | | + | |
| - | | + | for cant, letras in cantidades: |
| - | | + | |
| - | return | + | n -= cant |
| + | conv += letras | ||
| + | | ||
| + | return | ||
| </ | </ | ||
| + | |||
| + | Opción con recursividad: | ||
| + | |||
| + | <code python> | ||
| + | def roman2(n: int) -> str: | ||
| + | |||
| + | if n >= 1000: | ||
| + | return " | ||
| + | elif n >= 900: | ||
| + | return " | ||
| + | elif n >= 500: | ||
| + | return " | ||
| + | elif n >= 400: | ||
| + | return " | ||
| + | elif n >= 100: | ||
| + | return " | ||
| + | elif n >= 90: | ||
| + | return " | ||
| + | elif n >= 50: | ||
| + | return " | ||
| + | elif n >= 40: | ||
| + | return " | ||
| + | elif n >= 10: | ||
| + | return " | ||
| + | elif n >= 9: | ||
| + | return " | ||
| + | elif n >= 5: | ||
| + | return " | ||
| + | elif n >= 4: | ||
| + | return " | ||
| + | elif n >= 1: | ||
| + | return " | ||
| + | else: | ||
| + | return "" | ||
| + | </ | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | ===== JSON ===== | ||
| + | |||
| + | JSON (// | ||
| + | |||
| + | JSON no son más que objetos (que son equivalentes a los diccionarios de Python) y listas. | ||
| + | |||
| + | Se trata de texto. | ||
| + | |||
| + | * https:// | ||
| + | |||
| + | ==== JSON en Python ==== | ||
| + | |||
| + | Aspecto de un JSON, que lo representamos como string: | ||
| + | |||
| + | <code python> | ||
| + | datos_json = ''' | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ] | ||
| + | }, | ||
| + | " | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | ''' | ||
| + | </ | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | <code python> | ||
| + | # Biblioteca de Python para el tratamiento de JSON | ||
| + | import json | ||
| + | |||
| + | # Cargamos a partir de un string un objeto JSON/ | ||
| + | datos = json.loads(datos_json) | ||
| + | |||
| + | type(datos) # dict | ||
| + | |||
| + | datos.keys() # dict_keys([' | ||
| + | |||
| + | glossary = datos[' | ||
| + | |||
| + | glossary.keys() # dict_keys([' | ||
| + | |||
| + | paises_capitales = { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | |||
| + | type(paises_capitales) # dict | ||
| + | |||
| + | # Si queremos pasar de un diccionario a string en formato JSON | ||
| + | json.dumps(paises_capitales) | ||
| + | </ | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | Si procesamos un JSON inválido: | ||
| + | |||
| + | <code python> | ||
| + | mal_json = ''' | ||
| + | {" | ||
| + | ''' | ||
| + | |||
| + | try: | ||
| + | json.loads(mal_json) | ||
| + | except json.JSONDecodeError as error: | ||
| + | print(" | ||
| + | </ | ||
| + | |||
| + | |||
| + | disculpa, Jairo, sabes hasta qué día tenemos disponible el acceso al campus virtual? | ||
informatica/programacion/python/cursos/introduccion_programacion_python/ejemplos_practicos.1682586381.txt.gz · Última modificación: por tempwin
