项目37:简易个人健身记录器 --- 《跟着小王学Python·新手》

news2024/12/27 4:25:09

项目37:简易个人健身记录器 — 《跟着小王学Python·新手》

《跟着小王学Python》 是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握Python的核心概念。通过开发游戏、构建Web应用、编写网络爬虫、制作桌面软件等多样化项目,学习者可以深入理解并实践Python知识。每周更新1至2篇内容,旨在助力学习者成长为全栈工程师。

全栈实战项目访问:http://javapub.net.cn/

作为课程作业或者毕设参考也是不错的选择

文章目录

  • 项目37:简易个人健身记录器 --- 《跟着小王学Python·新手》
    • 目标
    • 功能
    • 设计
      • 数据结构设计
      • 界面设计
      • 流程设计
    • 实现步骤
    • 代码实现
    • 测试
    • 注意事项
    • 小结

在这里插入图片描述

目标

本项目旨在为健身爱好者提供一个简易的个人健身记录器,帮助他们记录每次锻炼的详细数据,包括锻炼日期、锻炼时长、锻炼类型等。通过这个项目,新手可以学习到Python基础语法、文件操作以及简单的数据处理。

在这里插入图片描述

功能

  • 记录功能:用户可以输入锻炼的日期、时长和类型,程序将这些信息保存到文件中。
  • 查看功能:用户可以查看所有记录的锻炼数据。
  • 修改功能:用户可以修改已记录的锻炼数据。
  • 删除功能:用户可以删除不再需要的锻炼记录。

设计

数据结构设计

我们使用一个列表来存储所有的锻炼记录,每个记录是一个字典,包含以下键值对:

  • date:锻炼日期
  • duration:锻炼时长(分钟)
  • type:锻炼类型(如跑步、游泳等)

界面设计

程序将通过命令行界面与用户交互,用户可以通过输入指令来执行不同的操作。

流程设计

  1. 初始化:程序启动时,检查是否存在记录文件,如果不存在则创建一个空文件。
  2. 主菜单:显示操作选项,包括记录、查看、修改和删除锻炼数据。
  3. 执行操作:根据用户选择执行相应的功能。
  4. 保存数据:每次操作后,更新记录文件以保存最新的数据。

实现步骤

  1. 创建记录文件:如果文件不存在,则创建一个空文件。
  2. 定义记录数据结构:使用列表和字典来组织数据。
  3. 实现主菜单:提供用户操作的选项。
  4. 实现记录功能:允许用户输入锻炼信息并保存。
  5. 实现查看功能:显示所有锻炼记录。
  6. 实现修改功能:允许用户修改特定记录。
  7. 实现删除功能:允许用户删除特定记录。
  8. 保存和读取文件:在每次操作后更新文件。

代码实现

import json

# 文件名
FILE_NAME = "fitness_records.json"

# 初始化记录文件
def init_file():
    try:
        with open(FILE_NAME, "r") as file:
            records = json.load(file)
    except (FileNotFoundError, json.JSONDecodeError):
        records = []
    return records

# 保存记录到文件
def save_records(records):
    with open(FILE_NAME, "w") as file:
        json.dump(records, file, indent=4, ensure_ascii=False)

# 添加记录
def add_record(records):
    record = {
        "date": input("请输入锻炼日期(如2023-12-25):"),
        "duration": int(input("请输入锻炼时长(分钟):")),
        "type": input("请输入锻炼类型(如跑步、游泳):")
    }
    records.append(record)
    save_records(records)
    print("记录添加成功!")

# 显示所有记录
def show_records(records):
    if not records:
        print("还没有记录。")
    else:
        for record in records:
            print(f"日期:{record['date']}, 时长:{record['duration']}分钟, 类型:{record['type']}")

# 修改记录
def modify_record(records):
    index = int(input("请输入要修改的记录编号:")) - 1
    if 0 <= index < len(records):
        record = records[index]
        record["date"] = input("新的日期(如2023-12-25):")
        record["duration"] = int(input("新的锻炼时长(分钟):"))
        record["type"] = input("新的锻炼类型(如跑步、游泳):")
        save_records(records)
        print("记录修改成功!")
    else:
        print("编号错误!")

# 删除记录
def delete_record(records):
    index = int(input("请输入要删除的记录编号:")) - 1
    if 0 <= index < len(records):
        del records[index]
        save_records(records)
        print("记录删除成功!")
    else:
        print("编号错误!")

# 主程序
def main():
    records = init_file()
    while True:
        print("\n1. 添加记录\n2. 显示所有记录\n3. 修改记录\n4. 删除记录\n5. 退出")
        choice = input("请选择操作:")
        if choice == "1":
            add_record(records)
        elif choice == "2":
            show_records(records)
        elif choice == "3":
            modify_record(records)
        elif choice == "4":
            delete_record(records)
        elif choice == "5":
            break
        else:
            print("无效的选择,请重新输入!")

