我目前正在使浏览器游戏自动化。在游戏中,您可以升级事物,并且升级需要花费多长时间,字符串如下:2d 4h 20m 19s 我想比较不同的升级时间,所以我想把时间缩短为几秒钟,以便比较。
我的想法是看几点,然后得到那个字母的索引,寻找字母前面的数字,但是我认为那是太多的代码行,尤其是如果我必须这样做的话不止一次。
我的主意是这样的:
if "d" in string:
a = string.index("d")
if a == 2:
b = string[a-2] * 10 + string[a-1]
seconds = b * 86400
答案 0 :(得分:0)
您可以使用.split()
拆分字符串,为您提供一个列表:['2d', '4h', '20m', '19s']
现在我们可以分别处理每个部分。
我们还可以使用转换字典根据后缀为我们提供要使用的数字:
mod = {"d": 60*60*24, "h": 60*60, "m": 60, "s": 1}
然后我们将列表求和,将每个数字乘以上面的mod:
sum(int(value[:-1]) * mod[value[-1]] for value in ds.split())
这等效于:
total = 0
for value in ds.split():
number = int(value[:-1]) # strip off the units and convert the number to an int
unit = value[-1] # take the last character
total += number * mod[unit]
其中ds
是日期字符串输入。
答案 1 :(得分:0)
下面,我尝试将过程分为几个基本步骤:
In [1]: timestring = '2d 4h 20m 19s'
Out[1]: '2d 4h 20m 19s'
In [2]: items = timestring.split()
Out[2]: ['2d', '4h', '20m', '19s']
In [3]: splititems = [(int(i[:-1]), i[-1]) for i in items]
Out[3]: [(2, 'd'), (4, 'h'), (20, 'm'), (19, 's')]
In [4]: factors = {'h': 3600, 'm': 60, 's': 1, 'd': 24*3600}
Out[4]: {'h': 3600, 'm': 60, 's': 1, 'd': 86400}
In [5]: sum(a*factors[b] for a, b in splititems)
Out[5]: 188419
就像每个代码一样,这有一些基本假设:
答案 2 :(得分:0)
在时间增量上有一个有用的total_seconds()
方法。
给出
import datetime as dt
names = ["weeks", "days", "minutes", "hours", "seconds"]
s = "2d 4h 20m 19s"
代码
做出重新映射的名称/值对的字典,并传递给timedelta
:
remap = {n[0]: n for n in names}
name_time = {remap[x[-1]]: int(x[:-1]) for x in s.split()}
td = dt.timedelta(**name_time)
td.total_seconds()
# 188419.0