py_number_base_converter · Python

▶ Aprender py_number_base_converter (Python) paso a paso · explicación de py_number_base_converter

Código línea a línea

Tres columnas: el código, el trozo del subject o del main que obliga a escribir esa línea, y el por qué.

py_number_base_converter.py
CódigoSubjectPor qué
DIGITS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"Use digits 0-9 and letters A-Z for values 10-35.El alfabeto de dígitos: la posición de cada carácter es su valor. Sirve para leer y para escribir.
def number_base_converter(number: str, from_base: int, to_base: int) -> str:def number_base_converter(number: str, from_base: int, to_base: int) -> str:Firma del subject.
if not 2 <= from_base <= 36 or not 2 <= to_base <= 36 or not number:Support bases from 2 to 36 inclusive.
Return "ERROR" for invalid inputs.
Bases fuera de rango o número vacío: error antes de hacer nada.
return "ERROR"Return "ERROR" for invalid inputs.El string literal "ERROR". La misma línea sirve para los dos return de error.
value = 0converts a number from one base to anotherPaso 1: pasar el string a un entero. Acumulo aquí.
for ch in number.upper():Use digits 0-9 and letters A-ZDígito a dígito. Con upper() acepto también minúsculas.
digit = DIGITS.find(ch)Valor del dígito, o -1 si no es un carácter válido.
if digit < 0 or digit >= from_base:number_base_converter("G", 16, 10) => "ERROR"Carácter desconocido, o dígito demasiado grande para la base de origen (G no existe en base 16).
return "ERROR"Return "ERROR" for invalid inputs.El string literal "ERROR". La misma línea sirve para los dos return de error.
value = value * from_base + digitEsquema de Horner: desplazo lo que llevo una posición y sumo el dígito.
if value == 0:Caso especial: el bucle de abajo no produce nada con 0.
return "0"Un cero.
out = ""Paso 2: entero a string en la base destino.
while value:Mientras quede algo.
out = DIGITS[value % to_base] + outUse digits 0-9 and letters A-Z for values 10-35.El resto es el dígito menos significativo; lo pongo por delante para no tener que invertir al final.
value //= to_baseQuito ese dígito.
return outResultado en mayúsculas, como piden los ejemplos.