2013-05-06 2 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 

До сих пор моя (основная) функция запрашивает ввод пользователя (начальный и конечные номера) и подсчитывает их с помощью цикла. Я понятия не имею, что добавить к моему коду для (основной) функции рядом с достижением «Добавить число в общее число, только если это палиндром (вызов 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

ответ

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

+0

Я не удалял печать цифр, потому что я думал, что вы специально это сделали. Тем не менее, я не получаю бесконечный цикл с этим кодом. Я бы рекомендовал вам проверить ваш отступ. – Juampi

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

Для перебора всех целых чисел от start до end включительно:

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 на целое число. Что вам нужно сделать, так это позвонить len на истребителе, например. list или string (как в решениях, размещенных в ответах).

Например, и с помощью рекурсивной реализации isNumberPalindrome,

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

Кроме этого, если нет необходимости использовать рекурсивную реализацию, любой из других ответов, должны делать свою работу.

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