问题:编写一个要求用户输入秒数的程序,其工作方式如下:
一分钟内有60秒.如果用户输入的秒数大于或等于60,则程序应显示该秒数的分钟数.
一小时有3600秒.如果用户输入的秒数大于或等于3600,程序应显示该秒数的小时数.
一天有86400秒.如果用户输入的秒数大于或等于86400,则程序应显示该秒数的天数.
到目前为止我所拥有的:
def time():
sec = int( input ('Enter the number of seconds:'.strip())
if sec <= 60:
minutes = sec // 60
print('The number of minutes is {0:.2f}'.format(minutes))
if sec (<= 3600):
hours = sec // 3600
print('The number of minutes is {0:.2f}'.format(hours))
if sec <= 86400:
days = sec // 86400
print('The number of minutes is {0:.2f}'.format(days))
return
Run Code Online (Sandbox Code Playgroud)
Mr.*_*. B 51
这个花絮可用于显示不同粒度的经过时间.
我个人认为效率问题在这里几乎毫无意义,只要没有完全没有效率的事情.过早的优化是相当多的邪恶的根源.这足够快,它永远不会成为你的瓶颈.
intervals = (
('weeks', 604800), # 60 * 60 * 24 * 7
('days', 86400), # 60 * 60 * 24
('hours', 3600), # 60 * 60
('minutes', 60),
('seconds', 1),
)
def display_time(seconds, granularity=2):
result = []
for name, count in intervals:
value = seconds // count
if value:
seconds -= value * count
if value == 1:
name = name.rstrip('s')
result.append("{} {}".format(value, name))
return ', '.join(result[:granularity])
Run Code Online (Sandbox Code Playgroud)
..这提供了不错的输出:
In [52]: display_time(1934815)
Out[52]: '3 weeks, 1 day'
In [53]: display_time(1934815, 4)
Out[53]: '3 weeks, 1 day, 9 hours, 26 minutes'
Run Code Online (Sandbox Code Playgroud)
Gar*_*yde 47
这将转换Ñ秒进d天,ħ小时,米分钟,和小号秒.
from datetime import datetime, timedelta
def GetTime():
sec = timedelta(seconds=int(input('Enter the number of seconds: ')))
d = datetime(1,1,1) + sec
print("DAYS:HOURS:MIN:SEC")
print("%d:%d:%d:%d" % (d.day-1, d.hour, d.minute, d.second))
Run Code Online (Sandbox Code Playgroud)
要将秒(作为字符串)转换为日期时间,这也可能有所帮助.你得到天数和秒数.秒数可以进一步转换为分钟和小时.
from datetime import datetime, timedelta
sec = timedelta(seconds=(input('Enter the number of seconds: ')))
time = str(sec)
Run Code Online (Sandbox Code Playgroud)
def seconds_to_dhms(time):
seconds_to_minute = 60
seconds_to_hour = 60 * seconds_to_minute
seconds_to_day = 24 * seconds_to_hour
days = time // seconds_to_day
time %= seconds_to_day
hours = time // seconds_to_hour
time %= seconds_to_hour
minutes = time // seconds_to_minute
time %= seconds_to_minute
seconds = time
print("%d days, %d hours, %d minutes, %d seconds" % (days, hours, minutes, seconds))
time = int(input("Enter the number of seconds: "))
seconds_to_dhms(time)
Run Code Online (Sandbox Code Playgroud)
输出: 输入秒数:2434234232
结果: 28174 天 0 小时 10 分 32 秒
小智 7
def normalize_seconds(seconds: int) -> tuple:
(days, remainder) = divmod(seconds, 86400)
(hours, remainder) = divmod(remainder, 3600)
(minutes, seconds) = divmod(remainder, 60)
return namedtuple("_", ("days", "hours", "minutes", "seconds"))(days, hours, minutes, seconds)
Run Code Online (Sandbox Code Playgroud)
我不确定是否要这样做,但是我有类似的任务,如果该字段为零,则需要删除该字段。例如,86401秒将显示“ 1天1秒”,而不是“ 1天0小时0分钟1秒”。下面的代码可以做到这一点。
def secondsToText(secs):
days = secs//86400
hours = (secs - days*86400)//3600
minutes = (secs - days*86400 - hours*3600)//60
seconds = secs - days*86400 - hours*3600 - minutes*60
result = ("{} days, ".format(days) if days else "") + \
("{} hours, ".format(hours) if hours else "") + \
("{} minutes, ".format(minutes) if minutes else "") + \
("{} seconds, ".format(seconds) if seconds else "")
return result
Run Code Online (Sandbox Code Playgroud)
编辑:处理单词复数的更好的版本。
def secondsToText(secs):
days = secs//86400
hours = (secs - days*86400)//3600
minutes = (secs - days*86400 - hours*3600)//60
seconds = secs - days*86400 - hours*3600 - minutes*60
result = ("{0} day{1}, ".format(days, "s" if days!=1 else "") if days else "") + \
("{0} hour{1}, ".format(hours, "s" if hours!=1 else "") if hours else "") + \
("{0} minute{1}, ".format(minutes, "s" if minutes!=1 else "") if minutes else "") + \
("{0} second{1}, ".format(seconds, "s" if seconds!=1 else "") if seconds else "")
return result
Run Code Online (Sandbox Code Playgroud)
根据需要以相反的方式减去秒,并且不要将其称为时间;有一个具有该名称的包:
def sec_to_time():
sec = int( input ('Enter the number of seconds:'.strip()) )
days = sec / 86400
sec -= 86400*days
hrs = sec / 3600
sec -= 3600*hrs
mins = sec / 60
sec -= 60*mins
print days, ':', hrs, ':', mins, ':', sec
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
144134 次 |
| 最近记录: |