计算python范围内的回文数量

时间:2013-03-24 03:33:41

标签: python for-loop python-3.x palindrome

我是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。有人可以帮帮我吗?谢谢!

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]])

我个人觉得它比循环计数器的变化更简洁/更容易理解。