【问题标题】:I am making a time display in python but it doesn't print what I want it to [duplicate]我正在 python 中显示时间,但它没有打印我想要的内容 [重复]
【发布时间】:2021-10-08 12:24:38
【问题描述】:

我的代码是:

import time

local_time = time.localtime()
time_string_d = time.strftime("%d", local_time)
time_string_m = time.strftime("%m", local_time)
time_string_y = time.strftime("%Y", local_time)
time_string_hm = time.strftime("%H:%M", local_time)
day_st = ['1', '21', '31']
day_nd = ['2', '22', '32']
day_rd = ['3', '23']
day_th = ['4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', 
'19', '20', '24', '25', '26', '27', '28', '29', '30']

def month():
    if time_string_m == '1':
        print('It is ' + time_string_hm)
        print('January ', day())
    if time_string_m == '2':
        print('It is ' + time_string_hm)
        print('February ', day())
    if time_string_m == '3':
        print('It is ' + time_string_hm)
        print('March ', day())
    if time_string_m == '4':
        print('It is ' + time_string_hm)
        print('April ', day())
    if time_string_m == '5':
        print('It is ' + time_string_hm)
        print('May ', day())
    if time_string_m == '6':
        print('It is ' + time_string_hm)
        print('June ', day())
    if time_string_m == '7':
        print('It is ' + time_string_hm)
        print('July ', day())
    if time_string_m == '8':
        print('It is ' + time_string_hm)
        print('August ', day())
    if time_string_m == '9':
        print('It is ' + time_string_hm)
        print('September ', day())
    if time_string_m == '10':
        print('It is ' + time_string_hm)
        print('October ', day())
    if time_string_m == '11':
        print('It is ' + time_string_hm)
        print('November ', day())
    if time_string_m == '12':
        print('It is ' + time_string_hm)
        print('December ', day())
    else:
        print('There was an error in the month detecting system.')

def day():
    if time_string_d in day_st:
        print('st')
    if time_string_d in day_nd:
        print('nd')
    if time_string_d in day_rd:
        print('rd')
    if time_string_d in day_th:
        print('th')
    else:
        print('There was an error in the day detecting system.')

我希望它打印以下内容:

现在是(当前时间例如:14:20)
(当前月份例如:十月,当天+ /st/nd/rd/th 例如8th)

像这样:

It is 14:20
October 8th

如果失败则如下:

月份检测系统出错

当天检测系统出错。

实际打印出来的内容:

It is 14:20
There was an error in the day detecting system.
October  None
There was an error in the month detecting system.

【问题讨论】:

  • 将多个 if 语句一个接一个地放置并不像您想的那样。
  • 您已经使用了strftime,那么为什么不使用它来构建整个字符串呢? time.strftime("%B %#d"); → “10 月 8 日”。 (在非 Windows 系统上是 time.strftime("%B %-d");
  • 唯一需要特殊处理的是“st, nd, rd, th”,参见stackoverflow.com/q/5891555/476。其余的可以完全使用正确的strftime 格式化字符串来完成。你应该使用像 babel 这样的本地化库,其中也包括“st, nd, rd, th” 处理……
  • 我同意 deceze 留下的注释,该链接的方法应该比链接 if 语句更容易处理

标签: python


【解决方案1】:

例如,您应该使用单个if-elif-else

x = 1
if x == 1:
    print(1)
elif x == 2:
    print(2)
else:
    print("else")

将打印1,同时

x = 1
if x == 1:
    print(1)
if x == 2:
    print(2)
else:
    print("else")

将打印 1 然后 else 因为它有 2 个 if 语句 - if 和 if-else。如果您想了解更多阅读链接文档,您可以在单个 if 语句中使用 0 个或多个 elifs。

【讨论】:

    【解决方案2】:

    这里的问题是您链接if 语句而不是elifs,当您的代码运行时,它会检查每一行,但 else 语句在以下任何情况下都会运行:

    if time_string_d in day_th:
    

    不正确。例如,您的函数如下所示:

    def day():
    
        if time_string_d in day_st:
            print('st')
    
        if time_string_d in day_nd:
            print('nd')
    
        if time_string_d in day_rd:
            print('rd')
    
        if time_string_d in day_th:
            print('th')
        else:
            print('There was an error in the day detecting system.')
    

    只有这部分对 else 语句很重要:

    if time_string_d in day_th:
        print('th')
    else:
        print('There was an error in the day detecting system.')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-26
      • 1970-01-01
      • 2015-11-02
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2020-08-22
      相关资源
      最近更新 更多