Python在函数之间传递变量(布尔值)

Python在函数之间传递变量(布尔值),python,return,boolean,Python,Return,Boolean,编辑: 好的,在这里的每个人都提供了一些信息之后,我成功地使它工作了!为了去掉长链,我简化了很多。以下是我所拥有的: 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

编辑: 好的,在这里的每个人都提供了一些信息之后,我成功地使它工作了!为了去掉长链,我简化了很多。以下是我所拥有的:

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”测试该变量时,该变量现在已更改


那一定不是发生的事情有人能解释我怎么会误解得这么严重吗?在函数周围传递变量(并返回它们!)对我来说相当混乱。

因此
tf
在任何地方都不使用。有一个值由\u three方法传递到
,但是该值没有在方法中使用,因此无法返回。现在,切换->nd->tf。三人组接受tf,但不起作用


by_three
为您的问题正确设置了
True
False
,并将其返回到链中的
nd
->
开关
,该开关在
条件
中正确使用

定义函数时,通过
返回值
返回的
将提供给函数本身,而不是传递给函数的参数

比如说,

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
,它的开头是
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

为什么您认为您的代码不起作用?我用正测试用例和负测试用例运行了它,它通过了:让我们找到一个可以被3整除的整数。输入一个整数:3可被3整除。那不是很好吗。再试一次!让我们找到一个可被3整除的整数。输入一个整数:6可被3整除。那不是很好吗。再试一次!让我们找到一个可被3整除的整数。输入一个整数:5不能被3整除。呜呜。再试一次!让我们找到一个可被3整除的整数。输入一个整数:@ShawnMehan哦,是的,我想我不清楚。我想让程序继续要求更多的数字,直到有一个可以被3整除。如果有一个可以被3整除的数字,它应该结束。或者你可以在函数中指定
global a
。@Alexander:他似乎没有这个坏习惯;让我们保持这样吧。谢谢你的评论!不过,我遇到了麻烦,因为我在处理变量,我不知道它们的值需要用户输入。我不能只说“placeholder=var”,因为其中一个在函数之外。啊,有太多我不知道的。好的,谢谢!那很有帮助。我对代码进行了更直接的修改:switch=by_三(int(var))我仍然无法将by_三(var)的值解析为True或False。我想我可以在If语句中这样做,但我无法让它工作。
def changeVariable(a)
   a = a * 2
   return a

a = 5
result = changeVariable(a)
print(a)
print(result)