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

问题描述

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

问题分析

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

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

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

算法设计

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

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

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

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

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

确定程序框架

程序流程图如图1.11所示。

完整的程序

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


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.xdnf.cn/news/150629.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

企业级Windows server服务器技术(1)

windows server服务器安装 准备工作&#xff1a; 1.准备安装的镜像 2.安装好虚拟机VMware或者virtual box 3.准备安装的位置&#xff08;选择你的电脑的磁盘上比较空闲的位置&#xff0c;新建一个文件夹并命名&#xff09; 4.开始安装&#xff08;按步骤&#xff09;----…

整合SpringSecurity框架经典报错

报错描述Description: Field userDetailsService in com.atguigu.security.config.WebSecurityConfig required a bean of type org.springframe 这是整合SpringSecurity权限认证中经常出现的一个问题&#xff0c;由于SpringSecurity中这个UserDetailsService未找到 解决方案…

C语言实现简单凯撒密码算法

**实验2&#xff1a;传统密码技术 【实验目的】 通过本次实训内容&#xff0c;学习常见的传统密码技术&#xff0c;通过编程实现简单代替密码中的移位密码算法&#xff0c;加深对传统密码技术的了解&#xff0c;为深入学习密码学奠定基础。【技能要求】 分析简单代替密码中的移…

【Java特性】多态详解——对象类型转换与 instanceof 关键字的运用

多态是指不同类的对象在调用同一个方法时所呈现出的多种不同行为。通常来说&#xff0c;在一个类中定义的属性和方法被其他类继承或重写后&#xff0c;当把子类对象直接赋值给父类引用变量时&#xff0c;相同引用类型的变量调用同一个方法所呈现出的多种不同形态。多态不仅解决…

数据结构与算法学习day23-回溯算法-递增子序列

一、递增子序列 1.题目 491. 非递减子序列 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xf…

深入理解端口、端口号及FTP的基本工作原理

FTP是TCP/IP的一种具体应用&#xff0c;FTP工作在OSI模型的第七层&#xff0c;TCP模型的第四层上&#xff0c;即应用层&#xff0c;FTP使用的是传输层的TCP传输而不是UDP&#xff0c;这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的“三次握手”的过程&#xff0c;其…

路面坑洼与道路缺陷目标检测数据集——(路面裂缝目标检测数据集——含10000多张图像 数据集已按照yolo txt格式标注好)

路面坑洼&#xff0c;道路缺陷&#xff0c;路面裂缝目标检测数据集 共包含10000多张图像&#xff0c;包含纵向裂缝、纵向拼接缝、错误标签、横向裂缝、横向拼接缝、龟裂、坑洞、十字路口模糊、白线模糊、井盖十个标签&#xff0c;依次对应D00到D50&#xff0c; 其中D01、D0W0、…

3D全息投影简易制作:用矿泉水瓶制作反射镜面、剪映制作3D投影视频

参看视频&#xff1a;https://www.bilibili.com/video/BV1HW411H7B3/?vd_source34d74181abefaf9d8141bbf0d485cde7 3D全息投影&#xff1a;主要是反射衍射原理 1、用矿泉水瓶制作反射镜面 参看&#xff1a;https://www.iesdouyin.com/share/video/7005120687492828416 2、剪映…

鸿蒙跨端实践-长列表解决方案和性能优化

这是我参加创作者计划的第一篇文章。 前言 长列表是前端和客户端应用中最常见的业务场景&#xff0c;比如商品瀑布流等&#xff0c;有成千上万条数据&#xff0c;因此长列表的渲染性能在iOS&#xff0c;Android&#xff0c;Harmony&#xff0c;Web等各大平台都非常重要。Harmon…

uni-app进度条

<template><view><canvas canvas-id"ring" id"ring" style"width: 200px; height: 180px;"><!-- <p>抱歉&#xff0c;您的浏览器不支持canvas</p> --></canvas></view> </template><…

