鱼C论坛

 找回密码
 立即注册
查看: 950|回复: 7

[已解决]部分代码不理解 求指教

[复制链接]
发表于 2018-6-9 10:08:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. year = int(input('year:'))
  2. month = int(input('month:'))
  3. day = int(input('day:'))
  4. months = (0,31,59,90,120,151,181,212,243,273,304,334) # 这句不太理解
  5. if 0 < month and month <= 12:
  6.     sum = months[month - 1]  # 还有这句
  7. else:
  8.     print('亲,一年只有12个月!')
  9. sum += day# 还有这句
  10. l = 0
  11. if year % 4 == 0 or year % 400 == 0:# 还有这句
  12.     l = 1
  13. if l == 1 and month > 2:# 还有这句
  14.     sum += 1# 还有这句
  15. print('这是 %s 年的第 %s 天!' % (year,sum))# 还有这句
复制代码
最佳答案
2018-6-9 11:10:04
  1. year = int(input('year:'))
复制代码

第一行代码是输入年份,后面会判断它是闰年还是平年
  1. month = int(input('month:'))
复制代码

第二行代码是输入月份,后面会计算到它这个月之前的总天数
  1. day = int(input('day:'))
复制代码

第三行代码计算输入天数,后面会和月数折算成天数后的值相加
  1. months = (0,31,59,90,120,151,181,212,243,273,304,334)
复制代码

第四行你不理解的这行代码是一个元组(元组和列表是很相似的,但是两者还是有区别的,区别在于元组中的元素是不可以改变的,而列表中的元素是可改变的),这个元组的作用是将1到12个月的累加天数存在其中,为后面的计算提供数值
  1. if 0 < month and month <= 12:
  2.     sum = months[month - 1]  
  3. else:
  4.     print('亲,一年只有12个月!')
复制代码

这段代码的作用是去判断用户输入的月数是否满足要求,如果不满足要求则提示用户(亲,一年只有12个月)
满足条件执行的代码:
  1. sum = months[month - 1]  
复制代码

这句就是我之前所说的months这个元组为后面的计算提供数值的作用,提供用户输入的月数来获得对应的月数累加天数。
我知道你不明白的是为什么
month - 1
对吧?因为元组和列表一样的他们的第一个元素是以下标0开始的,你去数months元组的个数是12个但是下标应该是从0到11,所以用户输入的month要减一,这样才能取得用户输入的月数的对应天数。
例如:用户输入的month值是3
第一步会去判断是否满足要求
满足要求就会执行
  1. sum = months[month - 1]  
复制代码

把数值带进去执行应该是:
  1. sum = months[3 - 1]  
复制代码

结果:
  1. sum = 59  
复制代码

如果是平年的话到三月份就是59天,因为一月份31天二月份28天
后面一句:
  1. sum += day
复制代码

这句就是将刚刚将months中的值赋值给sum后的值再和用户输入的day的值相加
  1. l = 0
复制代码

这个变量的赋值是为了后面判断是不是闰年,如果是就将其赋值1,因为闰年比平年多一天!
  1. [code]if year % 4 == 0   or year % 400 == 0:
  2.     l = 1
复制代码

这段判断就是用来判断用户输入的year年份是不是闰年,如果是闰年就将l变量赋值为1,但是这个判断语句是不严谨的,因为判断是不是闰年要满足两个条件中的一个:
1.年份能够被400整除
2.年份能被4整除但不能被100整除
所以应该讲判断代码修改成如下代码:
  1. [code]if (year % 4 == 0 and year %100 !=)  or (year % 400 == 0):
复制代码

这样最为严谨!!!
  1. if l == 1 and month > 2:#
  2.     sum += 1
复制代码

这段代码是判断用户输入的年份是不是闰年,如果l变量的值为1就说明是闰年,因为前面一段代码判断是闰年就会将l变量的值赋值为了1,and是并且的意思,并且满足用户输入的月数是大于2的,因为只有大于了2才会涉及到是闰年还是平年,因为闰年二月份有29天而平年二月份有28天。
最后一行代码:
  1. print('这是 %s 年的第 %s 天!' % (year,sum))
复制代码

