2017-09-23 6 views
-1

これは単語の文字列を受け取り、その単語が回文であるかどうかを調べ、それが1であればそれを印刷するプログラムです。しかし、文字列にスペースがある場合、私のプログラムはそれを回文としてカウントしません(例:看護師が走る)。私は、プログラムがスペースを除外するように追加するにはどうすればよいのですか?palindromeプログラム内の会計スペース

パリンドローム:前方と同じ後方を読み取る単語、フレーズ、またはシーケンス。 「マダム」や「看護師実行」

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'