Python 将数字的基数更改为给定的数字
我必须编写一个递归函数,以10为基数获取一个数字(n),并将其转换为给定的基数(k),然后返回一个列表,其中它的组成部分是最后的数字位数,例如Python 将数字的基数更改为给定的数字,python,Python,我必须编写一个递归函数,以10为基数获取一个数字(n),并将其转换为给定的基数(k),然后返回一个列表,其中它的组成部分是最后的数字位数,例如f(5,3)必须结果[1,2]以3为基数的5是12,或者f(22,3)必须结果[2,1] 以下是我尝试的代码: def cb(n, k): b = [] if n == 0: b.append(0) if n < k: b.append(n) if n == k: b.a
f(5,3)
必须结果[1,2]
以3为基数的5是12,或者f(22,3)
必须结果[2,1]
以下是我尝试的代码:
def cb(n, k):
b = []
if n == 0:
b.append(0)
if n < k:
b.append(n)
if n == k:
b.append(10)
else:
a = n // k
b.append(n - ((n // k) * k))
if a < k:
b.append(a)
else:
cb(a, k)
return b
print(cb(22, 3))
def cb(n,k):
b=[]
如果n==0:
b、 追加(0)
如果n
事实上,我想了很多,但因为我不太擅长写代码,我不能再进一步了。感谢您对我的代码的帮助和修改。您非常接近,您需要做的唯一一件事就是更改:
else:
cb(a, k)
致:
但是,您的输出将是:
>>> cb(22, 3)
[1, 1, 2]
这与您想要的正好相反,因为基数3中的22是
211
。您可以通过反转列表[1,1,2][::-1]=[2,1,1]
或替换所有对append
的调用以及对extend
的新调用来解决此问题,改为在列表的开头添加,如:b.insert(0,element)
或b=cb(a,k)+b
<,你唯一需要做的就是改变:
else:
cb(a, k)
致:
但是,您的输出将是:
>>> cb(22, 3)
[1, 1, 2]
这与您想要的正好相反,因为基数3中的22是
211
。您可以通过反转列表[1,1,2][::-1]=[2,1,1]
或替换所有对append
的调用和对extend
的新调用来解决此问题,例如:b.insert(0,element)
或b=cb(a,k)+b
如果你从递归的角度考虑,基本情况是当n
时,答案是n
,要得到n
的最后一位,你需要n%k
,所以递归情况是cb(n//k,k)+[n%k]
代码如下所示:
def cb(n, k):
if n < k:
return [n]
else:
return cb(n//k, k) + [n%k]
print(cb(22, 3))
def cb(n,k):
如果n
如果你从递归的角度考虑,基本情况是当n
时,答案是n
,要得到n
的最后一位,你需要n%k
,所以递归情况是cb(n//k,k)+[n%k]
代码如下所示:
def cb(n, k):
if n < k:
return [n]
else:
return cb(n//k, k) + [n%k]
print(cb(22, 3))
def cb(n,k):
如果n
最大的问题是您没有对递归调用的结果进行任何处理,因此它们永远不会出现在您的列表中。我想你也把这件事弄得太复杂了。像这样的方法应该会奏效:
def cb(n,k):
if n > 0:
q = n // k
r = n - q * k
b = cb(q, k)
b.append(r)
else:
b = [0]
if b[0] == 0 and len(b) > 1:
b = b[1:]
return b
我认为如果你不做最后一部分,那么你总是在前面得到一个0?您还可以进一步简化它,只需测试它是否小于基数,这就提供了一个更简单的解决方案
def cb(n,k):
if n < k:
return [n]
else:
q = n // k
r = n - q * k
b = cb(q, k)
b.append(r)
return b
def cb(n,k):
如果n
最大的问题是您没有对递归调用的结果进行任何处理,因此它们永远不会出现在您的列表中。我想你也把这件事弄得太复杂了。像这样的方法应该会奏效:
def cb(n,k):
if n > 0:
q = n // k
r = n - q * k
b = cb(q, k)
b.append(r)
else:
b = [0]
if b[0] == 0 and len(b) > 1:
b = b[1:]
return b
我认为如果你不做最后一部分,那么你总是在前面得到一个0?您还可以进一步简化它,只需测试它是否小于基数,这就提供了一个更简单的解决方案
def cb(n,k):
if n < k:
return [n]
else:
q = n // k
r = n - q * k
b = cb(q, k)
b.append(r)
return b
def cb(n,k):
如果n
它能工作吗?你怎么知道的?它的作用是什么?不,我的代码不起作用,事实上我不能用另一种方法…cb(a,k)做什么?它起作用了吗?你怎么知道的?它对什么值起作用?不,我的代码不起作用,事实上我不能用另一种方法…cb(a,k)做什么?