本例题目选自runoob.com经典100例,吃透这些例程,python的基础知识就基本掌握了,一起加油吧…
题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以2021年10月1日为例,应该先把前九个月的加起来,然后再加上1天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天
#!/usr/bin/python3
# coding: utf-8
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
day = int(input('请输入日期:'))
months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0 < month <= 12:
sum = months[month - 1]
else:
print ('输的日期有错误啦!')
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 (str(year)+'年'+ str(month)+'月'+ str(day) +'日'+'是这一年当中的第'+str(sum)+'天。')
第一部分:
#!/usr/bin/python3
# coding: utf-8
这两句,前面解释过了,最后一次赘述,第一行python解释器,第二行中文解释器
第二部分:
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
day = int(input('请输入日期:'))
这三行为一组,第一行year = int(input(‘请输入年份:’))为代表,了解一下:
1)year是我们定义的一个变量,这个变量我们是要存储年份的,而且这个年份在后面要进行算术运算,所以这个变量的值必须是数值型的。 python中数值型数据可以有四种:int(有符号整型)、long(长整型[也可以代表八进制和十六进制])、float(浮点型)、complex(复数)。由于年份只有四位,又没有小数点,所以理论上讲year应该是int(整型)数据。
2)year后面的“=”是赋值符号,那么year赋的是什么值呢,这个值由“=”号后面的表达式int(input(‘请输入年份:’))来决定。
3)表达式int(input(‘请输入年份:’))由两层函数来构成。先从最内层看起吧。
input( )函数是以字符串的方式获取用户输入,在python环境下输入input()后,系统会出现一个光标,一闪一闪的,这就是在等用户输入内容,等你输入了之后,这个输入值就作为一个字符串的形式形成了input()函数的输出。
例如输入一个1,则输出为下图所示,你会发现你输的1两边加个单引号,这表示这个1变成了字符串啦。。。
但是,这是很不直观的,对吧,一个光标一闪一闪光晶晶,啥意思,不知道的人会一头懵。。。所以呢,我们需要给人家一个提示,那就是在input()当中出现的用单引号引上的部分,这个作为提示信息出现。在本例子当中我们用了‘请输入年份:’这样的一句话,那么一般的情况下,大家都会明白,试一下吧:
input这一部分我们明白了,知道了input(‘请输入年份:’)的输出是‘2021’,那么现在year = int(input(‘请输入年份:’))就变成了:year = int(‘2021’),那么int()是什么意思呢,它的功能是将一个字符串或数字转换为整型,那么经此一变’2021‘就变成了数值型2021,那么year的值就是2021,而且是一个整值数,再参加一个什么加、减、乘、除的运算就是椰风挡不住了。。。
同理,这一部分的其他两行
month = int(input(‘请输入月份:’))
day = int(input(‘请输入日期:’))
就一目了然了吧。。。
第三部分:
months = (0,31,59,90,120,151,181,212,243,273,304,334)
if 0 < month <= 12:
sum = months[month - 1]
else:
print ('输的日期有错误啦!')
sum += day
第1行,定义了一个元组类型的变量,起名为months,months中12个基本元素,其值及含义为:
months[0]=0 #表示在本年中1月以前的天数有0天
months[1]=31 #表示在本年中2月以前的天数有31天——1月有31天
months[2]=59 #表示在本年中3月以前的天数有59天——1月有31天,2月有28天,加起来是59天,这只计算了平年,不包括闰年,闰年稍后算
months[3]=90 #表示在本年中4月以前的天数有90天——1月有31天,2月有28天,3月有31天,加起来是90天,这只计算了平年,不包括闰年,闰年稍后算
。
。
。
months[11]=334 #表示在本年中12月以前的天数有334天——1月有31天,2月有28天,3月有31天。。。自已加吧,反正没错。。。这只计算了平年,不包括闰年,闰年稍后算
第2—5行是一个分支语句if…else…,if后面的条件成立时执行sum = months[month - 1],不成立时执行else下面的print (‘输的日期有错误啦!’)语句。
那么我们看一下if后面的条件吧,条件是0 < month <= 12,month是我们在第二部分语句中进行赋值的,month = int(input(‘请输入月份:’)),所以month的值是我们输入的月份,这个条件(0 < month <= 12)表示的就是当我们输入的值在是1至12这个范围时,条件为真,如果不是1至12这个范围时,条件为假,如果为假,则print (‘输的日期有错误啦!’)。。。
如果为真,那么执行sum = months[month - 1],例如我们输入的是1,表示1月,类型转换后是整型数1,则month=1-1=0,所以sum=month[0]=0,说明1月前面有0天。如果我们输入的是12,则sum=months[12-1]=months[11]=334,说明12月前面的11个月里有334天。。。
第6句sum += day。。。前面已经把当月以前的天数算完了,那么再把当月的天数也加上吧。。。
最后结论:sum是一个整型变量,统计了我们输入的某年某月某天前面有多少天。。。但都是平年,那么闰年呢?
第四部分:
平年求完了,那就求闰年吧。。。
leap = 0
if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
leap = 1
if (leap == 1) and (month > 2):
sum += 1
第1行 定义变量leap,初值为0
第2、3行 对年份求闰年方法,眼熟吧,小学学过,不过。。。现在不会了,自已去理解吧,我不为难自已了。。。好奇怪,上了大学以后,两位数以上的加法,不用计算器,坚决不会算了。。。
需要说明的是,在第2行的if语句中用了逻辑运算符,逻辑运算符有三个not,and,or,优先级别就是not,and,or,所以理解的时候要先算and,出了结果后再算or,代两个年份算一下吧,我是一个懒骨头,但是这个世界不能都是懒骨头吧。。。
第4行,如果计算出来输入的年份是闰年,那么leap赋值1,sum再加一个1。。。妥了。。。
第五部分:
print (str(year)+'年'+ str(month)+'月'+ str(day) +'日'+'是这一年当中的第'+str(sum)+'天。')
输出结果。。。
构造了一个字符串,用+连接起来,所有的整型变量都变成字符串型。
这个例子讲完了,如果您是老手,这个例子没什么意义,如果您是新手,建议这样的例子盲敲几个,会很快提高对python的熟悉程度。。。
最后,加一个链接,python基础的东西很全,也很好,想不起来的时候查一查吧。。。
https://www.runoob.com/python/python-tutorial.html