社区讨论
使用年份回文得出日期,猜测是范围出现问题,但修改后仍错,求大佬指点
P2010[NOIP 2016 普及组] 回文日期参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lznj4m2a
- 此快照首次捕获于
- 2024/08/10 10:41 2 年前
- 此快照最后确认于
- 2024/08/10 11:26 2 年前
修改前代码:
PYTHONs1_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
修改后完整代码:
PYTHONs1_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 条回复,欢迎继续交流。
正在加载回复...