如何在Python中实现base b扩展?

如何在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:

我必须实现这个伪代码(来自离散数学书):

过程基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] = 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'