2016-11-21 7 views
0

クラスの練習として、いくつかの関数を書いてから、もう一方に統合する必要があります。これまでの2つの関数を書いています。その整数がうるう年かどうか、そして整数y(年)と整数n(月)をとり、その月に何日いるかを伝える別のものかどうかを教えてください。私がしたいのは、最初の関数を2番目の関数に統合することで、うるう年に2月を入力すると、29日間ということになります。1つの関数を別の関数に統合する方法

これまでに書いたコードは次のとおりです。

def isLeapYear(y): 
    if y % 400 == 0: 
     return True 
    if y % 100 == 0: 
     return False 
    if y % 4 == 0: 
     return True 
    else: 
     return False 

def daysIn (y,n): 
    import sys 

    d = int(0) 
    months = ["Notuary", "January", "Febuary", "March", "April", "May",  "June", "July", "August", "September", 
       "October", "November", "December"] 

    if n == 0: 
     print("This is a fake month") 
     sys.exit() 

    if n == 1 or n == 3 or n == 5 or n == 7 or n == 8 or n == 10 or n == 12: 
     d = 31 

    if n == 2 and (y % 4 != 0): 
     d = 28 

    if n == 2 and (y % 4 == 0): 
     print("Febuary has 29 days this year as it is a leap year") 
     sys.exit() 

    if n == 4 or n == 6 or n == 9 or n == 11: 
     d = 30 

    print(months[n], "has", d, "days in it") 

任意の助けいただければ幸いです!

+0

FWIW、あなたの 'daysIn'機能は、あなたの月の長さのテストでセットまたはリストを使用して、より多くのコンパクト化を図ることができ、私はあなたがまだそれらについて学んできない可能性がありますね。しかし、関数の先頭の近くにある 'd = int(0)'はちょっと意味がありません。ゼロを整数に変換する必要はありません。これは整数であるため、 'd = 0'だけできます。また、関数内に 'import'文を置くことは珍しいことです。あなたのスクリプトの一番上に置いてください –

答えて

0

daysIn機能から28日または29日を返すかどうかを決定するには、isLeapYear関数を使用する必要があります。

if n == 2: 
    if isLeapYear(y): 
     print("It's a leap year!") 
     d = 29 
    else 
     d = 28 
0

Pythonでこの

import sys 
def isLeapYear(y): 
    if y % 400 == 0: 
     return True 
    if y % 100 == 0: 
     return False 
    if y % 4 == 0: 
     return True 
    else: 
     return False 
def daysIn (y,n, func): 
    d = int(0) 
    months = ["Notuary", "January", "Febuary", "March", "April",  "May","June", "July", "August", "September","October", "November", "December"] 
    if n == 0: 
     print("This is a fake month") 
     sys.exit() 
    if n == 1 or n == 3 or n == 5 or n == 7 or n == 8 or n == 10 or n == 12: 
     d = 31 
    if n == 2 and func(y): 
     d = 28 
    if n == 2 and func(y): 
     print("Febuary has 29 days this year as it is a leap year") 
     sys.exit() 
    if n == 4 or n == 6 or n == 9 or n == 11: 
     d = 30 
    print(months[n], "has", d, "days in it") 
daysIn(1996, 2, isLeapYear) 

を試してみてください、この関数は、オブジェクトです。したがって、それをパラメータとして別の関数に渡すことができます。

+1

これはこれを書くのに非常に混乱する方法です。 – erip

+0

申し訳ありません私はあなたが意味するものを立っていません。あなたはインデントエラーを意味しますか? –

+1

私はすべてを意味します。 – erip

0

もう一方の内部から関数を呼び出すだけです。例えば

def daysIn (y,n): 
    import sys 

    isleap = isLeapYear(y) 

    # SNIP 

    print(months[n], "has", d, "days in it") 
    print("Is {} a leap year? {}".format(y, isleap)) 
関連する問題