max()arg是函数内的空序列

时间:2018-01-30 02:14:52

标签: python

我一直在研究一个问题,该问题应该返回一个列表,其中包含一个范围内的所有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 之前的所有其他功能都能正常运行。为什么最后一个导致此错误?

1 个答案:

答案 0 :(得分:0)

正如约翰所说,prime_divs必须返回一个空列表。

如果您的某个测试场景是一个没有k-prime数字的范围,那么您的函数k_prime应该测试primes的长度,如果为零,则将线程路由到其他位置或者提出异常。

if not primes
    raise ValueError('No k-prime results found')

if not primes
    return 0