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日不能检测出日期不正确。

其他参考解答:

参考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日)

原文地址:https://www.cnblogs.com/Nicholas0707/p/9649471.html

时间: 2024-10-16 16:57:43

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

python每日一题:锁知识点

import time import threading def show1(): for i in range(1, 52, 2): lock_show2.acquire() print(i, end='') print(i+1, end='') time.sleep(0.2) lock_show1.release() def show2(): for i in range(26): lock_show1.acquire() print(chr(i + ord('A'))) time.slee

老男孩教育每日一题-2017-04-17:使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警

老男孩教育每日一题-2017-04-17: 使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警. 今天是老男孩教育每日一题陪伴大家的第29天.

&#8203;老男孩教育每日一题-第79天-命令风暴:打印出001 002 003 这样的格式的数字

题目: 打印出001 002 003 这样的格式的数字 参考答案 方法1:{}生成序列 [[email protected] ~]# echo 00{1..3} 001  002  003 方法2:seq法 [[email protected] ~]# seq -w 100 001 002 003 004 005 006 007 ---- [[email protected] ~]# seq -w 100 |sed -n '1,3p' 001 002 003 此法效率不高.尽量让第一次的结果越接

每日一题20180326

一.问题 1.1 统计脚本执行时间 如何统计脚本执行的时间? 1.2 让rm命令失效 要求用命令rm删除文件时提示如下禁止使用rm的提示,并使该效果永久生效. [[email protected] oldboy]# rm -f passwd Do not use rm command. 1.3 删除文件 删除/tmp/oldboy/下除passwd以外的其他文件. 1.4 打印 请打印/etc/passwd文件中的第2-5行 1.5 调换列 调换passwd文件里root位置和/bin/bash

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

老男孩教育每日一题-第126天-通过shell脚本打印乘法口诀表

问题背景: 生成9*9乘法表 [[email protected] ~]# seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}' 1x1=1 1x2=2   2x2=4 1x3=3   2x3=6   3x3=9 1x4=4   2x4=8   3x4=12  4x4=16 1x5=5

老男孩教育每日一题-第83天-binlog是什么?记录的什么?有几种工作模式及企业应用场景

参考答案 含义 binlog:是用于记录所有更新了数据的操作语句,语句以事件的形式保存,它描述数据的更改过程作用:用于实时备份数据,数据库的主从复制log_bin 打开记录binlog功能 binlog的查看 mysqlbinlog /home/mysql/binlog/binlog.000003 binlog的删除:可分为自动与手动删除 自动删除 能过binlog参数expire_logs_days来实现 show binary logs; show variables like "expir

&#8203;老男孩教育每日一题-第85天-下面这个脚本直接执行没有问题,在定时任务中有问题,什么原因?

脚本内容: [[email protected] scripts]# cat /server/scripts/ip.sh  #!/bin/bash IP=$(ifconfig eth0 |awk -F "[ :]+" 'NR==2{print $4}') echo "ip:$IP" >> /tmp/ip.txt 定时任务: [[email protected] scripts]# crontab -l * * * * * /bin/bash /serve

老男孩教育每日一题-第84天-两个文件,把第一个文件中的第2、3行内容添加到第二个文件的第3行后面

两个文件如下: [[email protected] ~]# cat 1.txt  111 222 333 [[email protected] ~]# cat 2.txt AAA bbb ccc ddd 要求修改后的文件 [[email protected] ~]# cat 2.txt  AAA bbb ccc 222 333 ddd `` 参考答案: 方法1: [[email protected] ~]# sed -n 2,3p 1.txt |xargs |sed -r 's# #\\n#g