我有一個函式可以將秒回傳到天、小時、分鐘和秒。但是我需要但是,如果輸出為 0,則不列印。例如,如果我輸入 176400 秒,我希望輸出為“2 天 1 小時”而不是“2 天 2 小時 0 分 0 秒”。
我到目前為止:
sec = int(input("Enter time in Seconds: "))
temp = sec
day = sec // 86400
sec %= 86400
hour = sec // 3600
sec %= 3600
mins = sec // 60
sec %= 60
if day >= 1:
print(f'time in minutes is {day}days {hour}hour {mins}min {sec}sec')
elif hour >= 1:
if mins == 0 and sec == 0:
print(f'time in minutes is {hour}hour')
elif mins == 0:
print(f'time in minutes is {hour}hour {sec}sec')
elif sec == 0:
print(f'time in minutes is {hour}hour {mins}min')
else:
print(f'time in minutes is {hour}hour {mins}min {sec}sec')
elif mins >= 1:
if sec == 0:
print(f'time in minutes is {mins}min')
else:
print(f'time in minutes is {mins}min {sec}sec')
elif sec >= 1:
print(f'time sec == {sec} sec')
我可以使用一堆“if”陳述句來繼續這段代碼,但是有沒有更短的方法來做到這一點?
uj5u.com熱心網友回復:
看起來您正在嘗試執行以下操作:
result = "time in minutes is"
if days >0:
result = f" {days} days"
if hours > 0:
result = f" {hours} hours"
if mins > 0:
result = f" {mins} minutes"
if secs > 0:
result = f" {secs} seconds"
uj5u.com熱心網友回復:
IIUC,你想要更短的方式,然后你可以使用datetime.timedelta如下:
import datetime
sec = int(input('Enter the number of seconds: '))
print(datetime.timedelta(seconds=sec))
輸出:
Enter the number of seconds: 86600
1 day, 0:03:20
您可以添加這些行以獲得所需的內容:
import datetime
sec = int(input('Enter the number of seconds: '))
str_tm = str(datetime.timedelta(seconds=sec))
day = str_tm.split(',')[0]
hour, minute, second = str_tm.split(',')[1].split(':')
print(f'{day}{hour} hour {minute} min {second} sec')
輸出:
Enter the number of seconds: 176400
2 days 1 hour 00 min 00 sec
uj5u.com熱心網友回復:
您可以將串列中的非零部分組裝起來并在最后加入。您還可以使用 divmod 函式來提取天數、小時數、分鐘數和秒數:
sec = int(input("Enter time in Seconds: "))
time = []
days,sec = divmod(sec,86400) # sec will get seconds in partial day
if days:
time.append(f"{days} day" "s"*(days>1))
hours,sec = divmod(sec,3600) # sec will get seconds in partial hour
if hours:
time.append(f"{hours} hour" "s"*(hours>1))
minutes,sec = divmod(sec,60) # sec will get seconds in partial minute
if minutes:
time.append(f"{minutes} minute" "s"*(minutes>1))
if sec:
time.append(f"{sec} second" "s"*(sec>1))
示例運行:
Enter time in Seconds: 176400
time is: 2 days, 1 hour
Enter time in Seconds: 1767671
time is: 20 days, 11 hours, 1 minute, 11 seconds
Enter time in Seconds: 259321
time is: 3 days, 2 minutes, 1 second
整個事情可以使用經過除數和時間單位的回圈來簡化:
sec = int(input("Enter time in Seconds: "))
time = []
for d,u in [(86400,"day"),(3600,"hour"),(60,"minute"),(1,"second")]:
n,sec = divmod(sec,d)
if n: time.append(f"{n} {u}" "s"*(n>1))
print("time is:",", ".join(time))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/334166.html
上一篇:對鍵不一致的字典串列進行排序