Frp经常连接不上?查看Frp常见问题排查

很多使用Frp的网友反馈使用Frp经常出现无法使用或者不稳定的情况&#xff0c;Frp编译和部署比较复杂&#xff0c;多端口映射时或者连接数多的情况下会出现不稳定的现象&#xff0c;不适合小白使用&#xff0c;而且仅是上一代的内网穿透技术&#xff0c;生产环境使用建议选择稳定…

Linux创建用户配置虚拟环境

文章目录 前言一、创建新用户二、下载安装Anaconada总结 前言 本篇文章用于记录拿到一个新的Linux服务器开始创建一个新的用户&#xff0c;并配置深度学习所需要的环境。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、创建新用户 创建用户&…

苏轼为何要写石钟山记?时间节点是关键

《石钟山记》不仅是苏轼的旅行笔记&#xff0c;亦是其人生哲学与思想的深邃自省。文中不仅详述了他对石钟山的实地勘察&#xff0c;亦体现了其对历史、自然及人生之独到见解。黄州生涯及其对政治与文化的洞悉&#xff0c;为这篇作品注入了深厚底蕴。 苏轼的黄州岁月 黄州期间…

使用现有的科技或许无法实现对人类智能的模拟

现有科技在实现真正的人类智能方面面临许多挑战。科技的局限性涉及许多领域&#xff0c;在计算能力方面&#xff0c;尽管处理速度不断提升&#xff0c;但要模拟人脑的复杂性仍然困难重重&#xff1b;当前的人工智能依赖于大量数据进行训练&#xff0c;缺乏灵活性和适应性&#…

状态模式原理剖析

《状态模式原理剖析》 状态模式&#xff08;State Pattern&#xff09; 是一种行为设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为。换句话说&#xff0c;当对象状态发生变化时&#xff0c;它的行为也会随之变化。 通过状态模式&#xff0c;可以消除通过 if-else…

Sam Altman最新博文:智能时代将带来无限的智能和丰富的能源

9 月 23 日&#xff0c;Sam Altman 发布了一篇名为《The Intelligence Age》 的博客文章。Altman 强调&#xff0c;未来的科技进步将让我们做出在祖辈看来近乎“魔法”的成就&#xff0c;AI 的加速创新将成为推动这些 变革的核心力量。 Altman 解释说&#xff0c;历史上人类之所…

MySQL数据库脚本转化成sqlite数据库脚本的修改点

转换数据类型 将MySQL的数据类型转换为SQLite对应的数据类型。例如&#xff0c;将 INT或 INTEGER 转换为 INTEGER&#xff0c;将 VARCHAR、TEXT 或 CHAR 转换为 TEXT&#xff0c;将 DATETIME 或 TIMESTAMP 转换为 TEXT 或 DATETIME&#xff08;SQLite没有专门的日期时间类型&am…

IM项目中即时消息管理的技术实现及优劣分析

基于TCP协议的实现 技术原理 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。在IM项目中&#xff0c;使用TCP协议进行即时消息管理时&#xff0c;客户端和服务器之间首先建立连接。当发送消息时&#xff0c…

240924-Windows映射网络驱动器的方法

在Windows上加载网络盘&#xff08;映射网络驱动器&#xff09;可以通过以下步骤完成&#xff1a; 方法一&#xff1a;通过文件资源管理器 打开文件资源管理器&#xff1a; 可以按 Win E 打开&#xff0c;或者直接点击任务栏上的文件资源管理器图标。 点击“此电脑”&#x…

Java 安全认证和 Hadoop UGI 原理解析

Java 安全认证和 UGI 原理解析 一般来说&#xff0c;Java 安全认证主要通过自定义 Subject、LoginContext、LoginModule、Configuration 在 Java 中进行安全认证。 Subject 可以单独创建并通过 Subject#doAs 方法单独进行登录&#xff0c;但也可以传入 LoginContext 中&#x…