题目:

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

程序分析:

以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于2时需考虑多加一天

个人的思路及代码:

  month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,31 ]
while True:
year = input("请输入年份:").strip()
month = input("请输入月:").strip()
day = input("请输入天:").strip()
if not year.isdigit() or not month.isdigit() or not day.isdigit():
print("您的输入有误请重新输入!")
continue
else:
year = int(year)
month = int(month)
day = int(day)
if month > 12 or day > 31 or day < 0:
print("您的输入有误请重新输入!")
continue

if (year % 4 == 0 and year %100 != 0) or year % 400 == 0:
if month > 2:
index_day = sum(month_days[:month-1]) + day + 1
else:
index_day = sum(month_days[:month-1]) + day
else:
index_day = sum(month_days[:month-1]) + day
print("这一天是一年中的第%s天" % index_day)

  

分析:这里考虑了大部分输入异常的情况,但是还是有输入错误但是不能检测出来的情况,比如输入4月31日不能检测出日期不正确。

再次修改增加判断条件,检测大小月和2月的问题

month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30,31 ]
while True:
year = input("请输入年份:").strip()
month = input("请输入月:").strip()
day = input("请输入天:").strip()
if not year.isdigit() or not month.isdigit() or not day.isdigit():
print("您的输入有误请重新输入!")
continue
else:
year = int(year)
month = int(month)
day = int(day)
if month > 12 or day > 31 or day < 0:
print("您的输入有误请重新输入!")
continue
elif month in [4,6,9,11] and day > 30 or month == 2 and day > 29:
print("您的输入有误请重新输入!")
continue if (year % 4 == 0 and year %100 != 0) or year % 400 == 0:
if month > 2:
index_day = sum(month_days[:month-1]) + day + 1
else:
index_day = sum(month_days[:month-1]) + day
else:
if month == 2 and day > 28:
print("您的输入有误请重新输入!")
continue
index_day = sum(month_days[:month-1]) + day
print("这一天是一年中的第%s天" % index_day)

  

其他参考解答:

参考1

  
  def leapyear(n):
return True if (n % 4 == 0 and n % 100 != 0) or n % 400 == 0 else False

days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ]
year, month, day = [int(x) for x in input('input year/month/day: ').split('/')]
#直接用列表解析式获取三个数据
day2 = sum(days[:month - 1]) + day
if leapyear(year) and month > 2:
day2 += 1
print(day2)

  

参考2

 import datetime
x=int(input("请输入年份xxxx:"))
y=int(input("请输入月份xx:"))
z=int(input("请输入日xx:"))
n1=datetime.date(x,y,z)
n2=datetime.date(x,1,1)
n3=n1-n2
n3=int(n3.days)+1
print("这是这一年的第%s天"%n3)

  

分析:这里用datetime模块避免了输入日期不正确的情况,如果输入不正确则直接报错。

(本文编号004,首发于2018年9月14日,修改于2018年9月15日)

Python:每日一题004的更多相关文章

  1. Python每日一题 004

    将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中. 代码 import redis import uuid # 创建实例 r=redis.Redis(&quo ...

  2. Python每日一题 003

    将 002 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. 代码 import pymysql import uuid def get_id(): for i in ra ...

  3. Python每日一题 002

    做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 在此生成由数字,字母组成的20位字 ...

  4. Python每日一题 009

    题目 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. 代码 参照网络上代码 # coding: utf-8 import os import re # ...

  5. Python每日一题 008

    题目 基于多线程的网络爬虫项目,爬取该站点http://www.tvtv.hk 的电视剧收视率排行榜 分析 robots.txt User-agent: Yisouspider Disallow: / ...

  6. Python每日一题 007

    题目 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. 很难客观的说每篇日记中最重要的词是什么,所以在这里就仅仅是将每篇日记中出 ...

  7. Python每日一题 006

    题目 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 如果只是单纯的通过将图片缩放到iPhone5分辨率大小,显然最后呈现出来的效果会很糟糕.所以等比例缩放到长( ...

  8. Python每日一题 005

    任一个英文的纯文本文件,统计其中的单词出现的个数. 代码 # coding:utf-8 import re def get_word(filename): fp=open(filename," ...

  9. Python每日一题 001

    Github地址:https://github.com/Yixiaohan/show-me-the-code Talk is Cheap, show me the code. --Linus Torv ...

随机推荐

  1. Delphi IdHTTP1下载文件防止假死 (

    在Form1中添加控件:两个Indy控件:IdAntiFreeze1,IdHTTP1;一个按钮 :Button1;一个进度条 :ProgressBar1 显示下载速度 procedure TForm1 ...

  2. Flask--(项目准备)--框架搭建,参数配置

    项目准备: 配置参数 项目配置: 新建工程: 配置虚拟环境: 通过配置类添加配置参数: Debug配置, 初始化数据库对象, Mysql配置及数据库创建 redis配置: 端口6379和域名: 创建存 ...

  3. centos6.5虚拟机无法访问外网解决办法

    安装了centos6.5虚拟机,使用的是桥接方式.把所有的配置已经写到/etc/sysconfig/network-scripts/ifcfg-eth0中后,发现内网可以ping通,外网却无法访问. ...

  4. commit lint规范化团队git提交信息

    一.快速提交符号angular编码规范的提交信息 1.命令行中安装commitizen: npm install -g commitizen commitizen init cz-convention ...

  5. 搭建Tomcat应用服务器、tomcat虚拟主机及Tomcat多实例部署

    一.环境准备 系统版本:CentOS release 6.6 (Final) x86_64 Tomcat版本:tomcat- JDK版本:jdk-8u25-linux-x64 关闭防火墙 软件包下载地 ...

  6. text-transform CSS

    text-transform  控制文本的大小写(只对英文起作用,对汉字无效) Example: <p class="p1">This is an HI Element ...

  7. ubuntu 16.04 mysql5.7.17 开放远程3306端口

    ubuntu 16.04 mysql5.7.17 开放远程3306端口 原创 2017年01月19日 20:33:27 标签: mysql / ubuntu 2644 开启mysql的远程访问权限 默 ...

  8. Java 四种引用介绍及使用场景

    强引用-FinalReference 介绍: 强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收,使用方式: String str = new String("s ...

  9. windows下Mysql8.0.12安装详解

    MySQL的安装过程还是比较繁琐,为了以后安装节约时间,将其详细安装过程总结如下: 1>下载对应版本 下载地址:https://dev.mysql.com/downloads/mysql/ 2& ...

  10. 记号一次更换IBM X3650M4主板后RAID无法启动的解决

    https://wenku.baidu.com/view/9d503ef367ec102de2bd89d7.html 强烈感谢上面分享文档的大侠!! 1.更换主板后,linux系统,无法加载引导.需要 ...