代码之家  ›  专栏  ›  技术社区  ›  Iamavinash

python中的while循环代码有什么问题?

  •  -4
  • Iamavinash  · 技术社区  · 7 年前
    def nearest_square(limit):
    key=0
    while key<=limit:
        i=0
        key=i*i
        i+=1
    return key
    

    测试1=最近的\u平方(40) 打印(“预期结果:36,实际结果:{}”。格式(test1)) 这个循环会无限期地运行吗?

    6 回复  |  直到 7 年前
        1
  •  2
  •   LearnToCode    7 年前

    这是因为你启动了你的i-inside-while循环,把i移到外面,它就会工作。

    将发生的情况是,您的键将等于0,因为当您分配键的值时,变量i将始终为0(i试图增加,但初始化保持将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
    

    它将继续循环(这将导致无限循环) 顺便说一句,尽量在代码中留出一些空格,这将对更复杂的代码有很大帮助。

        2
  •  0
  •   jithin    7 年前

    您已经在while中定义了i,因此在每次迭代中都会定义它。像这样在while循环外定义i

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

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

        3
  •  0
  •   Vernon    7 年前

    我想你的缩进是对的。

    您不需要定义“key”。在Python中,变量将在初始化时定义。

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

        4
  •  0
  •   Marom    7 年前

    阿维纳什,
    此代码有几个错误:
    1. 缩进,缩进 -您的代码需要在函数中缩进
    2. 设置变量 -您已经创建了变量键,但没有给它赋值,需要将其声明为要使用的类型,在本例中为整数。
    3. 思维方式 -在循环中,您将i变量设置为0,因此k=i*i的第一阶段不执行任何操作。。。将i起始为1(或其他numer),并将其置于循环之外

    您的代码应该更像这样:

    def nearest_square(limit):
        key = 0
        i=1
        while key<=limit:
            key=i*i
            i+=1
        return key
    
        5
  •  0
  •   Mahesh Karia    7 年前

    代码:

    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
    
        6
  •  0
  •   Rahul Gupta Jerod Venema    7 年前

    您的代码没有增加 i 内部 while loop .

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

    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))