2016-01-08 33 views
0

我想创建一个程序,它会根据以下算法给出任意给定数量的最少可能移动次数,但我似乎没有得到任何地方,因为似乎有一个无限循环的地方,我猜测这是我作为我一直在使用他们函数似乎会导致无限循环?

如果有人能说明什么我做错了它,将不胜感激

这里才刚刚开始是我的代码:

num = 4 

x = 0 

def div3(num): 
    n3 = num/3 
    n3 = n3 + n3 
    num = num - n3 
    print("DIV3") 
    return num 

def div2(num): 
    num = num/2 
    print("DIV2") 
    return num 

def min1(num): 
    num = num - 1 
    print("MIN1") 
    return num 

while num != 0: 

    if num/3 % 1 == 0: 
     div3(num) 
     x = x + 1 
     print(x) 
    elif num/2 % 1 == 0: 
     div2(num) 
     x = x + 1 
     print(x) 
    else: 
     min1(num) 
     x = x + 1 
     print(x) 

print(x) 
+2

您尚未将全局范围中的num分配给新值。将'div3(num)'改为'num = div3(num)'。 – user824294

+0

你从一个函数返回一个值,但你永远不会在呼叫站点上使用它。试着做'num = div2(num)'。 – 9000

回答

1

我不是确定这段代码应该做什么,但像这样的表达式不这样做有很大的意义:

num/3 % 1 

一个int除int 3总是给一个int,任何int模1总是零。

也许你的意思是?

(num/3.0) % 1 # Also adding parens for clarity. 

此外,外部的num变量将永远不会改变。也许你打算做这样的事情:

num = div3(num) 

我建议你把外面的代码放在一个函数里面。这将有助于澄清numdiv()功能中的num不同。所以,你的计划将有一个这样的结构:

def div3(num): 
    ... 

def div2(num): 
    ... 

def min1(num): 
    ... 

def main(): 
    num = 4 
    x = 0 
    while num != 0: 
     ... 
     num = div(...) 
     ... 

main() 
0
def div3(num): 
n3 = num/3 
n3 = n3 + n3 
num = num - n3 
print("DIV3") 
return num 

所有NUM首先不能在功能为num的范围内改变是局部的作用,所以使全球和改变该函数的参数给其他变量说“值”,否则局部变量和全局变量会冲突。样本更改

def div3(value): 
n3 = value/3 
n3 = n3 + n3 
global num 
num = value - n3 
print("DIV3") 
return num 

接下来修复您的循环问题,循环将在第一次迭代后进入无限循环。当num = 2时,循环将变为无限,因为num = value - n3总是给出2,因此它继续执行函数DIV3