本文同步發表於個人網站
print("鐵人賽開始")
for day=1,30,1 do
print("第" .. day .. "天: 每天寫文章")
end
print("鐵人賽結束")
for
迴圈適合用於次數明確的情況。例如鐵人賽30天發文不間斷,每天發一篇,發完30完賽。向這樣知道進步條件(每天一篇),中止條件(30篇),就非常適合用 for
迴圈。
但有時候只知道中止條件,過程並不確定。像是在第n天,就寫n篇文章來囤稿,對我而言會是幾天完賽呢?
print("鐵人賽開始")
day = 1 -- 第幾天
completed = 0 -- 完成篇數
repeat
completed = completed + day
print("第" .. day .. "天: 每天寫文章,完成"..completed.."篇")
day = day + 1
until completed > 30
print("鐵人賽結束,完成篇數:"..completed) -- Output: 鐵人賽結束,完成篇數:36 -- (1+8)*8/2
鐵人賽開始
第1天: 每天寫文章,完成1篇
第2天: 每天寫文章,完成3篇
第3天: 每天寫文章,完成6篇
第4天: 每天寫文章,完成10篇
第5天: 每天寫文章,完成15篇
第6天: 每天寫文章,完成21篇
第7天: 每天寫文章,完成28篇
第8天: 每天寫文章,完成36篇
鐵人賽結束,完成篇數:36
需要每天寫文章,直到累積的文章超過30篇,也就完賽了。如果在第n天寫n篇,也只需要8天就完賽。
如果需要跑到一個為10的點。而當前位置不會超過該點,每次可以往該點接近1,嘗試列出接近的過程:
destination = 10 -- 終點位置
current_pos = 0 -- 目前位置
print([[馬拉松賽跑
============]])
print("終點位於:"..destination)
print("目前在:"..current_pos)
while current_pos < destination do
current_pos = current_pos + 1
print("往前跑1㎞,目前位於"..current_pos)
end
print("抵達終點,目前位於"..current_pos)
馬拉松賽跑
終點位於:10
目前在:0
往前跑1㎞,目前位於1
往前跑1㎞,目前位於2
往前跑1㎞,目前位於3
往前跑1㎞,目前位於4
往前跑1㎞,目前位於5
往前跑1㎞,目前位於6
往前跑1㎞,目前位於7
往前跑1㎞,目前位於8
往前跑1㎞,目前位於9
往前跑1㎞,目前位於10
抵達終點,目前位於10
在C/C++語言裡有while
和do-while
。就一般來說,如果是需要先判斷在執行使用while
,需要先執行在判斷用do-while
。類似的,Lua提供while
和repeat-until
,使用更語意化的寫法。
兩者通常可以轉換。使用何者我認為更取決於怎樣寫更接近自己思考的方式。