0

ユーザーが月を入力し、プログラムがその月に何日あるかを表示するプログラムを作成する必要があるという割り当てに本当に行き詰まっているため、最近このサイトにサインアップしました。ユーザーは、ユーザーが 2 月を入力した場合にうるう年かどうかをプログラムが確認できるように、年も入力する必要があります。

これは私がこれまでに思いついたコーディングです:

    def get_year():
    year = raw_input("Please enter the year: ")
    return year

def get_month():
    month = raw_input("Please enter the month: ")
    return month

def leap_year(year):
    if year % 4 == 0:
        return true
    else:
        return false

def get_days(month):
    if month == "january":
        print "31 days"
    elif month == "february" and leap_year == true:
        print "29 days"
    else:
        print "28 days"
    if month == "march":
        print "31 days"
    elif month == "april":
        print "30 days"
    elif month == "may":
        print "31 days"
    elif month == "june":
        print "30 days"
    elif month == "july":
        print "31 days"
    elif month == "august":
        print "31 days"
    elif month == "september":
        print "30 days"
    elif month == "october":
        print "31 days"
    elif month == "november":
        print "30 days"
    elif month == "december":
        print "31 days"
    else:
        print

def main():
    user_year = get_year()
    user_month = get_month()
    leap_year(user_year)
    get_days(user_month)

main()

とにかく、get_days 関数にエラーがあることは明らかです。ユーザーが 1 月や 3 月などの月を入力したことをプログラムが認識できるように、コードを記述する方法がわかりません。入力は変数である必要があり、各月は文字列であるため、変数文字列が必要であると推測しています。しかし、私はこれについて完全に間違っている可能性があります。

私はPythonに非常に慣れていないので(学校の仕事のためにプログラミングをオフにしてからちょうど2週間)、Pythonプログラミングの詳細の多くについてあまり確信が持てないので、誰かが私を適切な方向に支援できるなら、それはとても有難い!

4

5 に答える 5

0

Python の組み込みデータ型である辞書を使用することをお勧めします。

def get_days(year, month):
    """
    take year and month ,return the days in that month.
    """
    #define a dictionary and the month is key which value is days 
    daydict = dict()    
    daydict = ['january'=31, 'february'=28, 'februaryinleapyear'=29,
                                        'march'=31, 'april'=30,
                                        'may'=31, 'june'=30,
                                        'july'=31, 'august'=31,
                                        'september'=30, 'october'=31,
                                        'november'=30, 'december'=31 ]

    try:
        if month in daydict:
            if month == 'february' and leap_year(year):     
                print daydict[februaryinleapyear] 
            else:
                print daydict[month]
        else:
            print 'The year or month you input is invalid !'
    except:
        print 'error!'
于 2012-05-08T05:39:34.260 に答える
0

if-elif は 2 月に壊れていました。マイナーな変更は、if-elif ロジックの中断のないパターンを継続することです。

def get_days(month):
    if month == "january":
        print "31 days"
    elif month == "february" and leap_year:
        print "29 days"
    elif month == "february" and not leap_year:
        print "28 days"
    elif month == "march":
        print "31 days"
    elif month == "april":
        print "30 days"
    elif month == "may":
        print "31 days"
    elif month == "june":
        print "30 days"
    elif month == "july":
        print "31 days"
    elif month == "august":
        print "31 days"
    elif month == "september":
        print "30 days"
    elif month == "october":
        print "31 days"
    elif month == "november":
        print "30 days"
    elif month == "december":
        print "31 days"
    else:
        print 'unknown month'
于 2012-05-08T05:10:14.353 に答える
0

あなたはちょっと近かった。私はコメントしたいくつかの変更を加えました。そしてレイモンド・ヘッティンガーが指摘するように、あなたget_days(month)完全に壊れています。

def get_year():
    year = raw_input("Please enter the year: ")
    return int(year) #otherwise it is a string!

def get_month():
    month = raw_input("Please enter the month: ")
    return month

def leap_year(year):
    if year % 4 == 0:
        return True
    else:
        return False

def get_days(month,leap_year): #leap_year must be passes to this function
    #This checks for "january" and "february" with leap years
    #and falls back to last option on EVERYTHING ELSE like a feb without a leap year or even a "march"
    if month == "january":
        print "31 days"
    elif month == "february" and leap_year == True:
        print "29 days"
    else:
        print "28 days"

    #this is a separate block that runs AFTER the previous block
    if month == "march":
        print "31 days"
    elif month == "april":
        print "30 days"
    elif month == "may":
        print "31 days"
    elif month == "june":
        print "30 days"
    elif month == "july":
        print "31 days"
    elif month == "august":
        print "31 days"
    elif month == "september":
        print "30 days"
    elif month == "october":
        print "31 days"
    elif month == "november":
        print "30 days"
    elif month == "december":
        print "31 days"
    else:
        print "invalid input" #so that it doesnt fail silently when I enter 2

def main():
    user_year = get_year()
    user_month = get_month()
    leap_status = leap_year(user_year) #store the leap_year status to a variable
    get_days(user_month, leap_status)  #and then pass it to a function

main()
于 2012-05-08T05:25:18.797 に答える