2016-09-15 5 views
0

このコードを持っていて、その中にすべての素数を入れたタプルを印刷することになっています。しかし代わりに、それは空のタプルを印刷しているだけです...allPrimes空のタプルを印刷します。Python

誰かが私にその理由を教えてもらえますか? 私もタプルを使用する必要があります。ここで

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'を使うのが普通です。最後に 'タプル'でなければならない場合でも、 'list'をビルドして、最後に一度' tuple'に変換する方が、新しい 'tuple'を1つ長く生成する方がずっと速いです。 '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) == Trueするのではなく、単にisPrime(i)を使用することができますが、それはそれがあるように動作します。

+0

まだ正解ではありません...これは1に対してTrueを返します – wim

+0

私はちょうど変更を加えましたが、3は素数ではないと言います – drewteriyaki

+0

いいえ、それはありません。 – kindall

1

です。

number % 1、つまり '1で除算したときの剰余'は常に整数でゼロになります。

1

あなたのコード内のいくつかの問題があります

1)isPrimeリターンでは、あなたは、関数スコープ

3の外tupを印刷している)間違ったライン上のTrue

2)あなたはありません1の場合(isPrime

4)tupleを使用して素数を格納する場合、listはベットされていますter;はるかに効率的です。

5)Pythonで関数名にsnake caseを使用します。 number % i != 0:数が素数である場合、あなたは `番号%のi == 0の場合、反復の終了時にブレークをTrueを返す必要があるため、最初の反復で

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

:変更を加える

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

関連する問題