簡體   English   中英

Python中的質數和Perfect Square Checker

[英]Prime number and Perfect Square Checker in Python

我正在嘗試使用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()

無論如何,我根本無法運行它,任何人都可以給我一些提示嗎?

一些事情。 首先是您將num1運行到target + 1 num % 1始終為0,因此您永遠不會打印任何素數。

接下來,您將不會在perfSqr迭代中重置primeperfSqr標志。 另外,您需要在外部循環內移動打印語句,以便它們在每次迭代時都進行打印。

這按預期工作:

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

1)您的縮進已關閉-似乎您希望將if塊縮進,因此它位於第一個for循環內

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM