[英]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.