这个while循环代码在python中有什么问题?

问题描述 投票:-4回答:6
def nearest_square(limit):
key=0
while key<=limit:
    i=0
    key=i*i
    i+=1
return key

test1 = nearest_square(40)print(“期望结果:36,实际结果:{}”。format(test1))这个循环会运行无限时间吗?

python loops while-loop infinite-loop
6个回答
2
投票

这是因为你在循环中启动你的i,将i移到外面,它会起作用。

会发生什么是你的密钥将等于0,因为当你分配key的值时,变量i总是0(我试图增加,但初始化保持改变i等于0):

loop 1:
initiate i = 0
key = 0*0 = 0
i = 1

loop 2
initiate i = 0
key = 0*0 = 0
i = 1

loop 3:
initiate i = 0
key = 0*0 = 0
i = 1

loop 4:
initiate i = 0
key = 0*0 = 0
i = 1

loop 5:
initiate i = 0
key = 0*0 = 0
i = 1

loop 6:
initiate i = 0
key = 0*0 = 0
i = 1

并且它将保持循环(这将导致无限循环)顺便说一下,尝试在代码中给出一些空格,它将显着地帮助您处理更复杂的代码。


0
投票

你已经在内部定义了i,所以在每次迭代期间它都会定义。定义在while循环之外,就像这样

i=0
while key<=limit:
    key=i*i
    i+=1
return key

我希望你在循环中使用它之前已经初始化了密钥。


0
投票

我假设你有缩进权。

您无需定义“密钥”。在Python中,您的变量将在初始化时定义。

然后,在你的整个循环中,你一直看到我为零。这需要在整个循环之前完成。


0
投票

阿维纳什, 这段代码有几个错误: 1.Indentation - 您的代码需要缩进函数内部 2.设置变量 - 您已经创建了变量键但没有为其赋值,您需要将其声明为您要使用它的类型,在本例中为整数。 3.Logic - 在循环中你将i变量设置为0,所以k = i * i的第一阶段没有做任何事情......把我作为1(或其他nubmer)开始并把它放在循环之外

你的代码应该更像这样:

def nearest_square(limit):
    key = 0
    i=1
    while key<=limit:
        key=i*i
        i+=1
    return key

0
投票

码:

def nearest_square(limit):
    max_val = -1
    for val in xrange(1, limit):
        cur_power = val*val
        if max_val < cur_power and cur_power < limit:
            max_val = cur_power
        if cur_power > limit:
            break
    return max_val

test1 = nearest_square(40)
print("expected result: 36, actual result: {}".format(test1))

输出:

expected result: 36, actual result: 36

0
投票

你的代码没有在i中增加while loop的值。

在while循环之前初始化i=0。工作范例:

def nearest_square(limit):
key=0
i=0
while key<=limit:
    key=i*i
    i+=1
return key

test1 = nearest_square(limit = 40) print("expected result: 36, actual result: {}".format(test1))

© www.soinside.com 2019 - 2024. All rights reserved.