0

何が悪いのか、その他の改善が必要な点を教えてください

def finalcalc(y, d, m):
    end = (y + d + m) % 7
    return end
def monthlook(m):
    if m == 1:
        monthout = 6
    elif m == 2:
        monthout = 2
    elif m == 3:
        monthout = 2
    elif m == 4:
        monthout = 5
    elif m == 5:
        monthout = 0
    elif m == 6:
        monthout = 3
    elif m == 7:
        monthout = 5
    elif m == 8:
        monthout = 1
    elif m == 9:
        monthout = 4
    elif m == 10:
        monthout = 6
    elif m == 11:
        monthout = 2
    elif m == 12:
        monthout = 4
print(finalcalc(yearout, dayout, monthout))    
def daysimp(d):
    dayout = d % 7
    monthlook(monthin)
def yearc(y):
    y = y % 100
    yearout = y + (y // 4)
    yearrem = y % 4
    if yearrem >= 2:
        yearout += 1
    yearout = yearout % 7
    daysimp(dayin)
dayin = int(input("What day in the Month?"))
monthin = int(input("What Month Number? - Eg. January is 1"))
yearin = int(input("What Year?"))
yearc(yearin)

エラーには、「NameError: name 'yearout' is not defined」というメッセージが表示されます。その他の問題の解決策と回答、および単純化および/または改善する方法を教えてください。

4

2 に答える 2

1

yearout関数内yearc でのみ定義される名前です。名前を呼び出すとfinalcalc()表示されず、エラーが発生します。

と にも同じ問題がdayoutありmonthoutます。

を呼び出す前にyearout、の値を決定する必要がありdayoutます。これらの名前を他の関数の結果に設定したかったのではないでしょうか? 次に、これらの関数を使用して、呼び出し元がそれらの値を使用できるようにする必要があります。monthoutfinalcalc()return

たとえばyearc、新しいyearout値を返すように関数を変更します。

def yearc(y):
    y = y % 100
    yearout = y + (y // 4)
    yearrem = y % 4
    if yearrem >= 2:
        yearout += 1
    yearout = yearout % 7
    return yearout

次に、その関数の結果を新しい名前で保存します。

yearout = yearc(yearin)

他の名前と関数についても同じことを行います。

関数に関する Python チュートリアルをもう一度読みたいと思います。

于 2013-02-17T10:59:54.597 に答える
1

メソッドを他のメソッドから順番に呼び出すのではなく、各メソッドから値を返し、次のメソッドを呼び出して次の値を取得する必要があります。

これら 3 つのメソッドで計算された値をメソッドに渡したいように思われるので、finalcalcメソッドを変更してこれらの値 ( yearoutdayout、およびmonthout) を返し、戻り値を変数に格納する必要があります。そして、これらの戻り値をメソッドへの引数として使用できますfinalcalc

yearout = yearc(yearin)
monthout = monthlook(monthin)
daysout = daysimp(dayin)

print(finalcalc(yearout, dayout, monthout))

メソッドは次のdaysimpように簡単に変更できます。

def daysimp(d):
    return d % 7

同様に、他の 2 つのメソッドを変更します。

于 2013-02-17T11:02:55.073 に答える