def trans_print(func):def wrapper(*args):res = func(*args)print(f'{int(args[-1])} |{func.__name__}| {res}')return resreturn wrapper
2 - >10 2- >16
class Trans:# 2 -> 10@trans_printdef bin_to_dec(self,bin_str):bin,dec = list(map(int, bin_str)),0for i in range(len(bin)):dec += bin[-i-1] * 2 ** ireturn dec# 2 -> 16@trans_printdef bin_to_hex(self, bin_str):# 2 -> 10bin, dec = list(map(int, bin_str)), 0for i in range(len(bin)):dec += bin[-i-1] * 2 ** i# 10 -> 16hex = []while dec / 16 > 0:hex.append(dec % 16)dec //= 16hex.reverse()# 48 ->0 65 -> Areturn ''.join([chr(65 + (_ - 10)) if _ > 9 else chr(_ + 48) for _ in hex])
10 -> 2 10 -> 16
# 10 -> 2@trans_printdef dec_to_bin(self, dec_str):bin, dec = "", int(dec_str)while dec / 2 > 0:bin = str(dec % 2) + bindec //=2return int(bin)# 10 -> 16@trans_printdef dec_to_hex(self, dec_str):hex, dec = [], int(dec_str)while dec / 16 > 0:hex.append(dec % 16)dec //= 16hex.reverse()# 48 ->0 65 -> Areturn ''.join([chr(65 + (_ - 10)) if _ > 9 else chr(_ + 48) for _ in hex])
16 -> 2 16 -> 10
# 16 -> 2@trans_printdef hex_to_bin(self, hex_str):# 16 -> 10hex = [65 + (ord(_) - 10) if _ in "ABCDEF" else ord(_) - 48 for _ in hex_str.upper()]dec = 0for i in range(len(hex)):dec += hex[-i - 1] * 16 ** i# 10 -> 2bin = ""while dec / 2 > 0:bin = str(dec % 2) + bindec //= 2return int(bin)# 16 -> 10@trans_printdef hex_to_dec(self, hex_str):hex = [65 + (ord(_) - 10) if _ in "ABCDEF" else ord(_) - 48 for _ in hex_str.upper()]dec = 0for i in range(len(hex)):dec += hex[-i - 1] * 16 ** ireturn dec
if __name__ == '__main__':input_str = input()trans = Trans()fs = ['bin_to_dec', 'bin_to_hex', 'dec_to_bin','dec_to_hex', 'hex_to_bin', 'hex_to_dec']for f in fs:if hasattr(trans, f):# 存在方法则调用getattr(trans,f)(input_str)
