簡體   English   中英

While循環具有多個條件。 蟒蛇

[英]While loops with multiple condtions. Python

我正在編寫一個函數,給定一個隨機整數,該函數將返回既是質數又是回文的下一個整數。 即getint(13)將返回101。此函數的條件之一是不允許遞歸。

我在哪里錯了?

def golf(number):
    x = number +1
    for i in range(2, x):
        while str(x) != str(x)[::-1] and  x % i == 0:
            x += 1
    return x

您的for循環只會達到x的初始值: range(2,x)僅在x = number + 1之后才計算一次。 因此,在循環增加x不會造成任何影響。 考慮使用while循環,例如:

i = 2
while i <= x:
    ...
    i += 1

您可能應該首先檢查x是否是回文(“便宜”操作),然后檢查是否是主要天氣(“昂貴”操作),而不要嘗試通過幾個嵌套循環來完成毫無意義。

將問題分為幾個小部分。 您將更容易了解正在發生的事情:

def golf(number):
    x = number + 1
    while True:
        if is_palindrome(x) and is_prime(x):
            return x
        x += 1

現在您要做的就是實現is_palindrome(x)is_prime(x)

import math

def is_prime(x):
    for i in xrange(2, math.ceil(math.sqrt(x))+1):
        if x % i == 0:
            return False
    return True

def is_palindrome(x):
    x = str(x)
    return x == x[::-1]

旁注math.ceil(math.sqrt(x))+1可能是一個過大的殺傷力(也許int(...)+1足夠了),如果math.sqrt對於正方形可以正常工作(即不依賴於浮點數)計算,因此math.sqrt(a*a)==a始終為true)。 在最壞的情況下,循環將再執行一次必要的迭代。 更好的安全后悔。

在您的代碼中:

def golf(number):
    x = number +1
    for i in range(2, x):
        while str(x) != str(x)[::-1] and  x % i == 0:
            x += 1
    return x

程序執行將不能滿足while循環一半的時間,因為任何偶數都不能被任何奇數整除, 反之亦然 同樣在for循環的單次迭代中,每當while循環滿足時, x就會增加。

您需要將主要檢查和回文檢查分開。 怪異的方法是最簡單的。

暫無
暫無

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

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