问题描述
语义错误:我怎么做错了?
from datetime import datetime
m2="23:00:00"
in_time = datetime.strptime(m2, "%H:%M:%S")
out_time = datetime.strftime(in_time, "%I:%M:%S %p")
print(out_time)
if out_time < "12:00:00" :
print('Good morning.')
elif "12:00:00" <= out_time < "04:00:00":
print('Good afternoon.')
else :
print('Good evening.')
答案(这是错误的):
上午11:00:00早上好。
1楼
您正在尝试比较时间字符串。 相反,您应该比较值,例如:
码:
def time_of_day_msg(in_time):
if in_time < dt.time(hour=12):
return 'Good morning.'
elif in_time < dt.time(hour=16):
return 'Good afternoon.'
else:
return 'Good evening.'
测试代码:
import datetime as dt
for time in ("1:00:00", "13:00:00", "23:00:00"):
print(time, time_of_day_msg(
dt.datetime.strptime(time, "%H:%M:%S").time()))
结果:
1:00:00 Good morning.
13:00:00 Good afternoon.
23:00:00 Good evening.
2楼
如果您希望获得上午,则需要一个从00:00到11:59的开始时间,就像24小时制一样,您将在12:00之后成为下午。
另一个问题是,您正在将时间转换为具有每小时2点的格式的字符串,然后比较该字符串以确定要打印的内容。
尝试比较时间,该时间可以通过构造函数而不是strptime
。
from __future__ import print_function
import datetime
in_time = dateteime.time(11, 15) # Time in H:M 11:15 AM
if in_time < datetime.time(12): # Before Noon
goodbit = "morning"
elif in_time < datetime.time(16): # Before 4 PM (we already know > 12:00)
goodbit = "afternoon"
else: # (After 16:00)
goodbit = "evening"
print("{} Good {}".format(in_time.strftime("%I:%M:%S %p"), goodbit)