我一直在研究一个问题,该问题应该返回一个列表,其中包含一个范围内的所有k-Primed数字,标记为(k,start,end)。
我在此之前编写的代码如下:
def greedyCoverByWindows(
numbers: List[Int],
maxWindowWidth: Int,
maxElemsPerWindow: Int
): List[List[Int]] = numbers match {
case Nil => Nil
case h :: t => {
val window = h :: t.take(maxElemsPerWindow - 1).filter(_ - h <= maxWindowWidth)
val rest = t.drop(window.size - 1)
window :: greedyCoverByWindows(rest, maxWindowWidth, maxElemsPerWindow)
}
}
val example = List(1,2,3,4,6,8,10,11,13,16,17,18)
val maxWindowWidth = 5
val maxElemsPerWindow = 4
val cover = greedyCoverByWindows(example, maxWindowWidth, maxElemsPerWindow)
println(example)
println(cover)
// Output:
// List(1, 2, 3, 4, 6, 8, 10, 11, 13, 16, 17, 18)
// List(List(1, 2, 3, 4), List(6, 8, 10, 11), List(13, 16, 17, 18))
测试完最后一个函数后,我收到此错误:
def check_prime(x):
c=2
if x==2:
return True
if x==0 or x==1:
return False
while c<x:
if x%c==0:
return False
break
else:
c+=1
if c==x:
return True
def prime_divs(x):
aux=2
nums=[]
primes=[]
i=0
while aux<x/2:
if x%aux==0:
nums.append(aux)
aux+=1
while i<len(nums):
if check_prime(nums[i])==True:
primes.append(nums[i])
i+=1
return primes
def k_prime(x):
k=0
primes=prime_divs(x)
if check_prime(x)==True:
k=1
else:
while x!=1:
if x%max(primes)==0:
x=int(x/max(primes))
k+=1
else:
del primes[len(primes)-1]
return k
def count_Kprimes(k_lim, start, end):
i=start
nums=[]
while i<=end:
if k_lim==k_prime(i):
nums.append(i)
i+=1
return nums
line 38, in k_prime
if x%max(primes)==0:
ValueError: max() arg is an empty sequence
之前的所有其他功能都能正常运行。为什么最后一个导致此错误?
答案 0 :(得分:0)
正如约翰所说,prime_divs
必须返回一个空列表。
如果您的某个测试场景是一个没有k-prime数字的范围,那么您的函数k_prime
应该测试primes
的长度,如果为零,则将线程路由到其他位置或者提出异常。
if not primes
raise ValueError('No k-prime results found')
或
if not primes
return 0