首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单的循环混淆

简单的循环混淆
EN

Stack Overflow用户
提问于 2014-12-15 21:14:39
回答 4查看 94关注 0票数 0

下面的代码(特别是for循环部分)为什么不能按预期工作,我对此感到困惑:

代码语言:javascript
复制
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 sum

sum值返回365,但它应该返回1901年至2000年之间的总天数--这个数字远远大于365天!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-15 21:16:00

在函数之外定义sum,而不是调用它。因此,sum = sum (0) + 365在程序中是正确的,但不是您想要的。你可能想:

代码语言:javascript
复制
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的名称,因为它是一个内建函数

这里有一个更新的版本:

代码语言:javascript
复制
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 
票数 5
EN

Stack Overflow用户

发布于 2014-12-15 21:19:57

试试这个:

代码语言:javascript
复制
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中内置函数

这里有一种(主观上)更好的方法,可以避免全局变量,并使代码更加灵活:

代码语言:javascript
复制
# 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))
票数 2
EN

Stack Overflow用户

发布于 2014-12-15 21:17:22

这是一个可变范围的问题。您的函数无法更改在其外部声明的变量sum (尽管它可以读取其值)。试试这个:

代码语言:javascript
复制
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 sum
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27493248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档