【发布时间】:2021-02-15 01:43:33
【问题描述】:
作为 python 教程的一部分,我一直在尝试构建一个函数来计算给定日期的工作日。我知道有一种更简单的方法可以做到这一点,但我真的很想知道为什么我的功能不起作用。每当我输入日期时,它都会返回 None。我会很感激任何建议。 代码如下:
# check if year is leap year: division by 4 possible, division by 100 impossible unless division by 400 possible
def isYearLeap(year):
if year % 4 == 0:
if year % 100 == 0:
if year % 400 == 0:
return True
else:
return False
else:
return True
else:
return False
# calculate days in each month
def daysInMonth(year, month):
if month == 9 or month == 4 or month == 6 or month == 11:
return 30
elif month == 2:
if isYearLeap(year):
return 29
else:
return 28
elif month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
return 31
else:
return False
# find out day of the year
def dayOfYear(year, month, day):
century = year // 100
# different rule for January and February because of leap years`enter code here`
if month != 1 or month != 2:
y = year % 100
# Zeller's rule for calculating weekdays
weekday = (day + (2.6 * (month - 2) - 0.2) - 2 * century + y + y / 4 + century / 4) % 7
if weekday == 1:
return "Sunday"
elif weekday == 2:
return "Monday"
elif weekday == 3:
return "Tuesday"
elif weekday == 4:
return "Wednesday"
elif weekday == 5:
return "Thursday"
elif weekday == 6:
return "Friday"
elif weekday == 0:
return "Saturday"
else:
y = (year % 100) - 1
#Zeller's rule for calculating weekdays
weekday = (day + (2.6 * (month + 10) - 0.2) - 2 * century + y + y / 4 + century / 4) % 7
if weekday == 1:
return "Sunday"
elif weekday == 2:
return "Monday"
elif weekday == 3:
return "Tuesday"
elif weekday == 4:
return "Wednesday"
elif weekday == 5:
return "Thursday"
elif weekday == 6:
return "Friday"
elif weekday == 0:
return "Saturday"
print(dayOfYear(2000, 12, 31))
print(dayOfYear(1980, 1, 4))
【问题讨论】:
-
我觉得这个更适合codereview.stackexchange.com
-
与问题的原因无关,但仍然:
if month != 1 or month != 2条件始终为True。也许你的意思是if month != 1 and month != 2。 -
@Dani:不。代码审查是针对工作代码的,它侧重于样式和效率。
标签: python function date if-statement weekday