下面的代码(特别是for循环部分)为什么不能按预期工作,我对此感到困惑:
sum = 0
def numberofdays ():
for i in range (1901, 2000):
if i%4 == 0:
sum = sum + 366
else:
sum = sum + 365
sum = sum + 365 #to account for year 2000.
print sumsum值返回365,但它应该返回1901年至2000年之间的总天数--这个数字远远大于365天!
发布于 2014-12-15 21:16:00
在函数之外定义sum,而不是调用它。因此,sum = sum (0) + 365在程序中是正确的,但不是您想要的。你可能想:
sum = 0
def numberofdays ():
sum = 0
for i in range (1901, 2000):
if i%4 == 0:
sum = sum + 366
else:
sum = sum + 365
return sum
sum = numberofdays() + 365 #to account for year 2000.
print sum这两个sum变量之间存在差异。他们不一样!您可以阅读可变作用域这里。
此外,正如@Chris_Sprague所指出的,您应该更改sum的名称,因为它是一个内建函数。
这里有一个更新的版本:
n = 0
def numberofdays ():
total = 0
for i in range (1901, 2000):
if i%4 == 0:
total = total + 366
else:
total = total + 365
return total
n = numberofdays() + 365 #to account for year 2000.
print n 发布于 2014-12-15 21:19:57
试试这个:
mySum = 0
def numberofdays ():
global mySum # fix scope issues
for i in range (1901, 2001): # fix Y2K (index) issue
if i%4 == 0:
mySum = mySum + 366
else:
mySum = mySum + 365
mySum = numberofdays()
print(mySum)除了已经提交的其他两个答案之外,我还补充说,不应该调用变量sum,因为它是一个在Python中内置函数。
这里有一种(主观上)更好的方法,可以避免全局变量,并使代码更加灵活:
# NOTE: does not include endYear in the calculation
def numberOfDays(startYear, endYear):
sumOfDays = 0
for yearNum in range(startYear, endYear):
if yearNum % 4 == 0:
sumOfDays += 366
else:
sumOfDays += 365
return(sumOfDays)
myNumberOfDays = numberOfDays(1901, 2001)
print(str(myNumberOfDays))发布于 2014-12-15 21:17:22
这是一个可变范围的问题。您的函数无法更改在其外部声明的变量sum (尽管它可以读取其值)。试试这个:
sum = 0
def numberofdays ():
global sum
for i in range (1901, 2000):
if i%4 == 0:
sum = sum + 366
else:
sum = sum + 365
sum = sum + 365 #to account for year 2000.
print sumhttps://stackoverflow.com/questions/27493248
复制相似问题