2013-05-06 163 views
0

内的所有回文数我需要一些帮助,下面:查找范围

写一个函数(主),它会要求用户输入开始和结束号码范围(含)。使用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循环对它们进行计数。我不知道要添加到我的代码中(main)函数旁边来实现“只在回文中添加数字(调用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() 

有谁知道什么是错的?

+0

您应该正确缩进这两个函数的内容。 – fgb 2013-05-06 23:38:03

回答

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) 
+0

因此,使用您的代码我得到的始发号码打印在无限循环,而不是只得到回文。 – user2356052 2013-05-07 00:12:06

+0

我没有删除数字的打印,因为我认为你是故意的。但是,我没有得到这个代码的无限循环。我建议你检查一下你的缩进。 – Juampi 2013-05-07 00:14:16

0

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

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

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

要所有整数遍历从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"

要查找所有回文的总和范围在[开始,结束]包括:

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

与您的代码的问题是,你是在一个整数调用len。 你应该做的是在一个可迭代的例如电话号码上拨打lenliststring (如在答案中发布的解决方案中)。

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

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

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

0

你的问题是假设参数isNumberPalindromestr,但你传递一个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