2

我被困在涉及循环的 Python 101 类型问题上。以下是方向:

平方数是 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
4

6 回答 6

3

这是您的代码的更正。

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

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

于 2013-09-01T02:42:24.527 回答
1

if a < n:永远不会成功,除非n = 2;因为循环内部a正在变得(n-1)*(n-1)大于nfor n > 2;这就是无限循环的原因。尝试这个:

>>> 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)
于 2013-09-01T02:29:57.247 回答
1

您的代码循环可能是您的语义错误的情况,请在内存上尝试一下,简单

定义数(n):

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

    print(w)

号码(144)

于 2016-01-08T13:24:50.470 回答
0

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

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

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

    印刷:

    18
    19
    

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

  2. 当您说 时if a < n:,您的符号倒退了,您需要一个等号。问题要求您给出小于的所有值n,但是,如果没有,程序将不会停止,=直到大于n应该是if a >= n:

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

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

    这应该可以解决问题。

于 2013-09-01T03:06:08.133 回答
0

关于什么

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

?

于 2013-09-01T02:29:11.607 回答
0

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

n = int(input())

counter = 1

for counter in range(1,n + 1):
    
    a = counter*counter
    
    if a > n:
        
break
    
print(a)
于 2020-09-28T22:45:55.163 回答