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