4

2つの文字列を比較し、大文字以外の大文字と小文字を区別する条件で一致が見つかった場合に文字列を返すコードを作成しようとしています。これは私が書いた関数であり、==は大文字と小文字を区別して比較するのに非常に適していることを学びました。ただし、予期されていない最後のテスト行に対して1月を出力します。だから私を助けてくれませんか?

  months = ['January',
      'February',
      'March',
      'April',
      'May',
      'June',
      'July',
      'August',
      'September',
      'October',
      'November',
      'December']

  def valid_month(month):
     for x in months:
         if x==month.capitalize() :
             print x

テストコード:

  valid_month("january")  
  valid_month("January")
  valid_month("foo") 
  valid_month("") 
  valid_month("jaNuary")
4

3 に答える 3

5

これはどう:

def valid_month(month):
    for x in months:
        if x[1:] == month[1:] and x[0].capitalize() == month[0].capitalize():
            print x

これにより、大文字と小文字の区別が等しいかどうかがテストされます(最初の文字を除く)。

于 2012-09-10T22:43:17.930 に答える
3

それ"janUAry".capitalize()は等しいからです"January"

In [4]: "January"=="janUAry".capitalize()
Out[4]: True

コードのより良いバージョンは次のとおりです。

def valid_month(month):
     if month and month[0].capitalize()+month[1:] in months:
         print(month)
     else:
         print(month,"is not found")

出力:

>>> valid_month("january")
january
>>> valid_month("January")
January
>>> valid_month("foo")
foo is not found
>>> valid_month("")
 is not found
>>> valid_month("jaNuary")
jaNuary is not found
于 2012-09-10T22:41:20.677 に答える
2

capitalize文字列を小文字に変換しますが、最初の文字は大文字になります。だから、に"jaNuary".capitalize()なり"January"、あなたのテストは正しいです。

明らかに、それは正しいアプローチではありません。最初の文字以外の文字が大文字であるかどうかを確認できます。

any(t.isupper() for t in month[1:])

その場合は失敗します。

于 2012-09-10T22:40:09.197 に答える