我是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
但我不知道如何把2放在一起。我有python 3.2。有人可以帮帮我吗?谢谢!
答案 0 :(得分: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))
答案 1 :(得分:0)
在你有机会增加计数器之前,你将在for循环内返回 你也不需要那个空的'else:pass'块,因为它什么都不做。
正确的解决方案将在循环终止后返回函数末尾的计数器。
这样的事情会起作用:
count = 0
for i in range(171, 115000):
if str(i) == str(i)[::-1]:
count += 1
return count
注意一些样式更改: - 4空间压痕 - 没有多余的换行符 - 没有不必要的强制我从'真/假'到一个数字(这是你在你的代码中得到的i = str(i)== str(i)[:: - 1])
与您的问题没有直接关系,但遵循python传统风格将有助于让您的代码更易读,更容易让其他人理解和帮助您。
最后,就像n额外的花絮一样,你也可以用列表理解来完成这个任务:
sum([1 for i in range(171, 115000) if str(i) == str(i)[::-1]])
我个人觉得它比循环计数器的变化更简洁/更容易理解。