当我通过VPL运行它时,它通过了13/16个测试


year=int(input("Year: "))
while year<1583 or year>9999:
print("Out of allowed range 1583 to 9999")
year=int(input("Year: "))
leap_year=year%4==0 and (year%100 !=0 or year%400==0)

month=[1,12]
month=int(input("Month: "))
while month<1 or month >12:
print ("Out of allowed range 1 to 12")
month=int(input("Month: "))

day=int(input("Day: "))
if month==1 or month==2:
month+=12
year-=1        
if month in [1,3,5,7,8,10,12]:    
while day<1 or day> 31:
print("Out of allowed range 1 to 31")
day=int(input("Day: "))
if month in [4,6,9,11]:
while day<1 or day >30:
print("Out of allowed range 1 to 30")
day=int(input("Day: "))
if month==2:
if leap_year:
while day<1 or day>29:
print("Out of allowed range 1 to 29")
day=int(input("Day: "))

weekday = ( day + 13*(month+1)// 5 + year + year// 4- year//100+year// 400)% 7
if weekday==0:
print("It is a Saturday.")
elif weekday==1:
print("It is a Sunday.")
elif weekday==2:
print("It is a Monday.")
elif weekday==3:
print("It is a Tuesday.")
elif weekday==4:
print("It is a Wednesday.")
elif weekday==5:
print("It is a Thursday.")
elif weekday==6:
print("It is a Friday.")`

这是我写的代码,当我通过VPL运行它时,它通过了13/16个测试。没有通过的是:

year: 1900 month:2 day: 29
year: 2018 month:1 day: 32
year: 2018 month:2 day: 32
我一直在尝试不同的东西,但我不知道是什么错了。如何纠正它。请原谅我的技术水平不高,我才学了一个星期。

第一个问题是这个代码:

if month==1 or month==2:
month+=12
year-=1

如果month为1或2,则month为13或14,则下一个验证测试无法检测到该月的坏日子。

下一个问题,如果leap_year = False,如1900,month=2, day=29,则检查条件day < 1 or day > 28失败。

if month==2:
if leap_year:
while day<1 or day>29:
...

可以这样重写:

if month==2:
if leap_year:
max_day = 29
else:
max_day = 28
while day < 1 or day > max_day:
print(f"Out of allowed range 1 to {max_day}")
day=int(input("Day: "))

最新更新