Python 在函数之间传递变量(布尔值)
Posted
技术标签:
【中文标题】Python 在函数之间传递变量(布尔值)【英文标题】:Python passing variables between functions (boolean) 【发布时间】:2015-12-01 15:58:23 【问题描述】:编辑: 好的,经过这里每个人的一些输入,我设法使它工作!我简化了很多以摆脱长链。这是我所拥有的:
def main():
var = (raw_input("Enter an integer: "))
a = get_number(var)
if a != False:
switch = by_three(int(a))
if switch == True:
return
else:
print "Try again!"
main()
else:
main()
def get_number(parameter):
if parameter.isdigit():
return parameter
else:
print "No, I said an INTEGER. \"%s\" is not an integer." % parameter
return False
def by_three(placeholder):
if placeholder % 3 == 0:
print "%d is divisible by 3. Isn't that terrific." % placeholder
return True
else:
print '%d is not divisible by 3. Boo hoo.' % placeholder
return False
print "Let's find an integer divisible by 3."
main()
我有什么理由不应该在我的 else 语句中回到 main() 吗?还有其他方法可以让程序回到开头吗?
—— 我尝试构建一个简单的命令行程序来查找可被 3 整除的数字。这个想法是不断询问一个数字,直到用户选择一个可被 3 整除的数字。这是我的代码:
def main():
print "Let's find an integer divisible by 3."
var = (raw_input("Enter an integer: "))
switch = False
get_number(var, switch)
while switch != True:
print "Try again!"
main()
def get_number(parameter, nd):
if parameter.isdigit():
by_three(int(parameter), nd)
return parameter, nd
else:
print "No, I said an INTEGER. \"%s\" is not an integer." % parameter
return parameter, False
def by_three(placeholder, tf):
if placeholder % 3 == 0:
print "%d is divisible by 3. Isn't that terrific." % placeholder
return placeholder, True
else:
print '%d is not divisible by 3. Boo hoo.' % placeholder
return placeholder, False
main()
好的,这就是我认为发生的事情:变量switch
被传递给nd
,它被传递给tf
。如果另一个变量(var>parameter>placeholder)可以被 3 整除,则tf
的返回值为 True——这应该意味着当我用“while”对其进行测试时,该变量现在已更改。
这一定不是正在发生的事情——有人能解释一下我是如何对事情产生如此严重的误解的吗?在函数周围传递变量(并返回它们!)让我很困惑。
【问题讨论】:
为什么您认为您的代码不起作用?我用正面和负面的测试用例运行它,它通过了:让我们找到一个能被 3 整除的整数。输入一个整数:3 3 能被 3 整除。这不是很棒吗。再试一次!让我们找到一个能被 3 整除的整数。输入一个整数:6 6 能被 3 整除。这不是很好。再试一次!让我们找到一个能被 3 整除的整数。输入一个整数:5 5 不能被 3 整除。嘘。再试一次!让我们找到一个能被 3 整除的整数。输入一个整数: @ShawnMehan 哦,是的,我想我并不清楚。我希望程序继续要求更多的数字,直到有一个可以被三整除。一旦有一个可以被三整除的数字,它就应该结束。 【参考方案1】:让我们专注于您的这部分代码:
...
switch = False
get_number(var, switch)
while switch != True:
...
你在这段代码sn-p中做了什么:
您有一个变量switch
,开头是False
。你将它发送到一个函数,然后检查它是否是True
。
为什么这不有意义?
让我们考虑以下程序:
def changeVariable(a)
a = a * 2
a = 5
changeVariable(a)
print(a)
这个程序仍然打印5
,因为基本说明:你在一个函数中所做的,留在函数中。
因此,在您的情况下,调用get_number(var, switch)
并检查switch
的值是没有意义的,因为它会一直是False
。
解决方案:
您可以使用return
语句。然后,您将获得函数的输出。
例子:
def changeVariable(a)
a = a * 2
return a
a = 5
result = changeVariable(a)
print(a)
print(result)
上面的代码将打印5
,然后是10
。
【讨论】:
也可以在函数中指定global a
。
@Alexander:他似乎没有那个坏习惯;让我们保持这种状态。
感谢您的评论!不过,我遇到了麻烦,因为我正在处理我不知道其值的变量——它们需要来自用户的输入。而且我不能只说“placeholder = var”,因为其中之一在函数之外。呃,我不知道的东西太多了。【参考方案2】:
当你定义一个函数时,你通过return value
返回的value
被赋予函数本身,而不是传递给函数的参数。
例如,
def f(i,j):
i=1
j=2
return i,j
i=3
j=4
i,j=f(i,j)
将给出 i=1 和 j=2,但是
f(i,j)
将保持 i 和 j 不变(i=3 和 j=4),因为函数内部变量的范围是局部的。
【讨论】:
好的,谢谢!这很有帮助。我将代码修改为更直接: switch = by_three(int(var)) 我仍然无法将 by_three(var) 的值解析为 True 或 False。我以为我可以从 If 语句中做到这一点,但我无法让它工作。【参考方案3】:所以tf
不会在任何地方使用。有一个值传递到 by_three
方法中,但它没有在方法中使用,因此无法返回。现在,切换 -> nd -> tf.而by_three
接受tf
,但没有让它发挥作用。
by_three
为您的问题正确设置了True
或False
,并将其传递回链到nd
-> switch
,它在条件while
中正确使用。
【讨论】:
以上是关于Python 在函数之间传递变量(布尔值)的主要内容,如果未能解决你的问题,请参考以下文章