英文:
Trying to call a function in an "if... else..." statement, and its saying that the function below isn't defined
问题
y = 0
x = 10
print("TRUE" if y > x else theloop())
def theloop():
while y < 11:
print(f"Number is {y}!")
y = y + 1
y = 0
x = 10
def theloop():
while y < x:
print(y + 1)
print("true" if y > x else theloop())
英文:
y = 0
x = 10
print("TRUE" if y>x else theloop())
def theloop():
while y < 11:
print(f"Number is {y}!")
y = y + 1
I want y to keep on getting bigger by 1 until it becomes bigger than x and print "TRUE", but each time it keeps saying the function isn't defined.
I tried this right here and it seems to work for some reason. But whenever I want y to increase by 1, it completely stops working.
y=0
x=10
def theloop():
while y < x:
print(y+1)
print("true" if y>x else theloop())
答案1
得分: 1
第一件事:
在全局范围内,你需要在调用函数之前定义它。
这解释了为什么你的第一个代码不起作用。Python 还没有定义函数,而你在它有机会访问之前就调用了它。
print("TRUE" if y > x else theloop())
# Python 在你调用函数时还没有看到这个函数
def theloop():
while y < x:
print(y+1)
第二件事:
你写的代码只是打印(y+1)...它实际上并没有增加 y 的值。
而且,在函数内部无法访问 y,所以:
在 while 循环之前本地定义它,像这样:
x = 10
def the_loop():
# 在本地定义 y
y = 0
while y < x:
# 增加 y 的值 1
y += 1
print(y)
print("true" if y > x else the_loop())
如果 y 可能会改变,将其作为参数传入:
x = 10
y = 0
# 将 y 作为参数传入
def the_loop(y):
while y < x:
# 增加 y 的值 1
y += 1
print(y)
print("true" if y > x else the_loop(y))
使用 global 关键字(参见此帖子)
y = 0
x = 10
def theloop():
global y
while y < x:
y += 1
print(y)
print("true" if y > x else the_loop())
使用 global 关键字实际上改变了原始变量,现在 y = 10 可以在函数外部访问。
更多关于全局变量的信息在这里。
英文:
First thing:
In the global scope, you want to define a function before you call it.
This explains why your first code doesn't work. Python hasn't defined the function yet and you're calling it before it has a chance to access it.
print("TRUE" if y>x else theloop())
# Python hasn't seen this when you call the function
def theloop():
while y < x:
print(y+1)
Second thing:
The code you wrote that runs only prints (y+1)... it does not actually increase y by 1.
Also, y is not accessible within the function so:
Define it locally before the while loop like this:
x = 10
def the_loop():
# define y locally
y = 0
while y < x:
# increases y by 1
y += 1
print(y)
print("true" if y > x else the_loop())
Pass it in as an argument if y might change:
x = 10
y = 0
# pass y in as an argument
def the_loop(y):
while y < x:
# increases y by 1
y += 1
print(y)
print("true" if y > x else the_loop(y))
Use the global keyword (see this post)
y = 0
x = 10
def theloop():
global y
while y < x:
y += 1
print(y)
print("true" if y > x else the_loop())
Using global keyword actually changes the original variable and now y = 10 is accessible outside of the function.
More on globals here
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论