如何在python中及时转换132之类的数字?

时间:2019-06-15 18:01:41

标签: python python-3.x

我想将数字1134转换为时间11:34。我看到了其他答案,但是我的问题有所不同。

我正在从语音识别中获取输入,因此,如果我说三十五点。输入将保存为135。

主要问题是输入的长度可以是15(2位)。请帮助我。

2 个答案:

答案 0 :(得分:0)

您可以使用除法和模块将数字分成100个大块,然后将其转换为带前导零的字符串,然后将其与“:”连接起来:

num = 132
result = ":".join( f"{num//10**i%100:02}" for i in (4,2,0) )

print(result) # '00:01:32'
  • 格式字符串,例如f"{n:02}"接受变量n的值,并使其成为2个带前导零的位置的字符串。 (即1->'01')
  • ":".join(...)获取一个字符串列表,并将它们连接成一个字符串,在列表中的每个项目之间放置“:”
  • ( ... for i in (4,2,0) )是列表理解。它将基于i的值(分别为4、2和0)生成一个3项列表,其中每个项。
  • num//10**i是num除以10乘以i的幂的整数。在列表推导(i将为4、2和0)内部,这将产生num // 10000,num // 100和num // 1。结果:0,1和132
  • %100是100的模。它将仅使用上面计算的数字的最后两位:0%100-> 0,1%100-> 1,132%100-> 32

所有这些结合在一起会产生格式化的时间

另一种方法(可能适用于旧版本的Python)是:

result = ":".join(str(10000+num)[-i:][:2] for i in (6,4,2))

如果不需要秒,则可以在第一个示例中将元组更改为(2,0)或在第二个示例中将元组更改为(4,2)。或简单地使用:result = f"{num//100%100:02}:{num%100:02}"

答案 1 :(得分:0)

  

主要问题是输入的长度可以是15(2位)。

我想,如果所有的4位数字都始终存在,那不是问题,对吧?

因此,给定数字x,请执行以下操作:

y = '{:04d}'.format(x)
z = y[:2]+':'+y[2:]
print(z)

或者,您可以执行以下操作:

y = '{:02d}:{:02d}'.format(x//100,x%100)
print(y)