【问题标题】:What is wrong with this while loop code in python?python中的这个while循环代码有什么问题?
【发布时间】:2017-12-27 09:36:33
【问题描述】:
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)) 这个循环会无限运行吗?

【问题讨论】:

  • 函数的每一行你看了吗?有一个 key 什么都不做,然后在每次迭代中重新定义 i。如果您费心将任何精力投入到调试中,您的问题可能已经得到解决。
  • 现在问题是正确的,我忘了在key后面写“=0”
  • 这不是您的代码的唯一问题...
  • 其他是什么
  • 进入的一个好习惯是将相关变量的值打印到控制台 - 这会告诉你 ikey 没有增加

标签: python loops while-loop infinite-loop


【解决方案1】:

这是因为您在 while 循环中启动 i,将 i 移到外部,它会起作用。

会发生什么情况是您的键将等于 0,因为当您分配键的值时变量 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

它会一直循环(这会导致无限循环) 顺便说一句,尝试在您的代码中留出一些空格,这将极大地帮助您编写更复杂的代码。

【讨论】:

  • 我在循环内被初始化有什么问题?你能解释一下吗
【解决方案2】:

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

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

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

【讨论】:

  • 如果你在 while 循环中初始化 i,它的值将在每次迭代开始时变为零
【解决方案3】:

我假设你有缩进的权利。

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

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

【讨论】:

    【解决方案4】:

    阿维纳什,
    这段代码有几个问题:
    1.缩进 - 你的代码需要在函数内部缩进
    2.设置变量 - 您已经创建了变量键但没有为其分配任何值,您需要将其声明为您要使用的类型,在本例中为整数。
    3.逻辑 - 在循环中,您将 i 变量设置为 0,因此 k = i*i 的第一阶段什么都不做...将 i 作为 1(或其他数字)开始并将其放在外面循环

    你的代码应该更像这样:

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

    【讨论】:

      【解决方案5】:

      代码:

      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】:

        您的代码没有增加while loopi 的值。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-06
          • 2013-01-19
          相关资源
          最近更新 更多