题目:输入某年某月某日,判断这一天是这一年的第几天?


这道题看似简单,但实际要考虑的问题很多。首先我们要判断平年/闰年,因为它涉及到2月是否会多一天的问题;另外我们还要判断用户的每一个输入是否合法,不能整个13月,也不能整个2月30号,也不应该输入一个年份很奇怪的数字。只要这两点想通了,这道题就不难了。看代码:

def calc_nth_days():

    year = int(input('年份: \n'))    month = int(input('月份: \n'))   day = int(input('日期: \n'))

   All_Month = range(1,13) #限定月份只能是1-12月    Month_days = [31,28,31,30,31,30,31,31,30,31,30,31] #每一个月对应的天数(平年)    D = dict(zip(All_Month,Month_days))#将月份和当月天数做成一个字典,结果就是{1:31,2:28...12:31}

   days = 0

if int(year) not in range(1000,9999):        year = int(input('你输入的年份不科学,请重新输入年份:\n'))if int(month) not in All_Month:       month = int(input('你输入的月份不科学,请重新输入月份:\n'))if int(day) not in range(1,D.get(month)+1):#注意这里,D.get(Month)就是获取字典中对应月份的天数,并且日期必须在这个天数之内,+1 是因为range函数不包括最后一天,需要多加一天      day = int(input('你输入的日期无效,请重新输入:\n'))

if year % 400 == 0 or year % 4 == 0 and year % 100 != 0:       Month_days[1]=29 #判断如果满足条件的话那么2月天数改成29天

for i in range(1,month): #从1月计算到month月但是不包含month月,自己想原因!      days += Month_days[i]#逐月相加知道month月的前一个月

return '%d 年 %d 月 %d 日是这一年的第 %d 天' %(year,month,day,days + day) #注意days+day,表示还要加上用户输入的日期

print(calc_nth_days())

你思考一下这道题是不是也可以用递归来解决?请贴出代码!

字典 选取前100_100道 Python 经典练习题004相关推荐

  1. python中输出n开始的5个奇数_送你99道Python经典练习题,练完直接上手做项目,免费送了来拿吧...

    学python没练习题怎么行.今天,给大家准备一个项目: 99道编程练习,这些题如果能坚持每天至少完成一道,一定可以帮大家轻松 get Python 的编程技能.目前,这个项目已经获得了 2924 S ...

  2. python企业发放的奖金根据利润提成_100 道 Python 经典练习题002

    题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%:20万到40万 ...

  3. 100道python经典练习题

    链接:https://pan.baidu.com/s/1K0iuZKJukLoGQ8OBy7xq1Q 提取码:2s6q 链接长期有效,如有疑问,欢迎评论区交流.

  4. 21道Python经典面试题,助你offer拿到手软!

    导读:又到"金九银十"招聘黄金季,21道Python经典面试题助你offer拿到手软,收好不谢! 01 Python如何实现单例模式? Python有两种方式可以实现单例模式,下面 ...

  5. 100道Python编程练习题

    100+ Python challenging programming exercise 100道Python编程练习题,这些题如果能坚持每天至少完成一道,一定可以帮大家轻松 get Python 的 ...

  6. 百看不如一练 100道python经典题目,拿去参考学习练手(附答案)可复制

    近年来,Python在编程语言界里赚足了风头,无论是受欢迎程度,还是薪资待遇,都非常可观,相应的,Python岗位要求也越来越高,无论你是零基础还是老前辈,在Python面试中都不能轻视. 不打无准备 ...

  7. 50道MySQL经典练习题

    这个是网上流传的50道SQL练习题,最近拿来练习,刚做完,这里把我做的答案给大家做个参考,如有错误,还请告知. 另外,做题的时候先不要看答案(答案不唯一,只要满足要求即可),要有自己的一个思考过程,这 ...

  8. 50 道 Python 基础练习题(附答案详解)

    作者:Amo Xiang https://blog.csdn.net/xw1680/article/details/103546693 1.两个变量的交换 # -*- coding: utf-8 -* ...

  9. python 经典练习题一

    突然有一个想法,把自己练习过,及想要练习的题目或项目,发出来,一起来练习哇,先从Python基础知识开始,每天5道练习题,目前一共105道练习题,通过21天练习巩固Python的基础知识,来提升自己的 ...

最新文章

  1. IE不能為讀(written)問題解決(轉載)
  2. Leetcode题库 172.阶乘后的零(C实现)
  3. 网络攻防第十一周作业
  4. 2018java多线程面试题_2018年最全Java面试通关秘籍汇总集!
  5. Leetcode--239. 滑动窗口最大值
  6. Python 程序 可以一直输入 quit_从零开始学Python - 第002课:第一个Python程序
  7. bat截取字符串[转]
  8. java模拟银行_java模拟银行交易系统程序
  9. Openlayer:学习笔记之图标与提示信息
  10. 最新EyouCMS发布工具
  11. 【开源微信】微信登入公众号、小程序
  12. ACL2021_Lexicon Enhanced Chinese Sequence Labelling Using BERT Adapter
  13. 禁用360浏览器自动填充用户数据
  14. 2022 年最新博客专家申请流程
  15. 服务器后台日志文件的清理经验分享
  16. 计算机专业在广东省的录取分数线,深圳大学广东本科批稳居广东高校前4!2019各省录取分数线发布!...
  17. 【简介】流程化项目管理咨询师刘俊平介绍
  18. 机器学习和NLP面试总结
  19. Ardunio开发实例-MAX30102脉搏血氧饱和度和心率监测传感器
  20. 【地图学】地图投影的定义和分类

热门文章

  1. JavaScript函数setInterval()和setTimeout()正确的写法
  2. 有关Kill Session问题的讨论(旧文初发)
  3. SQL查询语句精华 笔记
  4. Java基础之数组练习
  5. Android Media Framework(1): 总纲
  6. 非均匀采样的kalman滤波
  7. ios ffmpeg(libfdk-aac) aac encode
  8. netcore之json序列化
  9. C#之Bcd码时间转成ToDateTime
  10. 查看Oracle的procedures,Oracle通过shell脚本查看procedure的信息