如何在Python中实现base b扩展?
我必须实现这个伪代码(来自离散数学书): 过程基b展开(n,b:b>1的正整数 return如何在Python中实现base b扩展?,python,base,expansion,Python,Base,Expansion,我必须实现这个伪代码(来自离散数学书): 过程基b展开(n,b:b>1的正整数 return(a_k-1,….a_1,a_0){(a_k-1…a_1a_0)\u b是n的基扩展} 以下是我迄今为止的代码: def expansion(n,b): q = n k = 0 a = [] i = len(str(n)) for x in range(0,1000): a.append(0) while q != 0:
(a_k-1,….a_1,a_0)
{(a_k-1…a_1a_0)\u b是n的基扩展}
以下是我迄今为止的代码:
def expansion(n,b):
q = n
k = 0
a = []
i = len(str(n))
for x in range(0,1000):
a.append(0)
while q != 0:
a[k] = q % b
q = q / b
return a[k]
print expansion(444,2)
我只是不知道我做错了什么,它通常会说索引超出了范围或者没有打印足够的数字。在您的代码中,您没有更新
k
while q != 0:
a[k] = q % b
q = q / b
# You need to update k
k += 1
另外,您只需要返回a
,而不是a[k]
另外,请理解,对于当前参数(444
,2
),在q
变为零之前,您需要在数组中至少放置1085
个位置。您不需要基于索引赋值,而是在计算值时将其附加到列表中
所以
这样,您就不必事先分配位置。与其使用列表来累积数字,不如尝试使用字符串。当您获得一个数字时,将其连接到字符串的前面。如下所示:
>>> def n_as_base_b(n, b):
... output = ""
... while n >0:
... output = str(n%b) + output
... n /= b
... return output
...
>>> n_as_base_b(15,2)
'1111'
>>> n_as_base_b(11,2)
'1011'
我认为这样做的结果没有多大意义。我不确定其他任何方式是否有意义。请参阅编辑后的答案。回答后请不要删除问题的内容。它会删除在访问网站时找到该问题的未来用户的值。
def expansion(n,b):
q = n
k = 0
a = []
i = len(str(n))
while q != 0:
a.append(q % b)
q = q / b
k += 1
return a
>>> def n_as_base_b(n, b):
... output = ""
... while n >0:
... output = str(n%b) + output
... n /= b
... return output
...
>>> n_as_base_b(15,2)
'1111'
>>> n_as_base_b(11,2)
'1011'