下面的函数使用base16字母表'0123456789ABCDEF'
将数字255 (base10)
转换为'FF' (base16)
我很难弄清楚如何修改函数,使它们在每个字母中使用2个字母,这样数字255 (base10)
将使用修改后的base16字母'x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF'
转换为'xFxF' (base16)
def v2r(num, alphabet):
"""Convert base 10 number into a string of a custom base (alphabet)."""
alphabet_length = len(alphabet)
result = ''
while num > 0:
result = alphabet[num % alphabet_length] + result
num = num // alphabet_length
return result
def r2v(data, alphabet):
"""Convert string of a custom base (alphabet) back into base 10 number."""
alphabet_length = len(alphabet)
num = 0
for char in data:
num = alphabet_length * num + alphabet[:alphabet_length].index(char)
return num
base16 = v2r(255, '0123456789ABCDEF')
base10 = r2v(base16, '0123456789ABCDEF')
print(base16, base10)
# output: FF 255
# base16 = v2r(255, 'x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF')
# base10 = r2v(base16, 'x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF')
# print(base16, base10)
# output: xFxF 255
这里有一个可能的解决方法。我认为您的bug来自于对python类型和可重用性定义的混淆。
我已经修改了基本的16个字母表,它现在是一个项目列表。然后我还修改了一点函数以考虑到这一点,它看起来很有效
以下是OP的评论: 只需声明以下字母表:
我建议在开始计算之前删除“x”,因此将add作为函数的第一行
因此,您的函数将同时适用于“FFF”或“XF”两种系统
相关问题 更多 >
编程相关推荐