如何处理python中的复杂用户输入?

时间:2018-12-14 02:05:47

标签: python user-input

我是一个相当新的python用户,正在从事一个项目,该项目将被那些不太了解挑剔的python的人使用。对于该程序,我需要让用户输入告诉我视频的长度(分钟和秒),然后需要从该长度中减去一分八秒,然后打印出来。有什么办法可以处理“ 5分30秒”之类的输入?

4 个答案:

答案 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}}

我过分简化了代码,无法避免用户错误和边缘情况