1

Python を使用して独自の素数と完全平方チェッカーを作成しようとしています。関数は、これが素数の場合は「Foo」を出力し、これが完全平方の場合は「Bar」を出力し、どちらでもない場合は「FooBar」を出力する必要があります。私のコードです:

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()

どういうわけか、まったく実行できません。誰かヒントを教えてください。

4

2 に答える 2

3

いくつかのこと。num1 つ目は、から1まで実行することtarget + 1です。num % 1は常に 0 であるため、素数を出力することはありません。

次に、反復間でフラグprimeとフラグをリセットしません。perfSqrまた、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')
于 2017-07-10T21:04:13.813 に答える
1

1) インデントがずれています。最初の for ループの内側にあるように、if ブロックをインデントしたいようです。

2) 最初の 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()
于 2017-07-10T21:05:44.223 に答える