【发布时间】:2014-05-26 17:50:08
【问题描述】:
我的任务是这样的:
在 base-2(二进制)和 base-10(十进制)中唯一(两位数或以上)回文的素数是什么 实例?
每当我运行这段代码时,什么都没有发生,它就像一个无限循环。我做错了什么,或者我该如何改进? 非常感谢。
def isPrime(n):
if type(n) != int or n <= 1:
return False
elif n == 2:
return True
elif n%2 == 0:
return False
else:
for x in range(2, int(n**0.5)+1):
if n%x == 0:
return False
break
return True
def isPalindrome(x):
num = str(x)[::-1]
if str(x) == num:
return True
else:
return False
while True:
a = 11
if isPrime(a) and isPalindrome(a) == True:
if isPalindrome(bin(a)) == True:
print a
break
else:
a+=2
print a
--------- 编辑:**已解决** ---------
修改后的代码:
def isPrime(n):
if n < 2 or n%2 == 0:
return False
if n == 2:
return True
else:
for x in range(3, int(n**0.5)+1, 2):
if n%x == 0:
return False
return True
def isPalindrome(x):
num = str(x)[::-1]
return str(x) == num
a = 11
while True:
if isPrime(a) and isPalindrome(a) and isPalindrome(format(a, "b")):
print a
break
a+=2
感谢所有提供答案的人。
【问题讨论】:
-
return后面的break是多余的,因为return 已经返回函数值并且for 完成 -
是打印“a”的值还是根本没有输出?
-
不相关,来自PEP 8:使用
isinstance(obj, int)来检查obj是否为整数并删除== True。 -
额头拍打从来没有想过这个。谢谢! @RubenBermudez
-
我相信它应该在 while 循环中通过两个 if 语句后打印“a”。即使没有通过,它也应该打印“a”,所以我可以看到它的进度。 @Sirac