2016-09-03 8 views
0

私は入力が4で割り切れる場合はtrueを返す方法を把握しようとしていますが、いない100はまた、400で私が失敗した試みた場合を除き:Pythonの場合はtrue * *ない限り

def is_leap(year): 
    leap = False 

    if [year % 100 == 0 if not year % 400]: 
     leap = False 
    else: 
     if leap % 4 == 0: 
      leap = True 
    return leap 

入力の2100は4と100では割り切れますが、400では割り切れないので、Falseを返すようにします。

私は

def is_leap(year): 
    leap = False 

    if year % 4 == 0 and year % 400 == 0: 
     leap = True 
    elif year % 4 == 0 and year % 100 != 0: 
     leap = True 
    return leap 

の簡単な結論に達しましたが、しない限り、行うには簡単にまたは別の方法はありますか?ありがとうございました。

また、私は主にpython3.5に向けて、誰もがやっていることに傾いていますが、私は2.7のシンプルさを楽しんでいます。いずれかのいずれかの助けをいただければ幸いです。

+2

これは学習の練習であり、[calendar.isleap](https://docs.python.org/ 2/library/calendar.html#calendar.isleap)? –

+0

「年%4 == 0、年%400 == 0、年%100!= 0」の場合はどうでしょうか? –

+2

'[...]'はPythonでは有効なグループ化構文ではありません。リストオブジェクトを作成します。式の中で 'if'は常に' else'を必要としますが、とにかくif.. else ..式を使うべきではありません。代わりの値を生成しようとはしていません。 –

答えて

5

私はちょうどcalendar.isleapはそれをしない方法を指摘します:

return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) 
+0

私の答えはこれより好きです。 –

+0

ありがとう。なぜこれがうまくいったのか、私の心を掴むのに一分かかりましたが、今は理にかなっています。 – Stray

-2

個人的に私はそれが好きで記述します。

def is_leap(year): 
    if year % 4 == 0 and year % 400 == 0: return True 
    elif year % 4 == 0 and year % 100 != 0: return True 
    else:         return False 

そして、私はそれをはるかに簡単になるとは思わない:)

+0

それは実際にはあります:) –

+0

'year%4 == 0'という条件を2回繰り返す必要はありません。 – Makoto

+0

行が少なくなるわけではありません。私は、400が不正行為として4で割り切れるという事実を使用していると思います。P –

-2
if year % 4 == 0: 
    if year % 100 == 0 and year % 400 == 0: 
     # True 
# False 

その要点は、4で割り切れる必要があるという基本条件を処理してから、もう1つを処理することですいくつかの条件付きのもの。 2番目のif文は、100と400の両方で割り切れることを保証します

+0

downvotersがdownvotingの理由を説明していますか? – smac89

関連する問題