我被困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
答案 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)
你在这里有三个问题,但是,正如你所知,你走在了正确的轨道上。
首先,当你只需要使用一个循环时,你会使用两个循环,我认为这是因为你对while
循环的工作原理有点不清楚。 while
循环在每次运行之前检查条件是否为真。如果条件在循环中变为假,则循环仍将完成 - 它不会再启动另一个循环。例如:
n = 17
while n < 18:
n += 1
print n
n += 1
print n
打印:
18
19
在您的情况下,通过while
循环的每次迭代都会创建一个for
循环。为了通过while
进行单次迭代,您的计算机必须检查从1
到n
的每个数字,这意味着它会打印出所有这些额外数字在你的while循环之前甚至有第二次机会进行检查。解决此问题的最简单方法是删除while
循环并以不同方式构建代码。正如我将向您展示几行,您并不需要它。
当你说if a < n:
时,你的标志倒退了,你需要一个等号。该问题要求您提供的所有值少于而不是n
,但是,如果没有=
,程序将不会停止,直到它更大 n
。它应该是if a >= n:
。
最后,操作的顺序不是您想要的。您希望在打印前检查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)