簡體   English   中英

Python:素數和inrange()

[英]Python: Prime numbers and the in range()

我正在學習python並正在研究此問題: Python-質數練習這是我的問題:當n = 2時,范圍將是(2,n),換句話說,范圍是2到2-1 = 1。

   for x in range(2, n):
      if n % x == 0:
        print("{} equals {} x {}".format(n, x, n // x))
        return False
   else:
      print(n, "is a prime number")
      return True

一種。 會是2%2嗎?

如果數字是偶數,它將打印

A等於B x C

條件為真時,循環會中斷嗎?還是會結束循環?

C。 循環之外的其他東西嗎? if語句對應什么? (我知道這是if n % x == 0: :),但是看起來好像在循環之外呢? 我試圖運行它,並且理解了,但是后來我感到困惑。

為了..否則混亂

您似乎對for循環中的else感到困惑。

您不是唯一的一個。

在Python中, for循環可能在else節的末尾,除非所有的break語句都在循環完成后執行。 是的,它不是很直觀。

因此,您應將else部分作為for循環的最后一部分閱讀。

def looptest(loops=5):
    for i in range(loops):
        print "i", i
        if i == 3:
            print "in if"
            return
    else:    
        print "in else of the loop"

並嘗試循環== 5:

>>> looptest(5)
i 0
i 1
i 2
i 3
in if

對於循環2的數量,我們不期望返回,我們將遍歷循環的else部分:

>>> looptest(2)
i 0
i 1
in else of the loop

注意, return必須在函數內,嘗試在控制台上返回將導致錯誤。

范圍(2,2)== []

在Python控制台上嘗試:

>>> range(2, 2)
[]

返回

return結束當前功能或在整個模塊中運行。 因此, return后,將不會再執行代碼同一部分中的其他代碼(特有tryfinally ,context manager等例外,但這與您的代碼無關)。

一種。 No. range(2,2)在Python中是一個空集。

條件為真時,包含循環的函數將返回,並且循環不會結束。 這是因為return調用比if語句低一級。

C。 我很確定您希望elsefor相對應。 Python擁有此for ... else語法,如果for循環正常終止(即,不帶break ),則執行else子句的內容。

換句話說,我想你要這樣:

for x in range(2, n):
        if n % x == 0:
            print("{} equals {} x {}".format(n, x, n // x))
            return False
else:
     print(n, "is a prime number")
     return True

編輯:

當然,我可以解釋整個循環。 這個想法是這樣的:對於介於2和n之間的每個數字,檢查該數字是否為x的因數。 如果是,則n不是質數,我們終止循環。 但是,如果一直進行到循環結束,就知道n是質數,因為它在2到n之間沒有因數。 然后,else子句插入,並打印該數字為素數。

看一下這個函數:

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

遍歷每個可能的選項不一定是最好的選擇。 請記住,范圍永遠不會超過數字的平方根。

同樣值得注意的是,您的輸出將僅顯示第一組因子。

暫無
暫無

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

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