其中
%s
是字符串的格式化输出,就是将year的值和sum的值传入对应的%s 所占的位置处,注意必须要一一对应!
这是一个知识点我建议你可以去看看格式化输出方面的内容(建议你百度一下Python格式化输出)。
或者看一下甲鱼老师的这篇帖子:
http://bbs.fishc.com/thread-92997-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-6-9 10:31:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-6-9 10:53:13 | 显示全部楼层
sum += day# 还有这句   ===>  sum = sum+day
看后面的表达式 ,前面的跟后面的意思是一样的
  1. 第几个月        天数        计算
  2. 0        0        0
  3. 1        31        31
  4. 2        59        31+28
  5. 3        90        31+28+31
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-9 10:55:47 | 显示全部楼层
ywhyme 发表于 2018-6-9 10:53
sum += day# 还有这句   ===>  sum = sum+day
看后面的表达式 ,前面的跟后面的意思是一样的

sum = months[month - 1] 这句呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-9 11:10:04 | 显示全部楼层    本楼为最佳答案   
  1. year = int(input('year:'))
复制代码

第一行代码是输入年份,后面会判断它是闰年还是平年
  1. month = int(input('month:'))
复制代码

第二行代码是输入月份,后面会计算到它这个月之前的总天数
  1. day = int(input('day:'))
复制代码

第三行代码计算输入天数,后面会和月数折算成天数后的值相加
  1. months = (0,31,59,90,120,151,181,212,243,273,304,334)
复制代码

第四行你不理解的这行代码是一个元组(元组和列表是很相似的,但是两者还是有区别的,区别在于元组中的元素是不可以改变的,而列表中的元素是可改变的),这个元组的作用是将1到12个月的累加天数存在其中,为后面的计算提供数值
  1. if 0 < month and month <= 12:
  2.     sum = months[month - 1]  
  3. else:
  4.     print('亲,一年只有12个月!')
复制代码

这段代码的作用是去判断用户输入的月数是否满足要求,如果不满足要求则提示用户(亲,一年只有12个月)
满足条件执行的代码:
  1. sum = months[month - 1]  
复制代码

这句就是我之前所说的months这个元组为后面的计算提供数值的作用,提供用户输入的月数来获得对应的月数累加天数。
我知道你不明白的是为什么
month - 1
对吧?因为元组和列表一样的他们的第一个元素是以下标0开始的,你去数months元组的个数是12个但是下标应该是从0到11,所以用户输入的month要减一,这样才能取得用户输入的月数的对应天数。
例如:用户输入的month值是3
第一步会去判断是否满足要求
满足要求就会执行
  1. sum = months[month - 1]  
复制代码

把数值带进去执行应该是:
  1. sum = months[3 - 1]  
复制代码

结果:
  1. sum = 59  
复制代码

如果是平年的话到三月份就是59天,因为一月份31天二月份28天
后面一句:
  1. sum += day
复制代码

这句就是将刚刚将months中的值赋值给sum后的值再和用户输入的day的值相加
  1. l = 0
复制代码

这个变量的赋值是为了后面判断是不是闰年,如果是就将其赋值1,因为闰年比平年多一天!
  1. [code]if year % 4 == 0   or year % 400 == 0:
  2.     l = 1
复制代码

这段判断就是用来判断用户输入的year年份是不是闰年,如果是闰年就将l变量赋值为1,但是这个判断语句是不严谨的,因为判断是不是闰年要满足两个条件中的一个:
1.年份能够被400整除
2.年份能被4整除但不能被100整除
所以应该讲判断代码修改成如下代码:
  1. [code]if (year % 4 == 0 and year %100 !=)  or (year % 400 == 0):
复制代码

这样最为严谨!!!
  1. if l == 1 and month > 2:#
  2.     sum += 1
复制代码

这段代码是判断用户输入的年份是不是闰年,如果l变量的值为1就说明是闰年,因为前面一段代码判断是闰年就会将l变量的值赋值为了1,and是并且的意思,并且满足用户输入的月数是大于2的,因为只有大于了2才会涉及到是闰年还是平年,因为闰年二月份有29天而平年二月份有28天。
最后一行代码:
  1. print('这是 %s 年的第 %s 天!' % (year,sum))
复制代码

其中
%s
是字符串的格式化输出,就是将year的值和sum的值传入对应的%s 所占的位置处,注意必须要一一对应!
这是一个知识点我建议你可以去看看格式化输出方面的内容(建议你百度一下Python格式化输出)。
或者看一下甲鱼老师的这篇帖子:
http://bbs.fishc.com/thread-92997-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-9 11:18:33 | 显示全部楼层
同学,冲得太快了,前面基础没打牢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-9 14:14:23 | 显示全部楼层
格式化输出 格式化指的是什么意思 不太理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-10 10:22:14 | 显示全部楼层
0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 20:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表