我是一个相当新的python用户,正在从事一个项目,该项目将被那些不太了解挑剔的python的人使用。对于该程序,我需要让用户输入告诉我视频的长度(分钟和秒),然后需要从该长度中减去一分八秒,然后打印出来。有什么办法可以处理“ 5分30秒”之类的输入?
答案 0 :(得分:1)
一种可能性是检查用户输入中的每个子字符串并将它们分配给值:
s = input("video length? ")
minutes, seconds = [int(x) for x in s.split() if x.isdigit()]
如果需要,强制转换int(x)
将它们保存为整数:
print(minutes) # 5
print(seconds) # 30
或者正则表达式解决方案可以是:
import re
minutes, seconds = map(int, re.findall('\d+', s))
print(minutes) # 5
print(seconds) # 30
现在您具有用于执行结果时间计算的值:
import datetime
# here, 100,1,1 are just placeholder values for year, month, day that are required to create a datetime object
usertime = datetime.datetime(100,1,1, minute=minutes, second=seconds)
calculation = usertime - datetime.timedelta(minutes=1, seconds=8)
现在您可以根据需要显示时间计算的结果
print('{minutes} minutes and {seconds} seconds'.format(minutes=calculation.minute, seconds=calculation.second))
# 4 minutes and 22 seconds
答案 1 :(得分:0)
如果格式始终相同(但可能不会相同),则可以使用正则表达式,然后将适当的字符串转换为整数/双精度数。
我认为您正在错误地进行此操作。最好有两个单独的输入字段,它们仅接受整数。一分钟,一秒钟。如果您想提高精度(即毫秒),则只需添加另一个输入字段即可。
答案 2 :(得分:0)
您可以尝试:
How long is the video (mm:ss)? 22:33
21:25
输出:
On
Python3 Demo-(请进入互动模式inp = input('Video duration: ').split(':')
hours = 0
mins = 0
secs = 0
if len(inp) >= 3:
hours = int(inp[-3])
if len(inp) >= 2:
mins = int(inp[-2])
secs = int(inp[-1])
total_secs = hours * 3600 + mins * 60 + secs - 68
)
答案 3 :(得分:0)
这里的主要问题是您将接受输入的格式。您可以强制用户以一种格式输入时间,例如 hours:minutes:seconds ,在这种情况下,下面的代码将计算总秒数:
{{1}}
我过分简化了代码,无法避免用户错误和边缘情况