2013-03-02 4 views
-1

На самом деле не могу понять, что происходит в этой программе, она возвращаетОтладка программы Python

[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 34, 37, 38, 41, 43, 44, 46, 47, 49] 

Помощь?

def primeTest(n): 
    if n < 2: 
     return False 
    if n == 2: 
     return True 
    for x in range(3, int(n ** 0.5 + 0.5), 2): 
     if n % x == 0: 
      return False 
    return True 
def primeList(largestValue): 
    primes = [] 
     for a in range(2, largestValue): 
      if primeTest(a) == True: 
       primes.append(a) 
    return primes  
print(primeList(101)) 

Я понял, что это первая функция primeTest, becuase если вход print(primeTest(10)) возвращается True.

+3

Вы на самом деле не имеют 'return' заявление в ваш 'primeList'. – Cairnarvon

+0

Что еще он должен вернуть, кроме True, False или None ??? Вывод print() в конце метода * печатает * некоторый вывод, но ничего не возвращает! Вы слышали о «возврате»? Если нет, прочитайте документацию Python. –

+0

О да, теперь я чувствую себя очень глупым! @Cairnarvon – awsomeguy

ответ

0

Вот некоторые проблемы, которые выпрыгивают:

1) Вы никогда не проверять делимость на 2.

2) primeList() должен вернуть primes, а не primeList.

3) Верхняя граница в range(3, int(n ** 0.5 + 0.5), 2) отключена одним. Например, для n==9 делимость на 3 никогда не проверяется.

Как только я их исправлю, код работает так, как ожидалось.

0

первый, вы должны переключить внутреннюю и внешнюю функцию затем сделать простое испытание правильно, и, наконец, вернуться в список, а не функция:

def primeList(largestValue): 
    def isPrime(n): 
     if n < 2: return False 
     if n == 2: return True 
     if n & 1 == 0: return False 
     for x in range(3, int(n ** 0.5)+1, 2): 
      if n % x == 0: 
       return False 
     return True 


    primes = [] 
    for a in range(2, largestValue): 
     if isPrime(a): 
      primes.append(a) 
    return primes 

print(primeList(101)) 
Смежные вопросы