Python:每日一题004
题目:
输入某年某月某日,判断这一天是这一年的第几天?
程序分析:
以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的更多相关文章
- Python每日一题 004
将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中. 代码 import redis import uuid # 创建实例 r=redis.Redis(&quo ...
- Python每日一题 003
将 002 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. 代码 import pymysql import uuid def get_id(): for i in ra ...
- Python每日一题 002
做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 在此生成由数字,字母组成的20位字 ...
- Python每日一题 009
题目 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. 代码 参照网络上代码 # coding: utf-8 import os import re # ...
- Python每日一题 008
题目 基于多线程的网络爬虫项目,爬取该站点http://www.tvtv.hk 的电视剧收视率排行榜 分析 robots.txt User-agent: Yisouspider Disallow: / ...
- Python每日一题 007
题目 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. 很难客观的说每篇日记中最重要的词是什么,所以在这里就仅仅是将每篇日记中出 ...
- Python每日一题 006
题目 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 如果只是单纯的通过将图片缩放到iPhone5分辨率大小,显然最后呈现出来的效果会很糟糕.所以等比例缩放到长( ...
- Python每日一题 005
任一个英文的纯文本文件,统计其中的单词出现的个数. 代码 # coding:utf-8 import re def get_word(filename): fp=open(filename," ...
- Python每日一题 001
Github地址:https://github.com/Yixiaohan/show-me-the-code Talk is Cheap, show me the code. --Linus Torv ...
随机推荐
- 一个基于typelist的typemap
前面的typelist的e一个小扩展,http://www.cnblogs.com/flytrace/p/3551414.html. 可以插入pair<key_type, value_type& ...
- mysql 插入更新判断 ON DUPLICATE KEY UPDATE 和 REPLACE INTO
平时我们在设计数据库表的时候总会设计 unique 或者 给表加上 primary key 的限制条件.此时 插入数据的时候 ,经常会有这样的情况:我们想向数据库插入一条记录: 若数据表中存在以相同主 ...
- *浅解嵌入式中的BootLoader
本文只作为本人学习过程中的记录及时不时的突发奇想偶记.鄙人菜鸟一只,文中如有错误或疏漏,若读者肯不吝赐教,在下感激零涕.文章一直不断更新中 一.何为Bootloader 在嵌入式系统中,Bootloa ...
- vue+窗格切换+田字+dicom显示_02
环境:vue+webpack+cornerstone ide:vs code 需求:窗格设置+拼图设置 分析: 由于时间的原因,我也没有Baidu更好的显示窗格的方法,所以使用比较笨的方法,通过组件显 ...
- nowcoder 寻找(LCA)
这个题貌似是过的最少的? smeow一眼给出了一个单log的算法orz 首先求出x和y的lca, x和c的lca,y和c的lca, 然后分类讨论以下就行了 实际上只有三种情况 #include< ...
- 模块3 re + 正则表达式
1. 正则表达式 匹配字符串 元字符 . 除了换行 \w 数字, 字母, 下划线 \d 数字 \s 空白符 \n \t \b 单词的边界 \W 非xxx \D \S [] 字符组 [^xxx] 非xx ...
- 统计uint64的数对应二进制数的1的个数
// pc[i] is the populatio count of ivar pc [256]byte //统计出o~255每个数对应二进制上1的个数func init() { for i ...
- 【Linux命令】Linux下的tar压缩解压缩命令详解(转)
tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个 ...
- Servlet的几个关键知识点
1.ServletConfig ServletConfig是Servlet的配置文件.对应于web.xml中的<servlet></servlet>标签.ServletConf ...
- python大法好——模块(内置模块未完)
模块 模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块. Python模块有什么作用? 1.模块内有许多函数方法,利用这些方法可以更简单的完成许多工作.2.模块 ...