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