【问题标题】:Python 101 and Math Logic - Listing square root numbers less than nPython 101 和数学逻辑 - 列出小于 n 的平方根数
【发布时间】:2013-09-04 11:11:12
【问题描述】:

我被困在Python 101 type problem involving loops 上。以下是路线:

平方数是 K × K 形式的整数,例如9 是一个平方数,因为 3 × 3 = 9。编写一个程序,从输入中读取一个整数 n,并输出所有小于 n 的正平方数,每行一个以升序排列。例如,如果输入是 16,那么正确的输出应该是

1
4
9

这是我目前所拥有的,但它有点工作,但会永远运行。我的代码从未到达 if 语句,因此它在到达 17 之前中断(停止)。

假设 n = 17。

n=int(input())
counter = 1
while counter * counter < n:
   for counter in range(1,n):
      a = counter*counter
      print(a)
   if a < n:
      break

结果:

1
4
9
16
25
36
49
64
81

【问题讨论】:

  • 那个特定循环中的n 是什么?
  • 17.我想我提到过。 “假设 n = 17。”
  • 啊,对不起,我错过了。
  • 这里有一个提示:你只需要一个循环,但在这里你有两个。这是另一个:a 最终成为 counter*counter。为什么你只会在a &lt; n,即counter*counter &lt; n 的情况下打破?如果counter*counter &gt; n,你不想打破吗?
  • 我认为这可能是因为你打破了 for 循环,但你没有改变 counter 所以 while 循环将继续运行

标签: python for-loop while-loop counter square-root


【解决方案1】:

这是对您的代码的更正。

n=int(input())
counter = 1
for counter in range(1,n):
    a = counter*counter
    if a >= n:
        break
    print(a)

您的代码存在三处错误。首先,您要打破的条件是a &gt;= n 而不是a &lt; n。其次,在打印数字之前需要测试该条件。因此if 语句需要在for 循环内和print 语句之前。第三,外部while 循环并不是真正需要的:) 虽然您可以添加它,但是一个简单的内部for 循环就足够了。

【讨论】:

    【解决方案2】:

    if a &lt; n: 永远不会成功,除非n = 2;因为在循环内部a 变成了(n-1)*(n-1),对于n &gt; 2,它大于n;这就是无限循环的原因。试试这个:

    >>> counter = 1
    >>> n = 16 # int(input())
    >>> r = counter**2
    >>> while r<n:
        print r
        counter += 1
        r = counter**2
    
    
    1
    4
    9
    

    或者只是通过删除外部循环来修改你的循环,并将条件 放在 for 循环中,例如:

    for counter in range(1,n):
          a = counter*counter
          if a >= n:break
          print(a)
    

    【讨论】:

    • 这行得通,但不能纠正我前进的方向。你能更正我的代码吗?它非常接近。它只是循环过去 n.
    • 很好的答案,但我认为 Shashank 的答案更彻底,并使用了我所领导的代码方向。
    【解决方案3】:

    你的代码循环可能是你的语义错误的情况,试试这个简单的内存和简单

    定义数(n):

    for i in range(0,n):
        w=i*i
        if w>n-1:
            break
    
        print(w)
    

    数字(144)

    【讨论】:

      【解决方案4】:

      您在这里遇到了三个问题,但是,正如您所知,您走在正确的轨道上。

      1. 首先,当您只需要使用一个循环时,您使用了两个循环,我认为这是因为您对 while 循环的工作原理有点不清楚。 while 循环在每次运行之前检查条件是否为真。如果在循环过程中条件变为假,循环仍然会结束——它只是不会开始另一个循环。例如:

        n = 17
        while n < 18:
            n += 1
            print n
            n += 1
            print n
        

        打印:

        18
        19
        

        在您的情况下,通过 while 循环的每次迭代都会创建一个 for 循环。为了通过while 进行单次迭代,您的计算机必须遍历从1n 的每个数字,这意味着它会在您的while 循环之前打印出所有这些额外的数字第二次检查的机会。解决此问题的最简单方法是删除 while 循环并稍微不同地构建代码。我将在几行中向您展示,您并不需要它。

      2. 当你说if a &lt; n: 时,你的符号倒转了,你需要一个等号。问题要求您提供所有小于n 的值,但是,如果没有=,程序将不会停止,直到它大于 大于n。应该是if a &gt;= n:

      3. 最后,操作的顺序不是你想要的。您希望它在打印之前检查a 是否小于n,但您在进行检查之前打印。如果你切换它们,你会得到这样的东西:

        n=int(input())
        for counter in range(1,n):
            a = counter*counter
            if a >= n:
                break
            print(a)
        

        这应该可以解决问题。

      【讨论】:

        【解决方案5】:

        怎么样

            n= int(input())
            counter= 1
            while counter * counter < n:
                print( counter * counter )
                counter+= 1
        

        ?

        【讨论】:

        • 这会创建一个无限循环。
        【解决方案6】:

        乌龟人很完美,但对我来说。我需要能够一直达到 100,所以如果您需要超过 81,请执行此操作

        n = int(input())
        
        counter = 1
        
        for counter in range(1,n + 1):
            
            a = counter*counter
            
            if a > n:
                
        break
            
        print(a)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-16
          • 2012-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多