我正在尝试在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
我不知道为什么会这样,有人可以建议一个解决方案吗?
答案 0 :(得分:3)
day
增加的代码中没有可能的路径。
我认为你在>
和<
之间实际上感到困惑:你检查一天更大是否超过31或28,这是不可能的。我认为你的意思是if day < 31:
等等。
答案 1 :(得分:1)
首先,只需设置time.sleep(5)
而不是循环time.sleep(1)
5次就更容易了。最好有一个月份日期的值列表,而不仅仅是长短月份的2个列表。你的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,然后从那里增加年份。此外,您应该将day
和month
设置为1,因为那是他们的起始值。如果不是年末,请将月份增加并将日期设置为1。
else:
if month == 12:
year += 1
day = 1
month = 1
else:
month += 1
day = 1
print("{}/{}/{}".format(day, month, year))
我还使用string.format
语法来保持整洁。使用format
,它将替换您在字符串中传递给{}
的变量。它使得更容易布置字符串实际上应该看起来如何,并且它隐式地将变量转换为字符串格式。
答案 2 :(得分:0)
试试这个。
日期比较应为<
,而不是>
。到下个月时,我将日期设置为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