【趣学Python算法100例】打鱼还是晒网

embedded/2024/9/25 3:14:56/

问题描述

中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起便开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。

问题分析

根据题意可以将解题过程分为以下三步:

  1. 计算从1990年1月1日开始至指定日期共有多少天。
  2. 由于“打鱼”和“晒网”的周期为5天,所以将计算出的天数用5去除。
  3. 根据余数判断他是在“打鱼”还是在“晒网”。

若余数为1,2,3,则他是在“打鱼”,否则是在“晒网”。

算法设计

本题采用数值计算算法,通过循环计算指定日期距离1990年1月1日的天数,过程中需要考虑闰年情况。闰年二月份有29天,而平年二月份有28天。闰年的判断依据可以通过以下逻辑进行描述:

  • 如果一个年份能够被4整除且不能被100整除,或者能够被400整除,那么该年份为闰年;
  • 否则,该年份不是闰年。

在Python中,判断一个数能否整除可以使用取余运算符“%”。改写后的判断闰年的代码逻辑如下:

python">def is_leap_year(year):return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)

这个函数会返回布尔值 True 表示闰年,False 表示平年。

确定程序框架

程序流程图如图1.11所示。

完整的程序

根据上面的分析,编写程序如下:

python">
from datetime import datetimedef is_leap_year(year):"""这个函数用来判断指定的年份是否为闰年参数:year (int):要检查的年份返回值:bool:如果是闰年返回 True,否则返回 False"""return (year % 4 == 0 and year % 100!= 0) or (year % 400 == 0)# 计算指定日期距离1990年1月1日的天数
def count_days_since_1990(year, month, day):"""计算从 1990 年 1 月 1 日到指定日期的天数参数:year (int):年份month (int):月份day (int):日期返回值:int:从 1990 年 1 月 1 日到指定日期的天数"""start_date = datetime(1990, 1, 1)current_date = datetime(year, month, day)delta = (current_date - start_date).days  # 直接计算天数差return deltaif __name__ == '__main__':while True:try:print("请输入指定日期 (格式: 年 月 日,如: 1999 1 31):")year, month, day = map(int, input().split())# 检查日期的合法性today = datetime(year, month, day)# 计算天数差total_days = count_days_since_1990(year, month, day)print(f"{year}{month}{day}日与1990年1月1日相差 {total_days} 天")# 根据余数判断今天打鱼还是晒网result = total_days % 5if 1 <= result <= 3:print("今天打鱼")else:print("今天晒网")except ValueError:print("输入的日期格式不正确,请重新输入!")

运行结果

vscode下运行程序,结果如下图所示。


http://www.ppmy.cn/embedded/116414.html

相关文章

【C语言】猜数字游戏

个人主页 &#xff1a; zxctscl 如有转载请先通知 文章目录 前言1. 随机数生成1.1 rand1.2 srand1.3 time1.4 设置随机数的范围 2. 猜数字游戏实现2.1 游戏菜单2.2 主函数部分2.3 game函数部分2.4 附代码2.5 优化代码 前言 前面学习的这些知识&#xff0c;我们就可以写一些稍微…

数据库性能优化之分表

markdown # 1 背景 在生产站点&#xff0c;我们发现 MySQL 任务表的数据超过了 1700 万行&#xff0c;占用了高达 23G 的空间&#xff0c;导致数据库性能急剧下降&#xff0c;并出现了大量的 504 错误。分析数据后发现&#xff0c;有两个客户疯狂地创建任务&#xff0c;其中一…

Python闭包与装饰日高级概念

在Python中&#xff0c;闭包&#xff08;Closure&#xff09;和装饰器&#xff08;Decorator&#xff09;是两个高级且强大的编程概念&#xff0c;它们在函数式编程和面向对象编程中扮演着重要角色。下面将详细讲解这两个概念。 一、闭包&#xff08;Closure&#xff09; 1. …

如何使用ssm实现基于VUE的儿童教育网站的设计与实现+vue

TOC ssm676基于VUE的儿童教育网站的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全…

vue3开发中易遗漏的常见知识点

文章目录 组件样式的特性Scoped CSS之局部样式的泄露Scoped CSS之深度选择器CSS Modules在CSS中使用v-bind 非props属性继承组件通信父子组件的相互通信props/$emit父组件传递数据给子组件子组件传递数据给父组件 非父子组件的相互通信Provide/inject全局事件总线 组件插槽作用…

WPF 控件数据源绑定

WPF 控件数据源绑定 前提&#xff1a;我的数据源都放在 DataProcessView 类中&#xff0c;然后在 MainWindow 中声明该类的对象 DataProcess&#xff0c;如果是指定了 DataContext &#xff0c;就将该对象赋值给 DataContext &#xff08;如下&#xff09;&#xff0c;否则不赋…

SpringBoot基础知识

谈一谈你对SpringBoot的理解&#xff0c;它有哪些特性&#xff08;优点&#xff09;&#xff1f; SpringBoot用来快速开发Spring应用的一个脚手架&#xff0c;其目的是用来简化新Spring应用的初始搭建以及开发过程。 优点&#xff1a; 简化配置&#xff1a;提供了很多内置的…

工作笔记:Vue 3 中使用 vue-router 进行导航与监听路由变化

一、使用 useRouter 进行导航 在 Vue 3 组件中&#xff0c;你可以使用 useRouter 来方便地进行页面导航。以下是一个简单的示例&#xff1a; <template><button click"navigateToHome">跳转到首页</button> </template><script setup&g…