字符串的算术运算

问题描述 投票:0回答:5

我有一根绳子。看起来像:

00:00:08
00:40:20
01:50:20
.....

等等。

第一行,00 是小时,接下来的 00 是分钟,08 是秒。我需要获得总秒数。我试图分割字符串并将第一个元素乘以 3600,第二个元素乘以 60,并保持第三个元素不变。因此,对于第一行,它将是 003600 + 0060 + 08。但是每当我尝试乘法而不是乘法时,它都会进行迭代。

if ':' in entry:
    t = entry
    # print(t)
    for item in t:
        t1,t2,t3 = t.split(":") 
        print(t1,t2,t3)
        hour.append(int(t1))
        hour1 = hour*3600
        minute.append(int(t2))
        minute1 = minute*60
        second.append(int(t3))
        second1 = second

但这不起作用。你能提供一些想法吗?

谢谢你。

已在上一节中描述。

python math sequence delimiter difference
5个回答
0
投票
  1. 首先你可以从原点str获取时间str
    s = """
    00:40:20
    01:50:20
    """
    ss = [t.strip() for t in s.split("\n") if t.strip() != ""]
    print(ss)

哪个输出

['00:40:20', '01:50:20']
  1. 然后你可以使用 datetime 包中的 timedelta 来获取秒数
    from datetime import datetime, timedelta
    delta = datetime.strptime(ss[1], "%H:%M:%S") - datetime.strptime(ss[0], "%H:%M:%S")
    print(delta.seconds)

你将会得到

4200

0
投票

日期时间模块的功能可以帮助解决这个问题。但是,如果您不想使用其中任何一个(例如 strptime),那么您可以编写自己的自定义函数。

这里的代码使用自定义函数和日期时间功能来实现相同的目标

from collections.abc import Iterator
from datetime import datetime

s = """\
00:40:20
01:50:20
"""

def total_seconds(s: str) -> int:
    def _tsg(s: str) -> Iterator:
        for n, m in zip(s.split(':'), [3600, 60, 1]):
            yield int(n) * m
    return sum(_tsg(s))

print('Using custom function')
for line in s.splitlines():
    print(line, total_seconds(line))

epoch = datetime(1900, 1, 1)
print('\nUsing datetime module')
for line in s.splitlines():
    d = datetime.strptime(line, '%H:%M:%S')
    print(line, int((d-epoch).total_seconds()))

输出:

Using custom function
00:40:20 2420
01:50:20 6620

Using datetime module
00:40:20 2420
01:50:20 6620

0
投票

如果你想用Basic Python以最简单的方式做到这一点,那么只需在换行符上拆分,然后在冒号上拆分并进行计算:

s = '''
00:40:20
01:50:20
'''

for t in s.strip().split('\n'):
    nums = t.split(':')
    secs = int(nums[0])*3600 + int(nums[1])*60 + int(nums[2])
    print(secs)

给予

2420
6620

0
投票

看看内置模块

datetime
,使用
datetime.strptime
解析字符串并获取您需要的时间量。

from datetime import datetime


def str2seconds(s):
    # parse the string and convert as seconds
    dt = datetime.strptime(s, "%H:%M:%S")    
    return sum(t*60**i for i, t in enumerate((dt.second, dt.minute, dt.hour)))


str_times = """
00:00:08
00:40:20
01:50:20
""".strip('\n')

# apply the conversion to each
print(*map(str2seconds, str_times.splitlines()), sep='\n')
#2420
#6620

0
投票

您需要先将字符串转换为整数。

例如,此代码:

print("1" * 5)
将输出“11111”而不是“6”。

这段代码应该可以工作:

timeString = """
02:11:59
11:34:06
"""

times = timeString.splitlines()

for time in times:
    if ":" in time:
        timeList = time.split(":")
        seconds = 3600 * int(timeList[0]) + 60 * int(timeList[1]) + int(timeList[2])

        print(seconds)
© www.soinside.com 2019 - 2024. All rights reserved.