我是新来的和编程所以请放轻松。我知道几乎所有读这篇文章的人都比我知道得多,而且我可能做错了。
话虽这么说,这就是我要做的事情:
while True:
arrival = raw_input('Arrival time? Example 8:30 \n')
if arrival != "%s%s:%s%s" % (range(0, 1), range(0, 10), range(0, 7), range(0, 10):
arrival = raw_input('Follow the example: 8:30 \n)
break
elif arrival == "q":
print "escape velocity reached!!!"
return 0
“if”语句没有正确的语法,我甚至不知道这是否应该/将要首先编写此代码。基本上,我希望用户输入格式为1:11或11:11,否则我的代码会中断。请忽略elif,它正好在我测试时打破循环。
主要问题:
相关问题:
如何让python接受“正确”格式化字符串(XX:XX或X:XX)的许多不同组合?
有什么方法可以强迫某人在特定格式的容差范围内输入数据或提高raw_input容差?
有什么更好的方法来完成上述所有方法,还是有更好的方法来解决这个问题?
提前谢谢!
P.S。
答案 0 :(得分:3)
我将如何做到这一点:
time.strptime
来解析时间。格式字符串'%H:%M'
可以正常使用
例如,您可以更具体或尝试支持多种格式
如果你需要。try/except
处理无法正确解析的输入。 strptime
会提出
如果格式不匹配,则为ValueError
,因此您使用except
来处理time_ok
标志设置为True(因此退出while
循环)。代码:
import time
time_ok = False
while not time_ok:
arrival = raw_input('Arrival time? Example 8:30 \n')
if arrival == 'q':
print("Exiting.")
break
# Try to parse the entered time
try:
time_data = time.strptime(arrival, '%H:%M')
time_ok = True
# If the format doesn't match, print a warning
# and go back through the while loop
except ValueError:
print('Follow the example: 8:30 \n')
hours, minutes = time_data.tm_hour, time_data.tm_min
print(hours, minutes)
答案 1 :(得分:1)
如果我理解你,你希望人们输入从0:00到11:59的时间。您所要做的就是以下
while True:
arrival = raw_input("Please enter a time in the format hr:min (such as 8:30)")
if ":" not in arrival:
print("Please enter a time in the format hour:minute")
continue
else:
arrival_list = arrival.split(":")
if (int(arrival_list[0]) not in range(12)) or
(int(arrival_list[1]) not in range(60)):
print("Please enter a valid hour from 0-12 and a valid minute from 0-59")
else:
break
这样可以保持循环,直到您将格式化的时间作为输入。
从整体编程的角度来看,我认为使用time
模块可能更好,但我试图将其保持在我估计的技能水平。
答案 2 :(得分:1)
您需要使用正则表达式来匹配输入:
import re
format_ok = False
while format_ok:
arrival = raw_input('Arrival time? Example 8:30 \n')
if re.match("\d{1,2}:\d{2}", arrival):
#string format is OK - break the loop
format_ok = True