查找范围内的所有回文数字

时间:2013-05-06 23:34:49

标签: python python-3.x palindrome

我需要一些帮助:

写一个函数(main),它将要求用户输入一个起始和结束数字范围(包括)。使用while循环计算数字。只有在它是回文时才将数字加到总数中(调用isNumberPalindrome)。添加数字后打印总数。'

到目前为止,这个(主要)功能是......

def main():
start = int(input("Enter a number to start counting at:"))
end = int(input("Enter a number to end counting at:"))
while start <= end:
    print(start)
    start = start + 1

这是我对我的(isNumberPalindrome)函数所拥有的。

def isNumberPalindrome(s):
if len(s) < 1:
        return True
else:
    if s[0] == s[-1]:
        return isNumberPalindrome(s[1:-1])
    else:
        return False

到目前为止,我的(主要)功能要求用户输入(开始和结束编号)并使用while循环对它们进行计数。我不知道在我的代码中添加什么(主要)函数接下来实现“只有当它是回文时才将数字添加到总数中(调用isNumberPalindrome)。在添加数字后打印总数。”

感谢您的帮助。

到目前为止,提供给我的代码,这就是发生的事情。

Enter a number to start counting at:1
Enter a number to end counting at:6
1
Traceback (most recent call last):
File "C:/Users/Tyler/Desktop/AWDADXC.py", line 38, in <module>
main()
File "C:/Users/Tyler/Desktop/AWDADXC.py", line 33, in main
if isNumberPalindrome(start):
File "C:/Users/Tyler/Desktop/AWDADXC.py", line 18, in isNumberPalindrome
if len(s) < 1:
TypeError: object of type 'int' has no len()

有谁知道出了什么问题?

7 个答案:

答案 0 :(得分:1)

这是一个简单的尝试:

def isNumberPalindrome(n):
    return str(n) == str(n)[::-1]
filter(isNumberPalindrome, range(10,100))

输出:

[11, 22, 33, 44, 55, 66, 77, 88, 99]

总结它们只需将序列传递给sum(),如此:

sum(filter(isNumberPalindrome, range(10,100)))

输出:

495

如果您想要考虑用户输入,您可以这样做:

sum(filter(isNumberPalindrome, range(int(raw_input('Enter a starting number:')), int(raw_input('enter a stopping number:')))))

将产生以下输出:

Enter a starting number:10
enter a stopping number:100
495

答案 1 :(得分:1)

迭代从startend的所有整数:

for n in range(start, end + 1):
    print(n)

获取数字;你可以使用str(n)

def is_palindrom(number):
    digits = str(number)
    return digits == digits[::-1]

其中s[::-1]反向返回字符串s,例如"abc"[::-1] == "cba"

查找[start,end]范围内所有回文的总和:

total = sum(number for number in range(start, end + 1) if is_palindrom(number))

答案 2 :(得分:1)

您的代码存在的问题是您在整数上调用len。 您应该做的是在可迭代的地方调用len,例如liststring (如答案中公布的解决方案)。

例如,使用isNumberPalindrome的递归实现,

>>> isNumberPalindrome("123321")
True
>>> isNumberPalindrome("HelloolleH")
True
>>> isNumberPalindrome(str(123321))
True
>>> isNumberPalindrome([1,2,3,4,3,2,1])
True

除此之外,如果没有必要使用递归实现, 任何其他答案,应该做的工作。

答案 3 :(得分:0)

def main():
start = int(input("Enter a number to start counting at:"))
end = int(input("Enter a number to end counting at:"))
total = 0
while start <= end:
    print(start)
    if isNumberPalindrome(str(start)):
        total += start
    start = start + 1
print(total)

答案 4 :(得分:0)

你需要一个可以存储回文总和的变量。不只是调用if语句来检查数字是否为回文,如果是,则将数字添加到总数中,否则什么都不做。

PS:您可以使用另一个答案中提供的Juampi代码。

答案 5 :(得分:0)

您的问题是假设isNumberPalindrome的参数是str,但您传递的是int

在不转换为str的情况下检查回文很容易。例如

def isNumberPalindrome(n):  # n is an integer
    s = n
    t = 0
    while s:
        t = t*10 + s%10
        s /= 10
    return n == t

答案 6 :(得分:0)

JavaScript-解决方案。

使用输入数字指定范围


function findPalindromes(number) {

    let palindromeCount = 0;
    let leftSide = '';
    let rightSide = '';

    for (let i = 1; i <= number; i++) {

        let checkBox = [];
        let s = i.toString();

        for (let j = 0; j < s.length / 2; j++) {
            leftSide = s[j];
            rightSide = s[s.length - 1 - j];

            if (rightSide === leftSide) {
                checkBox.push('y');
            } else {
                checkBox.push('n');
            }
        }

        if (!checkBox.includes('n') && i > 10) {
            console.log(s);
            palindromeCount++;
        }
    }

    console.log(`TOTAL: ${palindromeCount} palindromes found`);
}

findPalindromes(1001);

See the result