2015-01-10 6 views
-3

가 여기에 내가 소수의 목록을 찾는 작업 한 일부 코드이다 (나는 비교적 새로운 오전 명심하고 나는이 복잡한 동안 것 알고) 문제의왜이 경우 % 함수가 작동하지 않습니까?

prime_list=[2,3,5,7,11,13] 

prime_list=[2,3,5,7,11,13] 

a=1 
length=len(prime_list) 
last=prime_list[length-1] 



true=True 
while last < last**2 and a <30: 
    last= last+1 
    a=a+1 
    for number in prime_list: 
     if (last)%number == 0: 
      true = False 
     else: 
      pass 
    if true == True: 
     prime_list.append(last) 
    else: 
     print("n") 
     pass 

print(prime_list) 

본질이있다, 내가받는 것은 ns입니다. 마찬가지로 true 변수는 항상 false가됩니다. 어떤 이유로 든 나머지 기능이 작동하지 않습니다. 나는 정말로 약간의 도움에 감사 할 것이다. 이 번 False로 설정됩니다 후에합니다 (if last%number == 0:

+1

'동안을 마지막으로 <마지막 **이 ...'당신이 계속 증가하면 이해가되지 않습니다'last' ...이 코드는 가정 무엇 – alfasin

+1

는 할까? 당신은 이미 소수 목록을 하드 코딩했습니다. 코드를 읽으려는 의도를 이해할 것이라고 가정해서는 안됩니다. 너 뭐하려고? 어디서 실패하니? 원하는 출력 대 실제 출력은 무엇입니까? – alfasin

+7

False 일 수있는 변수의 이름을 지정하지 마십시오. –

답변

0

의 특정 부분에 관여보기 위해 당신은 결코 True로 정말이 변수에 대한 나쁜 이름입니다 true()를 다시 설정하지 있습니다.

이동 true = True 당신의 동안으로 루프 앞의 루프

0

테스트 할 첫 번째 숫자 (14)가 기본이 아니므로 true이라는 변수 (true)가 설정되어 있습니다. 그 이후로 모든 후속 숫자에 대해서는 False으로 남아 있습니다 : 0123으로 재설정 할 수있는 것은 없습니다..

당신은 당신이 잠재적 인 디바이더 반복 시작하기 전에 테스트 각 번호에 대한 True에 플래그 변수를 설정해야합니다. 은 즉, 오퍼레이터는 true=True (I 이것을 싫어하는 쓰기)되지 그 전에 while 안에 있어야한다.

P. 교환 원 %은 의도 한대로 작동합니다.

당신이 초보자 있다면 이런 식으로 뭔가를 갈 것
0

:보다 효율적인 알고리즘의

def isPrime(x): # define a function that will check if 'x' is prime 
    if x == 2: 
     return True 
    i = 2 
    while i * i <= x: # this will loop from i = 2 to sqrt(x) 
     if x % i == 0: # check if 'i' can divide 'x' 
      return False 
     i += 1 # this will increase 'i' by 1 
    return True 

n = 100 # every prime number in 'list' will be below 'n' 
list = [] 
for k in range(1, n): 
    if isPrime(k): # let see if 'k' is a prime number 
     list.append(k) # if 'k' is a prime number add it to the list 
print(list) 

내가 Sieve of Eratosthenes

1

last 코드에서 작동하지 않는 이유를 사용한다는 점이다 루프 while 외부에서 정의해야합니다. 여기에 간단한 방법이 있습니다. 주요 목록 있음을 주목하고, nextNum (당신의 last 내 상당)을 전역으로 정의된다. 그들이 while 루프 외부에서 정의되어 있기 때문에 반복의 반복으로 지속됩니다.

primes = [] 

nextNum = 2 
while nextNum < 100 : 
    tester = 0 # 0 at the end means nextNum is prime 
    for p in primes : 
     if nextNum%p == 0 : 
      tester += 1 
    if tester == 0 : 
     primes.append(nextNum) 
     print nextNum 
    nextNum += 1 
0

아마도 martijnn이 초보자에게 가장 좋은 예일 것입니다. 우리가 특정 목록에 자신의 예를 적용 할 경우 원래 코드에서 그랬던 것처럼 당신이 만든 (당신이 필수 100 루프에서 차이를 볼 수 있습니다 만, 그래서 당신은 목록 및 루프에 대한 자세한 배울 수) :

original_list=[2,3,5,6,7,11,13] 
prime_list = [] 

def isPrime(x): # define a function that will check if 'x' is prime 
    if x == 2: 
     return True 
    i = 2 
    while i * i <= x: # this will loop from i = 2 to sqrt(x) 
     if x % i == 0: # check if 'i' can divide 'x' 
      return False 
     i += 1 # this will increase 'i' by 1 
    return True 

for k in original_list: 
    if isPrime(k): 
     prime_list.append(k) 

print prime_list