2015-04-11 3 views
3

Может кто-то, пожалуйста, проверьте мой код. У меня возникли проблемы с извлечением простого числа в цикле. Если пользователь вводит 5, выходной сигнал должен быть: 2 3 5 13 89 и если пользователь вводит 7, выходной сигнал должен быть 2 3 5 13 89 233 1597, и т.д.,Выходные простые числа в последовательности Фибоначчи

countPrime= int(0) 
endNum= int(0) 
a0= int(0) 
a1= int(1) 
checkPrime= False 
valueN= int(input("Enter the value of N: \n")) 

while (countPrime < valueN): 
     endNum= a0 + a1 
     a0= a1 
     a1= endNum 

     for i in range(2, endNum+1):     # prime check 
      if (not endNum % i ==0 and endNum > 2):  # 
       checkPrime= True       # 

     if(checkPrime==True): 
      countPrime+=1 
      print(endNum, end=" ") 
+0

Что ошибка вы» у вас возникают проблемы или проблемы? Кроме того, тело вашего цикла while не имеет отступов. Использование правильной грамматики также поможет в общении. – KSFT

+4

Говоря «* пожалуйста, мне нужна помощь срочно», вам не поможет нигде рядом с тем, чтобы иметь четко сформулированный вопрос с хорошим описанием проблемы и надлежащим форматированием. –

+0

Игнорируйте отступ, я сделал ошибку при копировании и вставке сюда. Когда я запускаю код, простая последовательность Фибоначчи не отображается, вместо этого отображается исходная последовательность Фибоначчи. –

ответ

4

Цикл, пока не отступом ,

Если бы это было, было бы вычислить только число Nth Фибоначчи.

И в цикле for, похоже, вы установили checkPrime = True, если число неделимо от некоторая цифра, что всегда было бы так.

+0

я исправил отступы Теперь –

+1

OK, но ваш премьер чек еще «назад», он помечен как штрих, если есть любое число это не делится. Кроме того, вы не сбросите checkPrime в цикле. –

0

Как Bjorn Munch noticed, ваш премьер-чек не делать то, что он должен. Не могли бы вы сами это заметить? С вашим текущим кодом, который может быть затруднен. Но если вы вытаскивать отдельные проблемы в отдельные функции, они могут быть индивидуально протестированы и проверены:

import unittest 

def is_prime(number): 
    for divisor in range(2, number+1): 
     if (not number % divisor == 0 and number > 2): 
      return True 
    return False 

class TestIsPrime(unittest.TestCase): 
    def test_0_isnt_prime(self): 
     self.assertFalse(is_prime(0)) 

    def test_1_isnt_prime(self): 
     self.assertFalse(is_prime(1)) 

    def test_2_is_prime(self): 
     self.assertTrue(is_prime(2)) 

    def test_3_is_prime(self): 
     self.assertTrue(is_prime(3)) 

    def test_4_isnt_prime(self): 
     self.assertFalse(is_prime(4)) 

    def test_23_is_prime(self): 
     self.assertTrue(is_prime(23)) 

    def test_25_isnt_prime(self): 
     self.assertFalse(is_prime(25)) 

if __name__ == '__main__': 
    unittest.main() 

Запуск этого дал бы вам:

...FF.F 
====================================================================== 
FAIL: test_25_isnt_prime (__main__.TestIsPrime) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "fibprime.py", line 29, in test_25_isnt_prime 
    self.assertFalse(is_prime(25)) 
AssertionError: True is not false 

====================================================================== 
FAIL: test_2_is_prime (__main__.TestIsPrime) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "fibprime.py", line 17, in test_2_is_prime 
    self.assertTrue(is_prime(2)) 
AssertionError: False is not true 

====================================================================== 
FAIL: test_4_isnt_prime (__main__.TestIsPrime) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "fibprime.py", line 23, in test_4_isnt_prime 
    self.assertFalse(is_prime(4)) 
AssertionError: True is not false 

---------------------------------------------------------------------- 
Ran 7 tests in 0.000s 

FAILED (failures=3) 
+0

спасибо, чувак ... Я, кстати, новичок в python. –

+0

Добро пожаловать @ JeshenAppanna. Чтобы бросить вызов себе, я попытался полностью вырвать свой код в функции и накрыть их автоматическими тестами.Если вас интересует результат, сообщите мне об этом, и я опубликую его с помощью удобных для начинающих объяснений. –

3

Я забыл загрузить этот код давно

countPrime= int(0) 
checkPrime=True  
endNum= int(0)  
prevNum= int(0)   
nextNum= int(1)   
valueN= int(input("Enter the value of N: \n")) 
print("\nThe Prime numbers are: ") 

def checkIfPrime(endNum):    
    sumFact=0       
    for i in range(1, endNum+1):  
      if(endNum % i == 0):   
       sumFact+=1    
    if(sumFact==2):     
      return True 
    else: 
      return False 
while (countPrime < valueN): 
    endNum= prevNum + nextNum   
    prevNum= nextNum     
    nextNum= endNum     
    checkPrime= checkIfPrime(endNum)  
    if(checkPrime==True):     
      countPrime+=1     
      checkPrime= False    
      print(endNum," ", end=" ")   
3

следующий код использует рекурсию для вывода последовательности Фибоначчи с помощью рекурсии:

sequence=[0,1] 
def fibonacci(num,prev, after): 
    if(len(sequence) !=num):  # base case 
     nextNum = prev +after   # change of state 
     sequence.append(nextNum) 
     fibonacci(num,after,nextNum)  # function calls itself 
    return sequence 

print(fibonacci(10,0,1)) # test with 10 numbers 
3

Этот метод использует "кортеж" Тип данных:

def fibonacci(n): 
a,b = 1,1 
for i in range(n-1): 
a,b = b,a+b 
return a 
print fibonacci(5)  # test with 5 numbers 
3

Использование классов вы можете сделать это:

class Fibo: 
def __init__(self, fn): 
    self.fn = fn 
    self.memo = {} 
def __call__(self, arg): 
    if arg not in self.memo: 
    self.memo[arg] = self.fn(arg) 
    return self.memo[arg] 
Смежные вопросы