我该如何设计健身计划的python程序?
[*]设计个python查询程序 输入起始日期和项目 未来30天训练计划
[*]输入的项目是胸 背 腿其中的一个
[*]每天情况有五种:胸背 腿 有氧 休息
[*]其中胸背 腿是力量训练 力量训练完第二天是有氧 但是连续运动3天后要休息一天
[*]比如2023年1月1日 训练项目是胸 那么接下来的每一天的训练项目是:
[*]2023-01-01 胸 2023-01-02 有氧
2023-01-03 背
2023-01-04 休息
2023-01-05 有氧
2023-01-06 腿
2023-01-07 有氧
2023-01-08 休息
2023-01-09 胸
2023-01-10 有氧
2023-01-11 背
2023-01-12 休息
2023-01-13 有氧
2023-01-14 腿
代码如下
from datetime import datetime, timedelta
# 定义每个项目的运动顺序
project_order = {
"胸": ["胸", "有氧", "背", "休息", "有氧", "腿", "有氧", "休息"],
"背": ["背", "有氧", "腿", "休息", "有氧", "胸", "有氧", "休息"],
"腿": ["腿", "有氧", "胸", "休息", "有氧", "背", "有氧", "休息"]
}
def get_training_plan(start_date, project):
"""
根据起始日期和项目生成未来30天的训练计划
"""
plan = []
order = project_order
current_date = datetime.strptime(start_date, "%Y-%m-%d")
for i in range(30):
# 根据项目的运动顺序获取当前日期应该进行的训练项目
training_project = order
# 如果当前是休息日,则跳过当天的训练
if training_project == "休息":
plan.append(current_date.strftime("%Y-%m-%d") + " " + training_project)
current_date += timedelta(days=1)
continue
# 添加当前日期的训练计划
plan.append(current_date.strftime("%Y-%m-%d") + " " + training_project)
# 如果当前是有氧日,则将前一天的训练项目标记为已完成
if training_project == "有氧":
previous_day = plan[-1][:10]
# 更新日期
current_date += timedelta(days=1)
return plan
# 测试程序
start_date = "2023-01-01"
project = "胸"
plan = get_training_plan(start_date, project)
for p in plan:
print(p)
但实际上光指定一天的训练项目没有用 比如指定2023-2-20是腿那么就有三种情况
第一种情况:如果腿的前两天是背和有氧 那么再下一天就是休息 顺序是:背 有氧腿 休息 有氧 胸
第二种情况:如果腿的前一天是休息 那么下一天就是有氧 顺序如下:有氧休息 腿 有氧 胸 休息
第三种情况:如果腿的前两天是休息 有氧 那么下一天就是有氧 顺序是:休息 有氧腿 有氧 休息 胸
看起来要指定前两天和起始日的项目 我该如何设计我的查询程序呢 ? 帮你用chatgpt滚了一圈
from datetime import datetime, timedelta
def generate_training_plan(start_date, project):
# 建立一个训练项目列表
project_list = ['胸', '背', '腿']
# 建立一个训练类型列表
type_list = ['胸', '背', '腿', '有氧', '休息']
# 计算起始日期之后30天的日期
end_date = start_date + timedelta(days=30)
# 初始化当前训练类型和训练天数
current_type = project
days_since_last_rest = 0
# 生成训练计划
training_plan = []
while start_date <= end_date:
training_plan.append((start_date, current_type))
# 每个训练项目完成后,切换到下一个训练项目
current_type_index = type_list.index(current_type)
next_type_index = (current_type_index + 1) % len(project_list)
next_type = project_list
# 检查是否需要进行有氧训练或休息
days_since_last_rest += 1
if current_type in project_list and days_since_last_rest == 3:
current_type = '休息'
days_since_last_rest = 0
elif current_type == '休息':
current_type = '有氧'
else:
current_type = next_type
# 增加一天
start_date += timedelta(days=1)
return training_plan
start_date = datetime(2023, 1, 1)
project = '胸'
training_plan = generate_training_plan(start_date, project)
for training_day in training_plan:
print(training_day.strftime('%Y-%m-%d'), training_day)
from datetime import datetime, timedelta
# 定义每个训练周期的类型
TRAINING_TYPES = ["胸", "背", "腿", "有氧", "休息"]
def generate_training_plan(start_date, start_training_type, day_before_yesterday_type, yesterday_type):
# 将起始日期和前两天的项目转换为datetime对象
start_date = datetime.strptime(start_date, "%Y-%m-%d")
day_before_yesterday_type_index = TRAINING_TYPES.index(day_before_yesterday_type)
yesterday_type_index = TRAINING_TYPES.index(yesterday_type)
# 定义一个列表,用于存储每天的训练类型
training_plan = []
# 根据起始日的类型确定第一天的训练类型
if start_training_type == "有氧" or start_training_type == "休息":
training_type_index = TRAINING_TYPES.index(start_training_type)
else:
training_type_index = (yesterday_type_index + 1) % 3
# 生成未来30天的训练计划
for i in range(30):
# 将当天的训练类型加入训练计划中
training_plan.append((start_date + timedelta(days=i)).strftime("%Y-%m-%d") + " " + TRAINING_TYPES)
# 根据当天的训练类型确定下一天的训练类型
if TRAINING_TYPES == "胸" or TRAINING_TYPES == "背" or TRAINING_TYPES == "腿":
if i % 3 == 2:
training_type_index = (training_type_index + 2) % 5
else:
training_type_index = (training_type_index + 1) % 5
else:
training_type_index = (training_type_index + 1) % 5
return training_plan
lineulb 发表于 2023-2-22 15:18
帮你用chatgpt滚了一圈
from datetime import datetime, timedelta
哈哈哈,太秀了 建议直接下个app帮你定制计划,还可以跟着动画练 侃遍天下无二人 发表于 2023-2-22 16:41
建议直接下个app帮你定制计划,还可以跟着动画练
哈哈 其实是设计个例子学习下编程 lineulb 发表于 2023-2-22 15:18
帮你用chatgpt滚了一圈
from datetime import datetime, timedelta
chatgpt还没有那么智能 运行下就知道是错的
2023-01-01 胸
2023-01-02 背
2023-01-03 腿
2023-01-04 休息
2023-01-05 有氧
2023-01-06 背
2023-01-07 休息
1月7号间隔两天就休息了 错的
而且只输入一天是无法得出结果的 恋天 发表于 2023-2-22 15:31
哈哈哈,太秀了
chatgpt解决不了的 吾更爱你 发表于 2023-2-22 16:50
chatgpt还没有那么智能 运行下就知道是错的
2023-01-01 胸
chatgpt确实不够优秀,我有些时候让它生成的代码,它根本没考虑过比如python3版本,引入包之类的
,单总体而言已经很不错了,我觉得它生成的代码你看懂它为什么这么写,抱着学习的态度去看它。另外就是对于python来说,我感觉自学它入门的话很多功能虽然能实现,但是不够规范,看它代码能让你的代码更为规范。 先提两点意见:
1、表达能力确实不行,我看的不是很明白;
2、用好标点可以让表达更容易。
我的疑问:查询程序为什么要纠结逻辑,查询难道不是只在乎数据本身吗?
我的理解:如果是想设计个程序来给你制定计划,你可以设置个计数器,如果遇到运动日就+1,如果遇到休息日就清零,通过计数器来达到“练三休一”的目的。(其实我并不是很确定,你想要解决的是不是这个问题。。。) terran312 发表于 2023-3-13 00:09
先提两点意见:
1、表达能力确实不行,我看的不是很明白;
2、用好标点可以让表达更容易。
一共就几十个字 空格代表了标点 为了方便理解我举了大量例子 表达能力和理解能力是相对的概念
因为这个问题本身就是很强的逻辑 不是连三休息这么简单的问题 每一天练什么不光取决于起始项目 还取决于前两天的项目
页:
[1]
2