例子来源
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天:
原来的代码
这是给出的参考代码
// An highlighted block
#!/usr/bin/python
# -*- coding: UTF-8 -*-
year = int(raw_input('year:\n'))
month = int(raw_input('month:\n'))
day = int(raw_input('day:\n'))
months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0 < month <= 12:
sum = months[month - 1]
else:
print 'data error'
sum += day
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
leap = 1
if (leap == 1) and (month > 2):
sum += 1
print 'it is the %dth day.' % sum
自己设计的代码
我觉得我设计的有优化的感觉
输入只有一次,设计的过程中有好几处错误
这里总结一下,一是运用replace时,没有重新赋值到s
也就是
s.replace('年','s')
s.replace('月','s')
s.replace('日','s')
放进idle试了试每次替换都没有保存,导致后面的错误
后来改为
s=s.replace('年','s')
s=s.replace('月','s')
s=s.replace('日','s')
解决了这一问题。还是太年轻了
一开始想用正则提取字符串中的数字,后来发现可以不用,利用replace+splite就解决了
最后的代码
最终代码
s= input('input date(for example :2012年12月21日):')#交互输入
t=s
s=s.replace('年','s')
s=s.replace('月','s')
s=s.replace('日','s')
ls=s.split('s')
y = eval(ls[0])
m = eval(ls[1])
r = eval(ls[2])#提取年月日数字
all = 0
d=[0,31,28,31,30,31,30,31,31,30,31,30]#每月的天数,第一月是为0,加上日中的数则为实际的第几天
#后面往后推
if y%100==0:
if y%400==0:
d[2]=29
else:
if y%4==0:
d[2]=29 #判断闰年替换二月天数
#计算除了日的前几个月的天数计算
for i in range(0,m):
all+=d[i]
print('{}是{}年的第{}天'.format(t,y,(all+r)))