if __name__ == "__main__":
    main()

测试

  1. 添加记录:输入不同的锻炼数据,检查文件是否正确更新。
  2. 查看记录:检查是否能正确显示所有记录。
  3. 修改记录:修改某条记录,检查文件是否正确更新。
  4. 删除记录:删除某条记录,检查文件是否正确更新。

注意事项

  • 确保输入的日期格式正确,否则程序可能会报错。
  • 输入的锻炼时长应该是整数。
  • 在修改和删除记录时,确保输入的编号正确,否则程序会报错。

小结

通过本项目,新手可以学习到Python的基本语法、文件操作以及如何通过命令行界面与用户交互。此外,本项目也提供了一个实用的工具,帮助用户记录和管理他们的健身数据。希望JavaPub博主的粉丝们能够喜欢这个项目,并从中学到知识。更多Python学习资源,可以访问JavaPub官网。


《跟着小王学Python·新手》

《跟着小王学Python》 是一套精心设计的Python学习教程,适合各个层次的学习者。本教程从基础语法入手,逐步深入到高级应用,以实例驱动的方式,帮助学习者逐步掌握Python的核心概念。通过开发游戏、构建Web应用、编写网络爬虫、制作桌面软件等多样化项目,学习者可以深入理解并实践Python知识。每周更新1至2篇内容,旨在助力学习者成长为全栈工程师。

全栈实战项目访问:http://javapub.net.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266159.html

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

相关文章

华为:数字化转型只有“起点”,没有“终点”

上个月&#xff0c;我收到了一位朋友的私信&#xff0c;他询问我是否有关于华为数字化转型的资料。幸运的是&#xff0c;我手头正好收藏了一些&#xff0c;于是我便分享给他。 然后在昨天&#xff0c;他又再次联系我&#xff0c;并感慨&#xff1a;“如果当初我在进行企业数字…

count(1)、count(_)与count(列名)的区别?

大家好&#xff0c;我是锋哥。今天分享关于【count(1)、count(_)与count(列名)的区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; count(1)、count(_)与count(列名)的区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 SQL 中&#xff0c…

AAAI-2024 | 大语言模型赋能导航决策!NavGPT:基于大模型显式推理的视觉语言导航

作者&#xff1a;Gengze Zhou, Yicong Hong, Qi Wu 单位&#xff1a;阿德莱德大学&#xff0c;澳大利亚国立大学 论文链接&#xff1a; NavGPT: Explicit Reasoning in Vision-and-Language Navigation with Large Language Models &#xff08;https://ojs.aaai.org/index.p…

Linux高级--2.4.1 网络概念(分层、TCP)

关于网络分层理解的难点 对于一般人&#xff08;不参与设计和维护网络协议栈的人&#xff09;来讲&#xff0c;物理层和应用层很容易理解&#xff0c;也很好记住。首先&#xff0c;物理层是看的到的网线、基站的实体。再者&#xff0c;应用层是用户自己参与编写的程序。 而那…

使用VSCode Debugger 调试 React项目

一般我们调试代码时&#xff0c;用的最多的应该就是console.log方式了&#xff0c;还有的是使用Chrome DevTools 通过在对应的 sourcemap代码位置打断点进行调试&#xff0c;除了上面两种方式外还有一种更好用的调试方式&#xff1a; VSCode Debugger。 VSCode Debugger可以直…

Redis-十大数据类型

Reids数据类型指的是value的类型&#xff0c;key都是字符串 redis-server:启动redis服务 redis-cli:进入redis交互式终端 常用的key的操作 redis的命令和参数不区分大小写 &#xff0c;key和value区分 查看当前库所有的key keys * 判断某个key是否存在 exists key 查看key是什…

Git--tag标签远程管理

目录 一、git 标签 tag管理 1.创建一个轻量级标签 2.创建一个带有附注的标签 3.删除标签 二、标签推送 1.再创建两个分支 2.把多个标签推送到远程 三、标签拉取 四、删除远程标签 1.命令 2.查看远程仓库&#xff0c;标签被删除 3.远程标签删除后本地标签不会消失&a…

通过nginx设置一个图片服务器,并使用 Nginx 作为反向代理

通过nginx设置一个图片服务器&#xff0c;并使用 Nginx 作为反向代理 安装nginx 首先需要去官网下载一个nginx&#xff0c;我这里下载了最新的稳定版本&#xff1a;nginx-1.26.2&#xff0c;下载下来是一个压缩包&#xff0c;解压之后就可以直接用了。 修改nginx的配置文件 …

第十六届“蓝桥杯”全国软件和信息技术专业人才大赛简介及资料大全

