看板 Python 關於我們 聯絡資訊
大家好~ 不好意思又來打擾 我今天忙完其他作業 又打開練習 重新寫一次 如下: 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的結果 : 但沒有成功 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 68.180.87.229 (美國) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1562521163.A.14E.html
ckc1ark: 印出來之前counter先加1了 07/08 01:48
AmigoSafin: yup!已解決 先if然後counter=counter+1 謝謝!! 07/08 01:54
justoncetime: 邏輯不對吧,當你評估c*c<n時是你要的,隔行就該print 07/08 15:23
justoncetime: 接下來才做c=c+1,以備下次評估及顯示用,交換不就OK? 07/08 15:24
justoncetime: 也不是邏輯不對,是兩行交換就少一次評估的需要了。 07/08 15:25
lmk999999: 因為還在 counter = 5 的時候你 就先 +1 再印出,所以 07/09 08:37
lmk999999: 才會出現 6 的 36 ,因此應該讓 while 驗證完畢後立 07/09 08:37
lmk999999: 即印出,才會精確;如果是為了不印出 0 的話,可以使 07/09 08:37
lmk999999: counter 從 1 開始,就可以得到需要的結果了。 07/09 08:37