1

Python とプログラミング全体に非常に慣れています。なぜこのコードは:

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
    years = [year1, year2]
    def leapyr(n):
        if n % 400 == 0:
            return True
        elif n % 100 == 0:
            return False
        elif n % 4 == 0:
            return True
        else:
            return False

    for i, year in enumerate(years):
        if leapyr(year):
            years[i] = year * 366
            print 'l:', years, year1, year2
        else:
            years[i] = year * 365
            print 'n:', years, year1, year2

daysBetweenDates(1,1,1,4,2,1)

year1 と year2 を年 [ ] で変更しますが、year1 と year2 は変更しませんか?

n: [365, 4] 1 4
l: [365, 1464] 1 4

編集:作業コード

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
    years = [year1, year2]
    def leapyr(n):
        if n % 400 == 0:
            return True
        elif n % 100 == 0:
            return False
        elif n % 4 == 0:
            return True
        else:
            return False

    for i, year in enumerate(years):
        if leapyr(year):
            years[i] = year * 366
            year1 = years[0]
            year2 = years[1]
            print 'l:', years, year1, year2
        else:
            years[i] = year * 365
            year1 = years[0]
            year2 = years[1]
            print 'n:', years, year1, year2

daysBetweenDates(1,1,1,400,2,1)

正しい答えが得られます:

n: [365, 400] 365 400
l: [365, 146400] 365 146400

あなたの投稿はコードが多すぎるようです。ここにテキストを追加してください。テキストは重要です。

4

2 に答える 2

0

リストyearsを作成すると、変数year1とyear2が値によって渡されます。したがって、次のように変更すると、次のようになります。

years[i] = year * 365

リストの値を変更するだけで、作成元の変数は変更しません。

このSOの質問には、Pythonで引数がどのように渡されるかについての良い情報があります。参照によって変数を渡すにはどうすればよいですか?

これについての私のスキムから、日付を基本的なintではなくオブジェクトとしてdaysBetweenDates関数に渡す必要があるようです。

于 2013-03-07T14:22:44.677 に答える
0

Years はリストであり、可変オブジェクト (辞書、リストなど) の場合は内部の値が参照によってコピーされ、変数が可変でない場合 (int、string、tuple など) は値によってコピーされます。そのため、リスト内の int 値を変更しても、それを構築するために使用された int 変数には反映されません。

于 2013-03-07T14:12:49.880 に答える