“编写一个函数bin_rep(n),它返回一个二进制表示为n。
的字符串扩展bin_rep(n)以创建base_rep(n,k)以给出表示基本k中的非netavie整数n的字符串,其中2 <= k <= 10.在基数k中,允许的唯一数字是{0,...,k-1}。
对于不同整数的列表,L,将开关(L)定义为L中不按递增顺序排列的对数。例如,开关([6,1,4])返回2,因为(6,1)和(6,4)无序。“
以上是实验课中的额外学分练习。我根本无法理解如何编写这些代码。我确实有类注释中的bin_rep(n)函数,但这是关于它的。请帮忙。这个练习根本没有标记,但我想知道它是如何写的。感谢。
def bin_rep(n):
if n == 0:
return ['']
else:
short_strings = bin_rep(n - 1)
strings = []
for s in short_strings:
strings.append('0' + s)
for s in short_strings:
strings.append('1' + s)
return strings
答案 0 :(得分:1)
我不会给你代码,而是解释如何解决这个问题,所以你可以自己编写。
首先,请注意,与您的说明相反,bin_rep
不会给出数字n
的二进制表示形式;相反,它给出了最多n
个数字的所有二进制字符串的列表。
所以,假设你想要做同样的事情 - 也就是说,列出所有基数 - k
字符串,最多n
个数字 - 你必须确定&#34的位置;基础2-ness&#34;进来了。
看看这段代码:
for s in short_strings:
strings.append('0' + s)
for s in short_strings:
strings.append('1' + s)
这对数字0
执行了一些操作,然后对数字1
执行了操作。这些是基数2的两位数。因此,为了使这对基数3起作用,它将是:
for s in short_strings:
strings.append('0' + s)
for s in short_strings:
strings.append('1' + s)
for s in short_strings:
strings.append('2' + s)
但是对于任意基数k
,您必须为0
到(但不包括)k
的每个数字执行此操作。所以,你要写一些循环遍历那个(半开)范围内的所有数字,然后,不要重复这个双线程,只需使用它一次,作为循环内的嵌套循环在数字上。
此外,当然,您不需要对字符串'0'
进行硬编码,而是需要编写数字的字符串表示。 (您无法在字符串中添加数字;您必须将数字转换为其字符串表示形式,然后将 添加到字符串中。)
另请注意,您不能只调用base_rep(n - 1)
,因为base_rep
有两个参数。第二个论点应该是什么?