convert a positive decimal number to any other representation from string import asciiuppercase alphabetvalues strordc 55 c for c in asciiuppercase def decimaltoanynum int base int str if isinstancenum float raise typeerrorint can t convert nonstring with explicit base if num 0 raise valueerrorparameter must be positive int if isinstancebase str raise typeerror str object cannot be interpreted as an integer if isinstancebase float raise typeerror float object cannot be interpreted as an integer if base in 0 1 raise valueerrorbase must be 2 if base 36 raise valueerrorbase must be 36 newvalue mod 0 div 0 while div 1 div mod divmodnum base if base 11 and 9 mod 36 actualvalue alphabetvaluesstrmod else actualvalue strmod newvalue actualvalue div num base num div if div 0 return strnewvalue 1 elif div 1 newvalue strdiv return strnewvalue 1 return newvalue 1 if name main import doctest doctest testmod for base in range2 37 for num in range1000 assert intdecimaltoanynum base base num num base decimaltoanynum base intdecimaltoanynum base base convert a positive integer to another base as str decimal_to_any 0 2 0 decimal_to_any 5 4 11 decimal_to_any 20 3 202 decimal_to_any 58 16 3a decimal_to_any 243 17 e5 decimal_to_any 34923 36 qy3 decimal_to_any 10 11 a decimal_to_any 16 16 10 decimal_to_any 36 36 10 negatives will error decimal_to_any 45 8 doctest ellipsis traceback most recent call last valueerror parameter must be positive int floats will error decimal_to_any 34 4 6 doctest ellipsis traceback most recent call last typeerror int can t convert non string with explicit base a float base will error decimal_to_any 5 2 5 doctest ellipsis traceback most recent call last typeerror float object cannot be interpreted as an integer a str base will error decimal_to_any 10 16 doctest ellipsis traceback most recent call last typeerror str object cannot be interpreted as an integer a base less than 2 will error decimal_to_any 7 0 doctest ellipsis traceback most recent call last valueerror base must be 2 a base greater than 36 will error decimal_to_any 34 37 doctest ellipsis traceback most recent call last valueerror base must be 36
from string import ascii_uppercase

ALPHABET_VALUES = {str(ord(c) - 55): c for c in ascii_uppercase}


def decimal_to_any(num: int, base: int) -> str:
    
    if isinstance(num, float):
        raise TypeError("int() can't convert non-string with explicit base")
    if num < 0:
        raise ValueError("parameter must be positive int")
    if isinstance(base, str):
        raise TypeError("'str' object cannot be interpreted as an integer")
    if isinstance(base, float):
        raise TypeError("'float' object cannot be interpreted as an integer")
    if base in (0, 1):
        raise ValueError("base must be >= 2")
    if base > 36:
        raise ValueError("base must be <= 36")
    new_value = ""
    mod = 0
    div = 0
    while div != 1:
        div, mod = divmod(num, base)
        if base >= 11 and 9 < mod < 36:
            actual_value = ALPHABET_VALUES[str(mod)]
        else:
            actual_value = str(mod)
        new_value += actual_value
        div = num // base
        num = div
        if div == 0:
            return str(new_value[::-1])
        elif div == 1:
            new_value += str(div)
            return str(new_value[::-1])

    return new_value[::-1]


if __name__ == "__main__":
    import doctest

    doctest.testmod()

    for base in range(2, 37):
        for num in range(1000):
            assert int(decimal_to_any(num, base), base) == num, (
                num,
                base,
                decimal_to_any(num, base),
                int(decimal_to_any(num, base), base),
            )