在Python中计算范围内的回文数数量
我对Python还不是很熟悉。我想要让Python在一个特定的数字范围内查找所有的回文数,并告诉我这些回文数的总数量(而不是它们的和)。也就是说,它会计算这个范围内所有的整数,并把结果以一个数字的形式返回给我。
但是我总是遇到无效语法错误,我不知道该怎么改。到目前为止,我写的代码是:
import math
def ispal(n):
return str(n) == str(n)[::-1]
不过这基本上就是我们在课堂上做的内容。
我的数字范围是从171到115000,我想要遍历这两个数字之间的所有数字,包括这两个数字,并让Python告诉我有多少个数字是回文数。问题是我不知道怎么把for循环放进去。
我开始写的是:
def count_pal(n):
count = 0
for i in range(n):
if i = str(n) == str(n)[::-1]:
return:
count =+ i
else:
pass
但我不知道怎么把这两部分结合起来。我使用的是Python 3.2。有没有人能帮帮我?谢谢!
2 个回答
0
你在循环里提前返回了,这样就没机会增加计数器的值了。
另外,你也不需要那个空的 'else: pass' 语句,因为它没有任何作用。
一个正确的做法是在循环结束后再返回计数器的值。
像这样就可以了:
count = 0
for i in range(171, 115000):
if str(i) == str(i)[::-1]:
count += 1
return count
注意一些风格上的改动: - 使用4个空格缩进 - 不要多余的空行 - 不要把 i 从 'True/False' 强制转换成数字(在你的代码中,i = str(i) == str(i)[::-1] 这样做会得到这样的结果)
虽然这和你问的问题不完全相关,但遵循 Python 的常规风格会让你的代码更易读,也更容易让别人理解和帮助你。
最后,作为额外的小提示,你也可以用列表推导式来完成这个任务:
sum([1 for i in range(171, 115000) if str(i) == str(i)[::-1]])
我个人觉得这种写法比用计数器的循环更简洁、更容易理解。
2
def num_palindromes(start, end):
count = 0
for i in range(start, end + 1):
if str(i) == str(i)[::-1]:
count += 1
return count
def num_palindromes(start, end):
return sum(str(i) == str(i)[::-1] for i in range(start, end + 1))
或者可以用一行代码来实现