社区讨论

使用年份回文得出日期,猜测是范围出现问题,但修改后仍错,求大佬指点

P2010[NOIP 2016 普及组] 回文日期参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lznj4m2a
此快照首次捕获于
2024/08/10 10:41
2 年前
此快照最后确认于
2024/08/10 11:26
2 年前
查看原帖
修改前代码:
PYTHON
s1_1 = input()
s2_1 = input()
s = 0

#切片年份
s1_2 = s1_1[0:4]
s2_2 = s2_1[0:4]

#切片月日
s1_3 = s1_1[4:8]
s2_3 = s2_1[4:8]

#判断是否为合法日期
def hefa(s):
    s1 = s[0:2]
    s2 = s[2:4]
    if (len(s1) != 2) or (len(s2) != 2):
        return False
    if (s1 == '01') or (s1 == '02') or (s1 == '03') or (s1 == '04') or (s1 == '05') or (s1 == '06') or (s1 == '07') or (s1 == '08') or (s1 == '09') or (s1 == '10') or (s1 == '11') or (s1 == '12'):
        pass
    else:
        return False
    if int(s[3::-1])%4 == 0:
        if (s1 == '02'):
            if(int(s2) > 29):
                return False
        elif (s1 == '04') or (s1 == '06') or (s1 == '09') or (s1 == '11'):
            if(int(s2) > 30):
                return False
        else:
            if (int(s2) > 31):
                return False
    else:
        if (s1 == '02'):
            if(int(s2) > 28):
                return False
        elif (s1 == '04') or (s1 == '06') or (s1 == '09') or (s1 == '11'):
            if(int(s2) > 30):
                return False
        else:
            if (int(s2) > 31):
                return False
    return True

#循环所有年份
for i in range(int(s1_2),int(s2_2)+1):
    #以年份倒序获取回文月日
    i = str(i)[3::-1]
    if hefa(i):
        s += 1

print(s)
修改后代码添加的范围判断函数:
PYTHON
#判断月日是否在范围内
def fanwei(i):
    i = int(i)
    if i>=int(s1_3) and i<=int(s2_3):
        return True
    else:
        return False
修改后完整代码:
PYTHON
s1_1 = input()
s2_1 = input()
s = 0

#切片年份
s1_2 = s1_1[0:4]
s2_2 = s2_1[0:4]

#切片月日
s1_3 = s1_1[4:8]
s2_3 = s2_1[4:8]

#判断是否为合法日期
def hefa(s):
    s1 = s[0:2]
    s2 = s[2:4]
    if (len(s1) != 2) or (len(s2) != 2):
        return False
    if (s1 == '01') or (s1 == '02') or (s1 == '03') or (s1 == '04') or (s1 == '05') or (s1 == '06') or (s1 == '07') or (s1 == '08') or (s1 == '09') or (s1 == '10') or (s1 == '11') or (s1 == '12'):
        pass
    else:
        return False
    if int(s[3::-1])%4 == 0:
        if (s1 == '02'):
            if(int(s2) > 29):
                return False
        elif (s1 == '04') or (s1 == '06') or (s1 == '09') or (s1 == '11'):
            if(int(s2) > 30):
                return False
        else:
            if (int(s2) > 31):
                return False
    else:
        if (s1 == '02'):
            if(int(s2) > 28):
                return False
        elif (s1 == '04') or (s1 == '06') or (s1 == '09') or (s1 == '11'):
            if(int(s2) > 30):
                return False
        else:
            if (int(s2) > 31):
                return False
    return True

#判断月日是否在范围内
def fanwei(i):
    i = int(i)
    if i>=int(s1_3) and i<=int(s2_3):
        return True
    else:
        return False

#循环所有年份
for i in range(int(s1_2),int(s2_2)+1):
    #以年份倒序获取回文月日
    i = str(i)[3::-1]
    if hefa(i) and fanwei(i):
        s += 1

print(s)

回复

0 条回复,欢迎继续交流。

正在加载回复...