如何纠正Ruby倒计时定时器?


import time
def countdown(time_sec):
while time_sec:
mins, secs = divmod(time_sec, 60)
timeformat = "{:02d}:{:02d}".format(mins, secs)
print(timeformat, end='r')
time.sleep(1)
time_sec -= 1
print("Time ended.")

你在上面看到的Python代码工作得很顺利,并从给定的time_sec开始倒数。这个代码也每秒钟清理屏幕。我想写的代码是

#timer.rb(Ruby codes) here
def countdown time_sec

while time_sec
mins, secs = time_sec.divmod(60)[0], time_sec.divmod(60)[1]
timeformat = "%02d:%02d" % [mins, secs]
puts "#{timeformat}r"
sleep(1)
time_sec -= 1
end

puts "Time is ended."
end 

你在上面看到的Ruby代码以错误的方式工作。首先,秒被一个接一个地打印出来。但是我想像上面的Python代码一样更新单行。其次,当这个Ruby代码运行并倒计时到00:00时,它从-01:59开始倒计时。我怎样才能改正这个代码?

您使用的是puts,它添加了行结束符并使r混乱。此外,Python代码会一直运行到time_sec为零,该值被计算为false并导致循环停止。在Ruby中,0的值不是假的。

def countdown(time_sec)
time_sec.downto(0) do |t|
print "%02d:%02dr" % t.divmod(60)
sleep 1
end
end

最新更新