Python日期函数错误

2024-10-02 22:36:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python创建一个函数来显示日期。所以我可以看到程序运行,我把一天设置为五秒,所以每五秒它就会变成下一天,它会打印日期。你知道吗

我知道已经有一个用于显示日期的内置函数了,但是我对python非常陌生,我正在努力提高自己的技能(请原谅我的糟糕编码)

我已把开始日期定在2000年1月1日。你知道吗

这是我的密码:

import time

def showDate():
    year = 00
    month = 1
    day = 1
    oneDay = 5
    longMonths = [1, 3, 5, 7, 8, 10, 12]
    shortMonths = [4, 6, 9, 11]
    while True:
        time.sleep(1)
        oneDay = oneDay - 1
        if oneDay == 0:
            if month in longMonths:
                if day > 31:
                    day = day + 1
                else:
                    month = month + 1
                    day = 0
            if month == 2:
                if day > 28:
                    day = day + 1
                else:
                    month = month + 1
                    day = 0
            if month in shortMonths:
                if day > 30:
                    day = day + 1
                else:
                    month = month + 1
                    day = 0
            if day == 31 and month == 12:
                year = year + 1
            print(str(day) + '/' + str(month) + '/' + str(year))
            oneDay = 5

showDate()

但是,当我尝试运行程序时,这是我得到的输出:

>>> 
0/3/0
0/5/0
0/7/0
0/8/0
0/10/0
0/12/0
0/13/0
0/13/0
0/13/0

我不知道为什么会这样,有人能提出一个解决方案吗?你知道吗


Tags: 函数in程序运行iftimeyearelseday
3条回答

首先,设置time.sleep(5)比在time.sleep(1)上循环5次更容易。最好有一个包含月份天数的值列表,而不仅仅是长月份和短月份的两个列表。另外,您的while循环当前是不确定的,这是有意的吗?你知道吗

不管怎样,你的主要问题是比较day > 31,但是还有很多地方可以改进。正如我所说,我去掉了oneDay的用法,只做sleep(5),因为它更干净,并且有一个daysInMonths列表。你知道吗

import time

    def showDate():
        year = 00
        month = 1
        day = 1
        daysInMonths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

现在您只需一次if检查一天是否已到月末,如下所示:

        while True:
            time.sleep(5)
            if day < daysInMonths[month-1]:
                day += 1

这将检查当前月份列表的索引。它使用-1,因为列表从索引0开始,月份从1开始。(即,月份从1到12,但列表的索引是0到11)。我还使用了+=操作符,它基本上是var = var + something的缩写。它的工作原理是一样的,看起来更整洁。你知道吗

此测试包含所有月份,然后另一种情况是您需要增加月份。我建议您首先检查月份是否为12,然后从那里开始递增年份。此外,还应该将daymonth设置回1,因为这是它们的起始值。如果不是年底,增加月份并将day设置回1。你知道吗

            else:
                if month == 12:
                    year += 1
                    day = 1
                    month = 1
                else:
                    month += 1
                    day = 1
            print("{}/{}/{}".format(day, month, year))

我还使用了string.format语法来保持整洁。使用format,它将用您传入的变量替换字符串中的{}。它可以更容易地规划字符串的实际外观,并隐式地将变量转换为字符串格式。你知道吗

代码中不可能有day递增的路径。你知道吗

我认为你实际上混淆了><:你检查一天是大于31还是大于28,这从来都不是。我想你的意思是if day < 31:等等。你知道吗

试试这个。你知道吗

日比较应该是<,而不是>。下个月,我将日期设置为1,因为日历中没有日期0。我将elif用于随后的月份测试,因为所有的情况都是独占的。你知道吗

def showDate():
    year = 00
    month = 1
    day = 1
    oneDay = 5
    longMonths = [1, 3, 5, 7, 8, 10, 12]
    shortMonths = [4, 6, 9, 11]
    while True:
        time.sleep(1)
        oneDay = oneDay - 1
        if oneDay == 0:
            if month in longMonths:
                if day < 31:
                    day = day + 1
                else:
                    month = month + 1
                    day = 1
            elif month == 2:
                if day < 28:
                    day = day + 1
                else:
                    month = month + 1
                    day = 1
            if month in shortMonths:
                if day < 30:
                    day = day + 1
                else:
                    month = month + 1
                    day = 1
            if day == 31 and month == 12:
                year = year + 1
                month = 1
            print(str(day) + '/' + str(month) + '/' + str(year))
            oneDay = 5

相关问题 更多 >