2017-09-23 74 views
-1

这是一个程序,接受一串单词并检查单词是否是回文,如果它是一个,它会打印它。但是,如果一个字符串中有一个空格,我的程序将不会将其视为回文(例如:护士运行)。当它考虑回文时,我应该增加什么来使程序排除空间?回文:一个单词,短语或序列,与向前一样向后读取,例如, “夫人”或“护士运行”回文计划中的会计空间

import sys 

strings = [] 
for s in sys.argv[1:]: 
    strings += [s] 

def is_palindrome(word): 
    if len(word) <= 2 and word[0] == word[-1]: 
     return True 
    elif word[0] == word[-1]: 
     is_palindrome(word[1:-1]) 
     return True 
    else: 
     return False 


def printpalindromes(strings): 
    for s in strings: 
     if is_palindrome(s) == True: 
      print(s) 

printpalindromes(strings) 
+1

如果有的话,你不是'返回'递归调用的结果。 –

+0

@MosesKoledoye修复。你可以检查新的编辑? –

回答

1

尝试做回文检查

>>> x = "nurses run" 
>>> x.replace(" ", "") 
'nursesrun' 
0

你的代码仍然在elif的语句之前不正确剥出的空格。你已经添加了return True,如果你真的应该像前面提到的那样从递归调用中返回响应。

def is_palindrome(word): 
    if len(word) <= 2 and word[0] == word[-1]: 
     return True 
    elif word[0] == word[-1]: 
     return is_palindrome(word[1:-1]) 
    else: 
     return False 
0

这是你的问题的一个简单的解决方案:

import sys 

sys.argv = [" nurses   ", "  run  "] 
word = "".join([s.strip() for s in sys.argv]) 
print("{} {} palindrome".format(word, "is" if word == word[::-1] else "is not")) 

,或者你可以创建了这个词sys.argv中的是这样的:

word = "".join(sys.argv).replace(" ","") 
+0

在join()中不需要'[]',它可以很好地处理生成器表达式。它也保存了记忆。 – mentalita

1

您可以使用reversed

def palindrome(word): 
    if ' ' in word: 
     word = word.replace(' ', '') 
    palindrome = reversed(word) 
    for letter, rev_letter in zip(word, palindrome): 
     if letter != rev_letter: 
      return 'Not Palindrome' 
    return 'Palindrome'