2017-07-10 2 views
0

私は自分の素数と完全な正方形のチェッカーをPythonを使って書こうとしています これは素数であれば 'Foo'を出力し、それはここでどちら が私のコードである場合には完全な方形、プリント「FooBarのは、」:何とか素数と完璧な正方形チェッカーPython

def FooBar(): 
    prime = True 
    perfSqr = False 
    for target in range(100,100001): 
     for num in range(1,target+1): 
      if target % num == 0 and num != target: 
       prime = False 

      if target // num == num and target % num == 0: 
       perfSqr = True 

    if prime is True: 
     print 'Foo' 
    elif perfSqr is True: 
     print 'Bar' 
    else: 
     print 'FooBar' 

if __name__ == '__main__': 
    FooBar() 

、私はそれがすべてで動作して取得することはできません、誰も私にいくつかのヒントを与えることができますか?

+2

範囲は1から始まり、ターゲット%のnumはあなたがすべてでどういう常に0 –

+0

ある?:何をしたいですか?あなたはメソッドを呼び出すことに失敗していますか?あなたの計算や 'if/else'sなしで' hello world'のような単純なものを手に入れることができますか? –

+0

すべてのロジックを1つの大きなモノリシック関数で壊さないでください。 '' is_prime(x) ''、 '' is_perfect_square(x) ''を機能させ、それらをシーケンスに適用します。 – Meitham

答えて

2

最初は、num1からtarget + 1に変更します。 num % 1は常に0なので、素数は決して印刷されません。

次に、primeperfSqrフラグを繰り返し設定しないでください。また、外側のループの内側でprintステートメントを移動する必要があるため、すべての繰り返しを印刷します。

これは期待通りに動作します:

def FooBar(): 
    for target in range(100, 100001): 
     prime = True 
     perfSqr = False 
     for num in range(2, target + 1): 
      if target % num == 0 and num != target : 
       prime = False 

      if target // num == num and target % num == 0: 
       perfSqr = True 

     if prime or perfSqr: 
      print(num, end=', ') 
      if prime: 
       print('Foo', end=', ') 
      elif perfSqr: 
       print('Bar', end=' ') 
      print('\n') 
+0

ありがとう、これは私が探していた答えです –

+0

@EdwardSun喜んで助けてください。 :) –

0

1)あなたのインデントは、あなたが望むように思えるオフである、それはあなたが行う)ループ

2のための第1の内側にあるので、ブロックをインデントする場合最初のforループの中でprimeとperfSqrをリセットしないので、一度設定されるとリセットされません。

3)内側のforループ範囲は1から始まり、2から始める必要があります。そうでない場合は、すべての数字がプライムになります。

は、これはあなたが

def FooBar(): 
for target in range(100,100001): 
    prime = True 
    perfSqr = False 
    for num in range(2,target+1): 
     if target % num == 0 and num != target: 
      prime = False 

     if target // num == num: 
      perfSqr = True 

    if prime is True: 
     print 'Foo' 
    elif perfSqr is True: 
     print 'Bar' 
    else: 
     print 'FooBar' 



if __name__ == '__main__': 
    FooBar() 
関連する問題