2017-11-28 7 views
0

2つの文字列の小文字のバージョンが同じ場合はtrueを返し、それ以外の場合はfalseを返す関数を書いてみたいと思います。すなわち:2つの文字列の小文字バージョンを比較し、 'None'入力を扱う関数を書く

def strcmp_lowercase(s1, s2) 
    return s1.lower() == s2.lower() 

はしかし、私は、この関数はNoneType文字列の代わりにはあり、両方の入力がNoneです場合にtrueを返すように入力を受け取るに対処できるようにしたいと思います。 NoneTypeのオブジェクトが.lower()メソッドを持たないように上記関数を用いて、これはここ

AttributeError: 'NoneType' object has no attribute 'lower' 

は、一つの可能​​な解決策は、これは偉大なようには思えない、

def strcmp_lowercase(s1, s2) 
    s1_lower = s1.lower() if s1 else None 
    s2_lower = s2.lower() if s2 else None 

    return s1_lower == s2_lower 

で、エラーが発生しそれを行う方法は、よりエレガントな方法はありますか?ありがとう!

+0

'S1、S2 = S1または"?これはあなたの入力を文字列に変換し、残りの関数は正常に動作します。欠点は、 '' ''が 'None'にマッチすることです。 – kindall

+0

どうやって 'strcmp_lowercase'を呼んでいるのですか?' None'を比較しようとしているのですか? '文字列が与えられていない場合はどうすればいいですか? ' - > '例外'を使用する – user1767754

+0

@ user1767754はいこの関数をクラス変数の比較に使用するつもりですが、文字列でも可能ですが、Noneでも可能です – LoLa

答えて

1

isinstanceを使用して入力のタイプを確認できます。

def strcmp_lowercase(s1, s2): 
    if isinstance(s1, str) and isinstance(s2, str): 
     return s1.lower()==s2.lower() 
    elif s1 is None and s2 is None: 
     return True 
    return False 
1

これはもう少し慣用句である:多分 ` " "S2、または"

def strcmp_lowercase(s1, s2): 
    if s1: s1 = s1.lower() 
    if s2: s2 = s2.lower() 
    return s1 == s2 
+0

'if'文を1行にまとめることは、Pythonではほとんど慣用的ではありません。 – chepner

+0

私はそれが、質問で与えられた可能な機能よりもやや慣れて簡潔であると言いました。私は 'if'文を1行にまとめることは許容され、はっきりと読めると感じています。 –

関連する問題