我是新手,刚接触编程,所以请放轻松。我知道几乎所有读过这篇文章的人都比我知道的多,我可能做错了。
话虽如此,这就是我正在尝试做的事情:
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 容忍度的更好方法是什么?
完成上述所有工作的更好方法是什么,或者是否有更好的方法来解决这个问题?
提前致谢!
附:
- 我知道获得好的答案的唯一方法是提出一个好的问题...任何关于更好的问题格式的提示也很感激。
这是我将如何做到这一点:
- 使用
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)
我是一名优秀的程序员,十分优秀!