我正在寻找转换基地的问题,我在这里使用divmod找到了解决方案。代码看起来像这样。
integer = 0
for character in innitvar:
assert character in SY2VA, 'Found unknown character!'
value = SY2VA[character]
assert value < basevar, 'Found digit outside base!'
integer *= basevar
integer += value
array = []
while integer:
integer, value = divmod(integer, convertvar)
array.append(VA2SY[value])
answer = ''.join(reversed(array))
这个好人根据余数和整数描述了关于如何使用divmod的一些方法,但我想知道是否有人在没有divmod的情况下有另一种方法可以做到这一点,这样我就能更清楚地理解它。我想我也问,如果不使用divmod就可以做到这一点。
感谢您的任何建议!
答案 0 :(得分:3)
那么,
integer, value = divmod(integer, base)
相当于
value = integer % base
integer //= base
这有帮助吗?也许有一个临时变量,而且啰嗦:
temp = integer // base
value = integer - temp * base
integer = temp
将其设为10的幂,例如base = 100
。然后从12345开始,
integer, value = divmod(12345, 100)
产生integer = 123
和value = 45
。也就是说,divmod(whatever, 100)
将最后两位数字作为第二个返回值剥离,将其余数字作为第一个返回值传递。
答案 1 :(得分:1)
嗯,你可以单独进行除法和模数运算。
def int2str(integer, base):
digits = []
while integer:
value = integer % base
integer = integer / base
digits.append(dictionary[value])
return ''.join(reversed(digits))