Python 101和Math Logic - 列出小于n的平方根数

时间:2013-09-01 02:25:38

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

我被困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

6 个答案:

答案 0 :(得分: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循环就足够了。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

def number(n):

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

    print(w)

数(144)

答案 3 :(得分:0)

怎么样?
    n= int(input())
    counter= 1
    while counter * counter < n:
        print( counter * counter )
        counter+= 1

答案 4 :(得分:0)

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

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

    应该可以解决这个问题。

答案 5 :(得分:0)

乌龟男人是完美的,但对我而言。我需要能够一路攀升至100,所以如果您需要超过81,就可以这样做

n = int(input())

counter = 1

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