我一般对Python和编程都不熟悉,并且我已经在这个特定问题上工作了大约四个小时。 我正在尝试将时间(例如12:30)转换为“ if”语句中可用的内容。 到目前为止,这是我尝试过的:
time = input("Enter the time the call starts in 24-hour notation:\n").split(":")
if time >= 8:30 and time <= 18:00:
print("YES")
尝试执行该操作时,出现无效的语法错误。
当我尝试将时间转换为整数[callTime = int(time)]
时,收到一条错误消息,指出
int()参数必须为字符串
这只是我正在研究的整个问题的一部分,但是我想我可以找出其余的问题,如果我能从这个问题上获得一个切入点。 尽管我不相信我可以在这个特定问题上使用datetime;任何事情都会有所帮助。
编辑:更正了整数(时间)
答案 0 :(得分:1)
8:30
不是有效的数据类型。将其转换为整数以使其正常工作(8:30 = 8小时30分钟= 8 * 60 + 30分钟)
>>> time = input("Enter the time the call starts in 24-hour notation:\n").split(":")
Enter the time the call starts in 24-hour notation:
12:30
>>> time
['12', '30'] # list of str
>>> time = [int(i) for i in time] # will raise an exception if str cannot be converted to int
>>> time
[12, 30] # list of int
>>> 60*time[0] + time[1] # time in minutes
750
>>>
要在几秒钟内获得它,就像12:30:58
,请在最后一行中对time_in_sec = time[0] * 3600 + time[1] * 60 + time[2]
做同样的事情。
由于具有模数属性,可以保证只有一个“真实”时间对应于转换为整数的小时。
针对您的问题,创建一个返回整数的函数to_integer(time_as_list)
,然后将用户输入与to_integer('18:00'.split(':'))
和to_integer('8:30'.split(':'))
答案 1 :(得分:1)
手动处理时间并非易事。我建议您使用支持时间转换,比较等的datetime
模块。
from datetime import datetime as dt
t = input("...")
t_object = dt.strptime(t, "%H:%M")
if t_object >= dt.strptime("8:30", "%H:%M") and \
t_object <= dt.strptime("18:00", "%H:%M"):
do_your_stuff()
答案 2 :(得分:0)
您正在使用冒号,其中Python需要数字或变量名。在以下语句中:if time >= 8:30 and time <= 18:00:
,您需要将时间值放在引号("8:30"
)中,因为它们不是数字。但是,然后,您将遇到比较两个非数字值与>=
和<=
语句的问题。比较仅适用于实际值,而冒号会将值转换为字符串,而不是int或float。最好将stripping的时间转换为整数,以冒号进行比较和其他操作,然后可以根据需要重新添加冒号。
答案 3 :(得分:0)
我对这个问题的看法(没有datetime
):
answer = input("Enter the time the call starts in 24-hour notation:\n")
t = tuple(int(i) for i in answer.split(':'))
if (8, 30) <= t <= (18, 0):
print("YES")