2016-09-15 2 views
0

그래서이 코드를 가지고 있고 그 안에 모든 소수를 가진 튜플을 출력해야합니다. 대신 빈 터플을 출력하는 것입니다 ...allPrimes 빈 튜플을 인쇄합니다. Python

아무도 말해 줄 수 있습니까? 나는 또한 TUPLE을 사용해야합니다.

def isPrime(number): 
for i in range(2,int(number**(0.5))+1): 
    if number % i == 0: 
     return False 
    else: 
     return True 


def allPrimes(number): 
    tup=() 
    for i in range(1,number): 
     if isPrime(i) == True: 
      tup += (i,) 
    print(tup) 

allPrimes(26) 

은 여기 isPrime 기능이 작동하지 않습니다 때문입니다 올바른 코드

def isPrime(number): 
    if number < 2: 
     return False 
    for i in range(2, int(number ** (0.5)) + 1): 
     if number % i == 0: 
      return False 
    return True 



def allPrimes(number): 
    tup=() 
    for i in range(1,number): 
     if isPrime(i) == True: 
      tup += (i,) 
     print(tup) 

allPrimes(26) 
out[1]: (2, 3, 5, 7, 11, 13, 17, 19, 23) 
+0

방금 ​​일부 코드를 수정했지만 여전히 작동하지 않습니다. – drewteriyaki

+0

튜플을 사용해야하는데, 그것은 assactionment입니다. – drewteriyaki

+0

'list'를 사용하여 빌드하는 것이 좋습니다. 마지막에 '튜플 (tuple)'일지라도 '목록'을 작성한 다음 끝에 한 번만 '튜플'로 변환하는 것이 훨씬 빠릅니다. 그냥'ret = []'을 초기화하고,'tup + = (i,)'를'ret.append (i)'로 변경하고,'return' /'print' 할 때'print (tuple (ret)) '또는'return tuple (ret)'로 변환합니다. – ShadowRanger

답변

2

isPrime() 함수는 1부터 시작합니다. 모든 정수는 1로 나눌 수 있으므로 항상 False을 반환합니다. 대신 2시에 시작하십시오.

def isPrime(number): 
    if number < 2: 
     return False 
    for i in range(2, int(number ** (0.5)) + 1): 
     if number % i == 0: 
      return False 
    return True 

또한, 당신의 allPrimes 아마 튜플이 아닌 목록을 사용합니다, 당신은 단지 isPrime(i) 대신 isPrime(i) == True로 사용할 수 있지만, 그것이 방식으로 작동합니다.

3)이 아닌

1) isPrime에 반환 당신은 기능의 범위를 벗어난 tup를 인쇄 잘못된 라인

2)에 True :

+0

Not yet yet ... 이것은 1에 대해 True를 반환합니다. – wim

+0

방금 ​​변경했으나 3은 소수가 아닙니다. – drewteriyaki

+0

아니요. – kindall

1

에게 있습니다.

number % 1, 즉 '1로 나눌 때의 나머지'는 정수에 대해 항상 0이 될 것이다.

1

몇 가지 코드에 문제가 있습니다 1의 경우 (isPrime)

4) list은 내기를 내기 위해 tuple을 사용하고 있습니다. ter; 훨씬 더 효율적입니다.

5) Python에서 함수 이름에 snake case를 사용하십시오.

만들기 변경 :

def is_prime(number): 
    if number < 2: 
     return False 

    for i in range(2,int(number**(0.5))+1): 
     if number % i == 0: 
      return False 

    return True 

def all_primes(number): 
    my_primes = [] 
    for i in range(1,number): 
     if is_prime(i): 
      my_primes.append(i) 
    return my_primes 

if __name__ == "__main__": 
    print all_primes(40) 
+0

구현/논리적 오류와 좋은/Python 규칙 (1-4 및 5 점)을 구분할 것을 권하고 있으므로 OP가 혼란스럽지 않으므로 이름이 중요합니다. 하지만 어쩌면 나는 너무 까다 롭습니다 - 그 경우 미안 해요 ;-) – quapka

0

수는 소수 number % i != 0: 경우 첫 번째 반복에서, 당신은 반복의 끝에서 True을 반환해야 때문에 휴식이`경우 번호 %의 난 == 0 :

def isPrime(number): 
    res = True 
    if number < 2: 
     res = False 
    else: 
     for i in range(2,int(number**0.5)+1): 
      if number % i == 0: 
       res = False 
       break 
    return res 
+0

이것을 확인하십시오. – Zety

관련 문제