首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python在‘:’的两边添加数字。22:11 + 22:22 = 44:33

Python在‘:’的两边添加数字。22:11 + 22:22 = 44:33
EN

Stack Overflow用户
提问于 2013-05-17 22:34:40
回答 7查看 206关注 0票数 1
代码语言:javascript
运行
复制
22:11  +  22:22  =  44:33
varible_A = ('22:11')
varible_B = ('22:11')

左边的数字(22)是分钟,右边的数字(11)是秒

我尝试将这两个数字相加,以得到

代码语言:javascript
运行
复制
total = 44:22

这是一个额外的奖励,但真的会帮助我*

有没有可能像对待时间一样对待数字...

代码语言:javascript
运行
复制
varible_A = ('22:50')
varible_B = ('22:30')

我想要45:20

而不是

代码语言:javascript
运行
复制
44:80
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-05-17 22:39:33

使用datetime.timedelta()对持续时间进行建模:

代码语言:javascript
运行
复制
from datetime import timedelta

def to_delta(value):
    minutes, seconds = map(int, value.split(':'))
    return timedelta(minutes=minutes, seconds=seconds)

var_a = to_delta('22:50')
var_b = to_delta('22:30')

var_a + var_b

然后,您可以将timedelta()对象转换回分钟+秒表示形式:

代码语言:javascript
运行
复制
def to_minutes_seconds(delta):
    return '{:02.0f}:{:02.0f}'.format(*divmod(delta.total_seconds(), 60))

演示:

代码语言:javascript
运行
复制
>>> var_a = to_delta('22:50')
>>> var_b = to_delta('22:30')
>>> var_a + var_b
datetime.timedelta(0, 2720)
>>> to_minutes_seconds(var_a + var_b)
'45:20'

或者,将timedeltastr()结果格式化为HH:MM:SS

代码语言:javascript
运行
复制
>>> str(var_a + var_b)
'00:45:20'

而且可能也适合你的需求。请注意,对于超过一个小时的增量,str()to_minutes_seconds()之间存在差异;前者显示小时、分钟和秒,后者仅显示分钟,其中分钟值可以超过60。表示超过24小时的增量将获得额外的天数前缀:

代码语言:javascript
运行
复制
>>> str(timedelta(minutes=65, seconds=10))
'1:05:10'
>>> to_minutes_seconds(timedelta(minutes=65, seconds=10))
'65:10'
>>> str(timedelta(minutes=(60*24)+1, seconds=10))
'1 day, 0:01:10'
票数 7
EN

Stack Overflow用户

发布于 2013-05-17 22:42:12

我认为这些应该用对象来表示,而不是一行理解等等。因此,我建议使用如下所示的类:

代码语言:javascript
运行
复制
class Time(object):
    def __init__(self,minutes,seconds):
        self.minutes = minutes
        self.seconds = seconds
    def __add__(self,other):
        return Time(self.minutes+other.minutes,self.seconds+other.seconds)
    def __str__(self):
        return "{0}:{1}".format(self.minutes,self.seconds)

A = Time(22,11)
B = Time(22,22)
print(A+B)

产生

代码语言:javascript
运行
复制
>>> 
44:33
票数 2
EN

Stack Overflow用户

发布于 2013-05-17 22:44:32

你可以使用类似的函数

代码语言:javascript
运行
复制
def add_with_column(*args):
    res = (0,0)
    for data in args:
        nums = map(int, data.split(':'))
        res = [i + j for i,j in zip(res, nums)]
    return ':'.join([str(res[0] + res[1]/60), str(res[1] % 60)])

>>> add_with_column('22:50', '22:30')
'45:20'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16611665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档