无法离开循环

时间:2017-11-30 14:07:06

标签: python loops

我已经一遍又一遍地检查了这个程序,但我仍然无法理解为什么在我进入' n&#39后我不能离开循环;。 '结束'的布尔值应该由' y'或者' n'用户选择了。但是,每次我点击' n'或者' y',循环继续。这不是整个程序,我只选择可能与此问题相关的部分。

def k(response):

    while response !='y' and response!='n':
        response=input("Would you like to do again (y/n)")
    if response=='y':
        end= False
    elif response=='n':
        end= True
    return end


end=False

while not end:

    year=int(input("Year of birth:"))
    y(year)

    month=int(input("Month of birth:"))
    m(month)

    day=int(input("Day of birth:"))
    d(day)

    j(month)
    response=input("Would you like to do again (y/n)")
    k(response)

    end

1 个答案:

答案 0 :(得分:0)

据我所知,大部分程序(一旦解决了缩进问题,我认为是StackOverflow渲染问题,我建议对你的问题进行编辑,修复了这个问题)工作正常。 但是,您在函数k()中返回一个变量,显然希望更改主代码中的变量。情况并非如此,您需要正确分配。

一旦正确分配,它就可以正常工作。 我还自由地修复了代码中的空白以提高可读性并遵守PEP8:

def k(response):
    while response != 'y' and response != 'n':
        response = input("Would you like to do again (y/n)")
    if response == 'y':
        end = False
    elif response == 'n':
        end = True
    return end


end = False

while not end:
    year = int(input("Year of birth:"))
    print(year)

    month = int(input("Month of birth:"))
    print(month)

    day = int(input("Day of birth:"))
    print(day)

    print(month)
    response = input("Would you like to do again (y/n)")
    end = k(response)

为了进行测试,我使用print替换了您的其他函数调用。 您的代码也仅适用于Python 3,如果您想在Python 2.7中使用它,则需要将input()替换为raw_input()

那你为什么以前的代码不能正常工作呢?变量的可见性有限(范围或命名空间,具体取决于语言)。在这种情况下,函数k()中分配的变量不会影响外部范围中的变量(否则,您需要非常小心您的变量名称)。如果要在函数作用域中传递变量的值,可以将其定义为全局(应该避免这种情况,因为它通常会导致混乱)或者返回其值。但是,使用您的函数的人不知道变量名称,甚至可能不关心返回的值。因此,如果有人想要使用此值,则必须将其分配给他们选择的变量。否则,该值将丢失。在这种情况下,您需要再次将其分配给变量end