【问题标题】:How to do statements with time value如何做有时间价值的报表
【发布时间】:2017-08-16 01:58:52
【问题描述】:

在我的 Django python 代码中,我想根据一天中的时间问候访客。 它总是回馈“下午好”(即使不是),但不明白为什么。

这是来自我的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']

【问题讨论】:

  • 第二个 if 语句应该是 elif 吗?另外,“下午好”不应该是&lt;18(同时也是&gt;=12)和“晚上好是&gt;=18吗?我也很好奇你是如何测试的。你是否使用当前时间作为阅读通过系统时钟(使用 time.strftime())?还是用您选择的值覆盖它以测试所有值(不仅仅是计算机当前的时间?
  • 请注意,这不是您在会话中添加的内容。

标签: python django if-statement time


【解决方案1】:

观察

  • int(currentTime) 不会执行任何操作,因为您没有将生成的整数值分配给任何变量。我已在我的代码中将其更正为上一行,即currentTime = int(time.strfttime('%H'));

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

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

解决方案

尝试使用 ifelifelse 块,在其中明确定义每个问候语的范围。

例如:

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']

这意味着:

  • 如果小时数小于12,应该说“早上好”;

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

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

【讨论】:

    【解决方案2】:

    试试这个:

    #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']
    

    另外,你是如何测试的? 如上所述,您只能使用当前计算机的时间进行测试。 为了测试您的 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'
    ...
    

    一旦你验证了你的语句的逻辑,你就可以删除“测试”代码了。

    (注意我用的是Python,不是Django,所以语法上可能会有细微的差别,但逻辑是有效的。)

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      相关资源
      最近更新 更多