我已经一遍又一遍地检查了这个程序,但我仍然无法理解为什么在我进入' 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
答案 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
。