2017-08-14 182 views
3

我有一個任務,我需要計算馬拉松的運行時間。 我給這個爲起點計算python中的小時和分鐘

start_hour = 3 
start_minute = 48 
length = 172 

基本上開始在3:48和它持續172分鐘。 我的任務是找到馬拉松結束的時間。endtime應該看起來像這種格式3:48分鐘和小時轉換爲字符串,並與「:」放在一起。 我花了1個半小時,但仍然無法解決它。 這是我所推出了:

endhour = start_hour + (length // 60) 
endminute = start_minute + (length % 60) 
end_minutee = endminute % 60 
format(endhour) 
endhourAsStr = str(endhour) 
end_minuteeAsStr = str(end_minutee) 
print(endhourAsStr + ":" + end_minuteeAsStr) 

但是當我打印的最後一個小時是更短的話,應該是1小時。 我在猜測我需要用>或<做些事情,但我真的無法弄清楚。我想我只需要最後一步。 offtopic:我對proggraming很陌生,我沒有任何經驗。

回答

1

我建議

endhour = start_hour + (length // 60) 
endminute = start_minute + (length % 60) 
endhour += endminute // 60 
endminute = endminute % 60 
endhour = endhour % 24 

print('{}:{}'.format(endhour, endminute)) 

初始化結束小時和分鐘後,像你一樣,你再提取分鐘小時從最終分鐘。

最後,調整時間是從0到23

3

你可以使用一些datetime弄虛作假得到保證正確的結果:

start_hour = 3 
start_minute = 48 
length = 172 

start = datetime.datetime(100, 1, 1, start_hour, start_minute, 0) 
end = start + datetime.timedelta(minutes=length) 
result = str(end.time()) 

如果你想擺脫:00的在年底秒,只需修改最後一行:

result = end.strftime('%H:%M') 

我更喜歡這種方法,因爲它佔優勢的情況下比如入手一部日子越來越近午夜到第二天結束。

+0

至於爲什麼一個虛擬的日期('100,1,1')必須使用:https://stackoverflow.com/questions/ 100210 /什麼是標準的方式來添加-n秒到日期時間在python – mkrieger1

+2

格式也可以更明確地使用'result = end.strftime('%H:% M')'。 – mkrieger1

+0

@ mkrieger1你是對的。我編輯了我的答案。 – stybl

1

如何在幾分鐘內藏在心裏,然後制定出輸出作爲以後打算?保持簡單易懂和閱讀:)

start_time = start_hour*60 + start_minute 
end_time = start_time + length 
end_hour, end_minute = end_time // 60, end_time % 60 
print('{}:{}'.format(end_hour, end_minute)) 
# 6:40 
1

使用divmod

start_hour = 3 
start_minute = 48 
length = 172 

elapsed_hours, elapsed_minutes = divmod(length, 60) 
extra_hour, finish_minute = divmod(start_minute + elapsed_minutes, 60) 
finish_hour = start_hour + elapsed_hours + extra_hour 
print("{hour}:{minute}".format(hour=finish_hour, minute=finish_minute)) 

這假定你不希望任何人在午夜/第二天之後完成任務。如果要考慮這種可能性,你可以採取的finish_hour模量與24