-
富国沪深
你的逻辑是错误的。您需要每个函数调用都返回n随机整数,因此您不需要将其传递到列表中。每个函数在范围内生成一个随机数,[0, valmax]并将其连接到整数的随机列表,该列表的长度减一 ( n-1),它是通过递归调用自身获得的。基本情况是 when n == 1,在这种情况下我们返回一个空列表。import randomdef random_list(n, valmax): if n == 0: return [] return [random.randint(0, valmax)] + random_list(n-1, valmax)和一个测试:random_list(10, 20)#[20, 9, 4, 7, 3, 4, 3, 18, 19, 9]
-
阿波罗的战车
不要保留默认参数(这也可能导致连续调用出现意外行为),而是使用yield更清洁的解决方案。此外,只需用于random.randint(0, valmax)在0和之间生成单个随机整数valmax:import randomdef random_list(n, valmax): if n: yield random.randint(0, valmax) yield from random_list(n-1, valmax)print(list(random_list(10, 10))) #create a list of length ten with random values between 0 and 10, inclusive.输出:[4, 6, 9, 1, 10, 2, 2, 8, 2, 10]
-
慕少森
你可以写一个通用build_list函数 -import randomdef identity (x): return xdef build_list (size, proc = identity): if size == 0: return [] else: return build_list (size - 1, proc) + [ proc (size - 1) ]print (build_list (5))# [ 0, 1, 2, 3, 4 ]print (build_list (5, lambda _: random.randint (0, 10)))# [ 4, 7, 7, 3, 6 ]random_list可能是一个专业build_list——def random_list (size, valmax): return build_list (size, lambda _: random.randint (0, valmax))print (random_list (5, 10))# [ 1, 7, 4, 7, 0 ]