Python 如何处理具有时间值的语句

Python 如何处理具有时间值的语句,python,django,if-statement,time,Python,Django,If Statement,Time,在我的Django python代码中,我想根据一天中的时间向访客致意。 它总是回复“下午好”(尽管不是),但不明白为什么。 这是来自my views.py的: #import time #import datetime #from time import strftime #from django.utile import timezone def greet(request): request.session['greet'] = 'Good day' currentTim

在我的Django python代码中,我想根据一天中的时间向访客致意。 它总是回复“下午好”(尽管不是),但不明白为什么。

这是来自my views.py的:

#import time
#import datetime
#from time import strftime
#from django.utile import timezone

def greet(request):
    request.session['greet'] = 'Good day'
    currentTime = time.strftime('%H')
    int(currentTime)
    if currentTime < 12 :
        request.session['greet'] = 'Good morning'
    if currentTime >= 18 :
        request.session['greet'] = 'Good afternoon'
    else :
        request.session['greet'] = 'Good evening'

    return request.session['greet']
#导入时间
#导入日期时间
#从时间导入strftime
#从django.utile导入时区
def问候(请求):
request.session['greet']='Good day'
currentTime=time.strftime(“%H”)
int(当前时间)
如果currentTime<12:
请求。会话['greet']=“早上好”
如果currentTime>=18:
请求。会话['greet']=“下午好”
其他:
请求。会话['greet']=“晚上好”
返回请求。会话['greet']
试试这个:

#import time
#import datetime
#from time import strftime
#from django.utile import timezone

def greet(request):
request.session['greet'] = 'Good day'
currentTime = time.strftime('%H')
int(currentTime)
if currentTime < 12 :
    request.session['greet'] = 'Good morning'
elif currentTime < 18 :
    request.session['greet'] = 'Good afternoon'
else :
    request.session['greet'] = 'Good evening'

return request.session['greet']
#导入时间
#导入日期时间
#从时间导入strftime
#从django.utile导入时区
def问候(请求):
request.session['greet']='Good day'
currentTime=time.strftime(“%H”)
int(当前时间)
如果currentTime<12:
请求。会话['greet']=“早上好”
elif currentTime<18:
请求。会话['greet']=“下午好”
其他:
请求。会话['greet']=“晚上好”
返回请求。会话['greet']
还有,你是如何测试的? 如上所述,您只能使用当前计算机的时间进行测试。 为了测试if/elif/else语句逻辑,您需要能够为currentTime输入不同的值(您不想等待计算机的时钟改变或重置计算机时钟!)

一种方法是覆盖currentTime的值。
例如:

...
currentTime = time.strftime('%H')   
int(currentTime)

# temp code for testing various values of currentTime. 
# Try values: below, at, and above each "breakpoint" for the if/elif/else statements.
# For example: 5, 12, 13, 17, 18, 22
currentTime = 5

if currentTime < 12 :
    request.session['greet'] = 'Good morning'
...
。。。
currentTime=time.strftime(“%H”)
int(当前时间)
#用于测试currentTime各种值的临时代码。
#Try值:if/elif/else语句的每个“断点”的下方、处和上方。
#例如:5、12、13、17、18、22
当前时间=5
如果currentTime<12:
请求。会话['greet']=“早上好”
...
一旦验证了语句的逻辑,就可以删除“测试”代码

(注意,我使用的是Python,但不是Django,因此语法上可能略有不同,但逻辑是有效的。)

  • int(currentTime)
    将不起任何作用,因为您没有将生成的整数值赋给任何变量。我已经在我的代码中更正了这一点,使其位于上面的一行,即
    currentTime=int(time.strfttime(“%H”)

  • 您已经注释掉了您的
    import
    语句,因此我认为这些包中的任何一个都不会被导入(虽然还没有使用Django,所以我不确定这一个)

  • 就目前而言,你永远不会得到一个早上好的问候。如果是在早上,问候语将设置为“早上好”,然后下一个
    如果
    /
    否则将运行
    语句-如果时间大于
    18小时,它将说“下午好”,否则它将说“晚上好”

解决方案 尝试使用
if
elif
else
块,在该块中可以清楚地定义每个问候语的范围

例如:

def greet(request):
    request.session['greet'] = 'Good day'
    currentTime = int(time.strftime('%H'))
    if currentTime < 12 :
        request.session['greet'] = 'Good morning'
    elif currentTime < 18 :
        request.session['greet'] = 'Good afternoon'
    else :
        request.session['greet'] = 'Good evening'

    return request.session['greet']
def问候(请求):
request.session['greet']='Good day'
currentTime=int(time.strftime('%H'))
如果currentTime<12:
请求。会话['greet']=“早上好”
elif currentTime<18:
请求。会话['greet']=“下午好”
其他:
请求。会话['greet']=“晚上好”
返回请求。会话['greet']
这意味着:

  • 如果时间少于12小时,则应说“早上好”

  • 如果小时数大于
    11
    且小于
    18
    (记住
    如果
    /
    elif
    /
    否则
    块总是在第一个条件下退出,这是真的,因此因为它没有在第一个条件下退出,我们知道小时不少于
    12
    ,因此它必须至少大于
    11
    )它应该说“下午好”

  • 否则(如果这两个条件都不成立,因此小时数大于
    17
    ),它会说“晚上好”


第二个
if
语句应该是
elif
?另外,“午安”不应该是针对
=12
)和“晚上好,是针对
=18
”?我也很好奇您是如何测试的。您是否使用系统时钟读取的当前时间(使用time.strftime())?或者,为了测试所有值(不仅仅是计算机当前拥有的时间),您是否用您选择的值覆盖它?请注意,这不是您将在会话中输入的内容。