蓝桥杯全国软件和信息技术专业人才大赛是由工业和信息化部人才交流中心主办的一项全国性竞赛&#xff0c;面向全国高校大学生&#xff0c;累计参赛院校超过1200余所&#xff0c;参赛人数达40万人&#xff0c;是我国极有影响力的高校IT类赛事。 “第十六届蓝桥杯全国软件和信息…

快速理解24种设计模式

简单工厂模式 建立产品接口类&#xff0c;规定好要实现方法。 建立工厂类&#xff0c;根据传入的参数&#xff0c;实例化所需的类&#xff0c;实例化的类必须实现指定的产品类接口 创建型 单例模式Singleton 保证一个类只有一个实例&#xff0c;并提供一个访问他它的全局…

【山西长治】《长治市市直部门政务信息化建设项目预算编制规范和预算编制标准》(长财行[2022]25号)-省市费用标准解读系列32

《长治市市直部门政务信息化建设项目预算编制规范和预算编制标准(试行)》&#xff08;长财行[2022]25号&#xff09;于2022年8月1日开始试行&#xff0c;此标准由长治市财政局、长治市行政审批管理局编制&#xff0c;是对信息化建设项目预算管理的基本要求&#xff0c;主要适用…

Docker 入门:如何使用 Docker 容器化 AI 项目(二)

四、将 AI 项目容器化&#xff1a;示例实践 - 完整的图像分类与 API 服务 让我们通过一个更完整的 AI 项目示例&#xff0c;展示如何将 AI 项目容器化。我们以一个基于 TensorFlow 的图像分类模型为例&#xff0c;演示如何将训练、推理、以及 API 服务过程容器化。 4.1 创建 …

Java和Go语言的优劣势对比

文章目录 Java和Go语言的优劣势对比一、引言二、设计哲学与语法特性1、设计哲学2、语法特性 三、性能与内存管理1、性能2、内存管理和垃圾回收 四、并发编程模型五、使用示例1、Go语言示例代码2、Java语言示例代码 六、对比表格七、总结 Java和Go语言的优劣势对比 一、引言 在…

Docker怎么关闭容器开机自启,批量好几个容器一起操作?

环境&#xff1a; WSL2 docker v25 问题描述&#xff1a; Docker怎么关闭容器开机自启&#xff0c;批量好几个容器一起操作&#xff1f; 解决方案&#xff1a; 在 Docker 中&#xff0c;您可以使用多种方法来关闭容器并配置它们是否在系统启动时自动启动。以下是具体步骤和…

Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集BIM介绍基本原理算法流程 BIM代码实现BIM算法实现攻击效果 代码汇总bim.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CIFAR10进行分类 Py…

网狐旗舰版源码搭建概览

简单的列一下&#xff1a; 服务端源码内核源码移动端源码核心移动端源码AI控制工具源码多款子游戏源码前端、管理后台、代理网站源码数据库自建脚本UI工程源码配置工具及二次开发帮助文档 编译环境要求 VS2015 和 Cocos3.10 环境&#xff0c;支持移动端 Android 一键编译&am…

【QT】:QT(介绍、下载安装、认识 QT Creator)

背景 &#x1f680; 在我们的互联网中的核心岗位主要有以下几种 开发&#xff08;程序员&#xff09;测试运维&#xff08;管理机器&#xff09;产品经理&#xff08;非技术岗位&#xff0c;提出需求&#xff09; 而我们这里主要关注的是开发方向&#xff0c;开发岗位又分很…

MySQL 数据”丢失”事件之 binlog 解析应用

事件背景 客户反馈在晚间数据跑批后,查询相关表的数据时,发现该表的部分数据在数据库中不存在 从应用跑批的日志来看,跑批未报错,且可查到日志中明确显示当时那批数据已插入到数据库中 需要帮忙分析这批数据丢失的原因。 备注:考虑信息敏感性,以下分析场景测试环境模拟,相关数据…

熊军出席ACDU·中国行南京站,详解SQL管理之道

12月21日&#xff0c;2024 ACDU中国行在南京圆满收官&#xff0c;本次活动分为三个篇章——回顾历史、立足当下、展望未来&#xff0c;为线上线下与会观众呈现了一场跨越时空的技术盛宴&#xff0c;吸引了众多业内人士的关注。云和恩墨副总经理熊军出席此次活动并发表了主题演讲…

Spring01 - 工厂篇

Spring入门(上)-工厂篇 文章目录 Spring入门(上)-工厂篇一&#xff1a;引言1&#xff1a;EJB存在的问题2&#xff1a;什么是Spring3&#xff1a;设计模式和反射工厂 二&#xff1a;第一个spring程序1&#xff1a;环境搭建2&#xff1a;核心API - ApplicationContext2.1&#xf…