编辑: 好的,经过大家的一些投入后,我设法让它发挥作用!为了摆脱长链,我简化了很多。这就是我所拥有的:
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()
有没有理由我不能在我的其他声明中回到main()?还有另一种让程序回到起点的方法吗?
--- 我尝试构建一个简单的命令行程序,用于查找可被3整除的数字。这个想法是在用户选择一个可被3整除的数字之前不断询问数字。这是我的代码:
switch
好的,所以这就是我的想法:变量nd
传递给tf
,传递给tf
。如果另一个变量(变量>参数>占位符)可被3整除,则TextBlock
返回True - 这意味着当我用“while”测试变量时,变量现在已经改变了。
那一定不是正在发生的事情 - 有人可以解释我是如何误解事情的吗?在函数周围传递变量(并返回它们!)对我来说非常困惑。
答案 0 :(得分:5)
...
switch = False
get_number(var, switch)
while switch != True:
...
您有一个变量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
。
答案 1 :(得分:4)
定义函数时,通过value
返回的return 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),因为函数内部变量的范围是本地的。
答案 2 :(得分:0)
因此tf
不会在任何地方使用。有一个值传递给by_three
方法,但是它没有在方法中使用,因此无法返回。现在,切换 - > nd - > TF。 by_three
接受tf
,但不会将其付诸实施。
by_three
正在为您的问题正确设置True
或False
,并将其重新传递给nd
- > switch
正确使用条件while
的地方。