2016-11-01 12 views
0

文字列中のアルファベット以外の文字をすべて無視してアルファベット文字列を新しい文字列に追加しようとするので、大文字と小文字を区別せずに回文かどうかを調べることができます。forループを使用して、文字列内のアルファベット以外の文字をすべて無視し、新しい文字列に追加する方法? Python 3

は、これまでのところ、私は私がis_palindromeは小文字の単語が回文であるかどうかを確認する前の関数を呼び出していますプロム

new_str = '' 
for ch in s: 
    ch = ch.lower 
    if s.isalpha(): 
     s = s + new_str 

return s == is_palindrome 

を持っています。ここで

s = 'A man, a plan, a canal: Panama!' 
scrunched_s = ''.join(ch.lower() for ch in s if ch.isalpha()) 
reversed_s = ''.join(ch.lower() for ch in s[::-1] if ch.isalpha()) 
print s 
print scrunched_s 
print reversed_s 
print scrunched_s == reversed_s 

は別です::

scrunched_s = map(str.lower, filter(str.isalpha, s)) 
reversed_s = map(str.lower, filter(str.isalpha, reversed(s))) 
print scrunched_s == reversed_s 
+1

'string.ascii_letters' - ' '' .join(s内の文字のための文字string.ascii_lettersのchar場合) .lower() 'これはascii_lettersである文字だけの小文字の文字列を返します。 – sytech

+1

'is_palindrome()'はまったく呼び出さず、最後の行は 's'(文字列)が' is_palindrome'(関数)と等しいかどうかを確認します – nephtes

+2

あなたの質問は何ですか? –

答えて

3

で複数の問題があります は、すべてのヘルプは大幅にあなたの文字列から非アルファのすべてをドロップする一つの方法です。ここ

+0

一歩一歩進んでいただきありがとうございます!あなたの説明は素晴らしいです – Stackstack

0

をいただければ幸いですあなたのコード。のは、それらを1つずつを行こう:

  1. ch = ch.lower

    関数やメソッドを呼び出すためには、あなたが実際にその関数/メソッドを呼び出すためのPythonを伝えるために、関数名の後の括弧()を使用する必要があります。ここでは、ファンクションchへの参照をに割り当てます。したがって、chはその後の文字ではありません。あなたがしたいのは、ch = ch.lower()です。

  2. if s.isalpha():

    この検査は、しかしsはあなたがそこに何を意味するかはおそらくありませんが、一般的に大丈夫です。 sはフルストリングですが、chは現在の文字です。おそらくif ch.isalpha()を意味します。

  3. ​​

    ここでも、sはあなたを介して反復されている文字完全な文字列です。おそらく、ここにsに何かを追加するつもりはありませんでした。おそらく、異なる変数にいくつかの結果を集めたいと思うでしょう。

    new_strは空の文字列''に初期化され、変更されないため、空の文字列を文字列sに追加します(何もしません)。

    おそらく何行うためのものnew_strを変更し、以前の条件が真だった場合文字を追加します:new_str = new_str + ch前と同じ

  4. return s == is_palindrome

    、関数を呼び出すために、かっこを使用する必要があります。それ以外の場合は、sという文字列をここでis_palindrome関数と比較します(これは当てはまりません)。

    さらに、sは入力文字列です(ループ全体で誤って変更したのですか?)。あなたはおそらくここでnew_strをチェックすることを意味しました。

    最後に、is_palindromeはおそらく文字列を入力として受け取り、その文字列が回文かどうかを返します。とにかくその結果を文字列と比較したくないのです。

完全なコードは、おそらく修正した後、次のようになります。

new_str = '' 
for ch in s: 
    ch = ch.lower() 
    if ch.isalpha(): 
     new_str = new_str + ch 

return is_palindrome(new_str) 
+0

'scrunched_s'に組み込みの' reversed'関数を使用してみませんか? – sytech

+0

@sytech - ほとんど透明です。ジェネレータの式やリストの理解を作成する場合は、インデックス作成操作を使用します。私が関数表記を使用している場合、私は2番目の例のように 'reversed'を使います。 –

+0

私は本当に2番目の例がPythonのアンチパターンだと思います。 2番目は、 'reversed_s = scunched_s [:: - 1]'と書いてみるのがはっきりしています – brianpck

関連する問題