用Python计算用户输入的时间

0 投票
5 回答
2515 浏览
提问于 2025-04-15 14:04

我需要用Python来计算用户输入的时间,不管他们是输入像3:30这样的格式,还是像3.5这样的浮点数。我不太确定该怎么做,所以想请教一下专家们的建议。

=== 编辑 ==================

为了更清楚地说明,我希望用户可以输入小时和分钟,或者只输入分钟。我希望他们能用两种格式输入时间,要么是hh:mm(比如3:30或03:30),要么是浮点数(比如3.5)小时。

我的总体目标是记录他们工作的时间。所以,我会把他们输入的时间加起来,得到一个总和。

5 个回答

0

首先,你需要一些约定。比如说,3.55 是指四点前五分钟、四秒前五毫秒,还是三分钟加上55/100的分钟/小时/秒?同样的道理也适用于 3:55。至少要区分点和冒号,说明点表示小数,而冒号是用来分隔小时、分钟和秒的。

虽然你没有说明“时间”是什么(是从某个时间开始还是整点?),但你也需要搞清楚这一点。

接下来,就是把你想要的时间格式确定好,然后不断转换输入,直到得到你想要的格式。比如说,你决定时间应该表示为 MM:SS(分钟用两位数字表示,中间用冒号分隔,秒也用两位数字表示),那么你需要在字符串中查找允许的字符,并相应地处理。例如,冒号和点同时出现是不允许的。如果有一个冒号,那就表示这是一个小数部分,所以你要把后面的部分当作60的分数来处理。

继续这样做,直到你得到最终的时间格式,然后就可以对这个“时间”进行你需要的操作。

我不知道你在什么样的限制下工作,但如果你有两个输入而不是一个“时间”输入,问题可能会简单一些:第一个输入是人们输入小时,第二个输入是输入分钟。当然,这样做的前提是你能把输入分开……

0

这里有几种可能的解决办法,但总会遇到一些模糊的情况,这样就会导致转换结果不确定。

总体来说,我建议你先把输入的内容分开,看看里面的分隔符是什么(可能是冒号、点或者其他符号),然后根据你自己定义的单位,把它们转换成秒。

另外,你也可以用一系列的尝试和捕获语句,测试不同的时间格式,看它们是否匹配。

我不太确定哪种方法在你的情况下最好……

1

你能清楚地定义用户可以输入的字符串格式吗?一旦你定义好了,如果这个格式简单的话,可以用简单的Python字符串表达式来匹配。如果格式比较复杂,可能就需要用到像pyparsing这样的工具了。而且,清晰的格式会让你更容易发现任何模糊的地方,这样你可以选择修改规则(确保没有输入字符串会产生歧义),或者至少明确如何解释这些字符串(并且把这个过程记录下来,方便用户理解!)。

编辑:根据提问者的进一步说明(hh:mm格式或者仅仅是浮点数表示的分钟),看起来这个问题比较简单:

  while True:
    s = raw_input('Please enter amount of time (hh:mm or just minutes):')
    try:
      if ':' in s:
        h, m = s.split(':')
      else:
        h = ''
        m = s
      t = int(h)*3600 + float(m)* 60
    except ValueError, e:
      print "Problems with your input (%r): %s" % (s, e)
      print "please try again!"
    else:
      break

你可能需要更细致地诊断用户输入可能出现的具体问题(当你接受并解析用户输入时,99%的精力都花在识别那些让人抓狂的错误上:让你的代码万无一失是非常困难的,因为人总是能想出各种各样的奇葩错误!),但这些建议应该能帮助你入门。

撰写回答