函数似乎导致了无限循环?

2024-04-19 22:51:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个程序,根据下面的算法,给我一个给定数字的最少可能的移动次数,但我似乎没有得到任何地方,因为似乎有一个无限循环的地方,我猜这是我的函数,因为我才刚刚开始使用它们

如果有人能解释我做错了什么,我将不胜感激

这是我的密码:

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)

Tags: 函数程序算法密码returndef地方数字
2条回答

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

num / 3 % 1

一个整数除以整数3总是得到一个整数,任何整数模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()
def div3(num):
n3 = num / 3
n3 = n3 + n3
num = num - n3
print("DIV3")
return num

首先,num不能在函数内部更改,因为num的作用域对于函数是局部的,所以将其设置为全局的,并将函数的参数更改为其他变量,例如“value”,否则局部变量和全局变量将发生冲突。样品更换

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

相关问题 更多 >