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

2024-03-29 14:56:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个非常新的python用户,正在从事一个项目,这个项目将被那些不了解python对输入的挑剔程度的人所使用。对于这个程序,我需要用户输入告诉我一个视频有多长(分和秒),然后我需要从这个长度中减去一分和八秒,然后打印出来。有没有一种方法可以处理输入,比如“5分30秒”?你知道吗


Tags: 项目方法用户程序视频程度多长
3条回答

如果格式始终相同(但可能不同),则可以使用正则表达式,然后将适当的字符串转换为整数/双精度。你知道吗

我认为你做得不对。最好有两个只接受整数的独立输入字段。一分一秒。如果您想要更高的精度(即毫秒),那么只需包含另一个输入字段。你知道吗

这里的主要问题是接受输入的格式。您可以强制用户以一种格式输入时间,例如,小时:分钟:秒,在这种情况下,下面的代码将计算总秒数:

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

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

一种可能性是检查用户输入中的每个子字符串,并将其赋值:

s = input("video length? ")

minutes, seconds = [int(x) for x in s.split() if x.isdigit()]

如果需要,castint(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

相关问题 更多 >