Re: [问题] 简单的循环问题

楼主: AmigoSafin   2019-07-08 01:39:20
大家好~
不好意思又来打扰
我今天忙完其他作业
又打开练习 重新写一次
如下:
n=int(input())
counter=0
while counter*counter<n:
counter=counter+1
print(counter*counter)
但我的答案都会包含最后一个数值
例如n是36
我的答案都会包含36
但题目要的答案是 1 4 9 16 25
我的会多一个
思考了大约一小时还没想出我的问题出在哪?
请问各位前辈我是否遗忘了什么?
至于为何用while
因为给我的范例是用while
我也觉得改起来还蛮好理解的
我是蛮疑惑我明明写counter*counter<n
是否该加一个 if ((counter+1)*(counter+1)=n): break ?
谢谢大家!
※ 引述《AmigoSafin ()》之铭言:
: 大家好
: 题目是假设给一个n
: 要print出小于n的square number
: 例如 n给25
: 则print出 1 4 9 16
: 我的code会把0也print
: 提示说就是写一个while loop
: 所以我也就是照提示写 如下:
: 还请各位高手帮忙 谢谢!
: import math
: n=int(input())
: counter=0
: while counter*counter<n:
: A=counter*counter
: if (A<0):
: continue
: counter = counter+1
: counter+1 <math.sqrt(n)
: print(A)
: 我试图想要让print只给我大于0的结果
: 但没有成功
作者: ckc1ark (伪物)   2019-07-08 01:48:00
印出来之前counter先加1了
楼主: AmigoSafin   2019-07-08 01:54:00
yup!已解决 先if然后counter=counter+1 谢谢!!
作者: justoncetime (台北丛林好冷~)   2019-07-08 15:23:00
逻辑不对吧,当你评估c*c<n时是你要的,隔行就该print接下来才做c=c+1,以备下次评估及显示用,交换不就OK?也不是逻辑不对,是两行交换就少一次评估的需要了。
作者: lmk999999 (江风)   2019-07-09 08:37:00
因为还在 counter = 5 的时候你 就先 +1 再印出,所以才会出现 6 的 36 ,因此应该让 while 验证完毕后立即印出,才会精确;如果是为了不印出 0 的话,可以使counter 从 1 开始,就可以得到需要的结果了。

Links booklink

Contact Us: admin [ a t ] ucptt.com