作者AmigoSafin ()
看板Python
標題Re: [問題] 簡單的迴圈問題
時間Mon Jul 8 01:39:20 2019
大家好~
不好意思又來打擾
我今天忙完其他作業
又打開練習 重新寫一次
如下:
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