2013-11-27 2 views
0

My except не будет печатать, когда len(line.strip()) == d получает None.Pindon Palindrome Попробуйте и за исключением печати

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

def fileInput(filename): 
    palindromes = False 
    fh = open(filename, "r") 
    length = input("Enter length of palindromes:") 
    d = int(length) 
    try: 
     for line in fh: 
      for s in str(len(line)): 
       if isPalindrome(line.strip()): 
        palindromes = True 
        if (len(line.strip()) == d): 
         print(line.strip()) 
    except: 
     print("No palindromes found for length entered.") 
    finally: 
     fh.close() 
+0

Можете ли вы изменить свой код, чтобы сделать его более читаемым? Попробуйте использовать кнопку «код» в текстовом редакторе – duhaime

+0

Можете ли вы показать, как выглядит файл? – aIKid

+0

http://pastebin.com/MMnBErDB – user3040301

ответ

2

Ваш код не удается, потому что ваше исключение не единственное место, где несуществование d длины палиндромов в входном файле принимает вас.
Вы также должны проверить значение palindromes.

Так, в конце вашего примерки блока, добавьте строку, которая печатает "no palindromes found", например, так:

def fileInput(filename): 
    palindromes = False 
    # more code 
    try: 
    # more code 
    if not palindromes: 
     print("No palindromes found for length entered.") 
    except: 
    print("No palindromes found for length entered.") 
    finally: 
    # more code 

Кстати, я бы очистить вашу функцию следующим образом:

def isPalindrome(word): 
    if not len(word): # is the same as len(word) == 0 
    return True 
    elif word[0] == word[-1]: # no need for overly nested if-else-blocks 
    return isPalindrome(word[1:-1]) 
    else: 
    return False 

def fileInput(filename): 
    palindromes = False 
    d = int(input("Enter length of palindromes:")) 
    with open(filename) as fh: # defaults to "r" mode. Also, takes care of closing the file for you 
    for line in fh: 
     word = line.strip() 
     if isPalindrome(word) and len(word) == d: # note that you didn't have the len(word)==d check before. Without that, you don't check for the length of the palindrome 
     palindromes = True 
     print(word) 
    if not palindromes: 
     print("No palindromes found for length entered.") 
+0

Это сработало просто отлично, за исключением того, что я получаю unконечный список «Нет палиндромов, найденных для введенной длины». когда я просто хочу, чтобы он был напечатан один раз – user3040301

+0

@ user3040301: Я подозреваю, что вы можете смешивать вкладки и пробелы. Попробуйте исправить отступ вашего кода и запустить его снова. Этот код не должен печатать несколько раз – inspectorG4dget

Смежные вопросы