用于循环卡住且不交互(Python 3)

用于循环卡住且不交互(Python 3),python,python-3.x,for-loop,increment,Python,Python 3.x,For Loop,Increment,我目前正在编写一个小脚本,旨在查找出租车号码。这里只有一个小问题,for循环不会增加变量x,而是永远卡在循环中。我将在下面粘贴代码的相关部分: n = int(10) counter = int(0) m = int(m) x = int(1) y = int(n**(1/3)) cheatsheet = [] while counter in range(0,m): for x in range(1,y): if x**3 + y**3 < n:

我目前正在编写一个小脚本,旨在查找出租车号码。这里只有一个小问题,for循环不会增加变量x,而是永远卡在循环中。我将在下面粘贴代码的相关部分:

n = int(10)
counter = int(0)
m = int(m)
x = int(1)
y = int(n**(1/3))
cheatsheet = []

while counter in range(0,m):
    for x in range(1,y):
        if x**3 + y**3 < n:
            print('less than')
            print(x,y,n)
            continue
        elif x**3 + y**3 > n:
            print('greater than')
            y -= 1
            continue
        elif x > y:
            if n in cheatsheet:
                print('counting')
                counter = counter+1
                #checking if n occurs in the list, if so it will add 1 to the counter so that the program will know when to stop
            n = n + 1
            y = int(n**(1/3))
            x = 1
            print('break1')
            #resetting values and bumping n so that it will continue the quest to find 'em all
            break
        else:
            if x and y == 1:
                #this is an error correction for low n values, i mean really low it might be redundant by now
                n = n + 1
                y = int(n**(1/3))
                x = 1
                print('break2')
                break
            cheatsheet.append((n,x,y))        
print(cheatsheet)
n=int(10)
计数器=int(0)
m=int(m)
x=int(1)
y=int(n**(1/3))
备忘单=[]
计数器处于范围(0,m)时:
对于范围(1,y)内的x:
如果x**3+y**3n:
打印('大于')
y-=1
持续
如果x>y:
如果备忘单中有n:
打印('计数')
计数器=计数器+1
#检查列表中是否出现n,如果出现,它将向计数器中添加1,以便程序知道何时停止
n=n+1
y=int(n**(1/3))
x=1
打印('break1')
#重置值并撞击n,以便继续寻找所有值
打破
其他:
如果x和y==1:
#这是对低n值的错误纠正,我的意思是非常低,现在可能是多余的
n=n+1
y=int(n**(1/3))
x=1
打印('break2')
打破
备忘单。附加((n,x,y))
打印(备忘单)
这将在终端窗口中产生以下结果:

注意,我自己终止了进程,程序没有。 可以看出,脚本只是循环并打印“小于”和x、y、n的值

非常感谢您的帮助


编辑:变量m由用户给定,但未包含在这段代码中。

这有许多问题,我不愿意发布功能代码,但我会指出其中的一些问题

首先:

n = int(10)
不是必需的,不是错误,而是多余的。使用具有相同效果的
n=10

然后:

将始终计算为
True
m
是*从未修改过的,因此成员资格测试总是成功的,也许您需要重新评估您的循环

for x in range(1,y):
这将始终分配
x
1
y
通过您的算术计算为
2
(int轮浮动到地板上,即
int(2.9)->2
),因此可以使用
math.ceil
或将一个添加到
y


显然,您在循环中一直在重新分配变量名,这会造成混乱,并可能导致意外行为。

这有许多问题,我不愿意发布函数代码,但我会指出其中的一些问题

首先:

n = int(10)
不是必需的,不是错误,而是多余的。使用具有相同效果的
n=10

然后:

将始终计算为
True
m
是*从未修改过的,因此成员资格测试总是成功的,也许您需要重新评估您的循环

for x in range(1,y):
这将始终分配
x
1
y
通过您的算术计算为
2
(int轮浮动到地板上,即
int(2.9)->2
),因此可以使用
math.ceil
或将一个添加到
y


显然,您在循环中总是重新分配变量名,这会造成混乱,并可能导致意外行为。

我认为for循环工作正常,但while循环没有被取消。continue语句使程序脱离for循环,但while循环的计数器从未更新。如果查看我上传的图像,它不会将x=1与x=2碰撞。范围(1,2)意味着它将只迭代1次。它是唯一的端点。意思:如果你在范围(1,3):打印(x)中对x执行,你得到12我认为你的for循环工作正常,但是你的while循环没有被取消。continue语句使程序脱离for循环,但while循环的计数器从未更新。如果查看我上传的图像,它不会将x=1与x=2碰撞。范围(1,2)意味着它将只迭代1次。它是唯一的端点。意思是:如果你在范围(1,3)内对x进行打印(x),你会得到12