0

我对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。谁能帮帮我?谢谢!

4

2 回答 2

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))
于 2013-03-24T03:37:03.993 回答
0

在您有机会增加计数器之前,您将返回到 for 循环中。您也不需要那个空的 '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]])

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

于 2013-03-24T03:50:21.693 回答