You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Python字典指定分组中获取多个随机值生成健身训练组

代码问题原因
  • random.sample()传参错误:你代码中调用了.items()方法,但musclegroup_exercises中每个肌群对应的值是集合类型,只有字典才有items()方法,直接传入动作集合本身即可
  • 函数逻辑未完成:createworkout2仅写了前半段,没有实现第二个肌群的动作抽取、结果汇总输出逻辑
  • 单肌群训练函数未实现随机抽取:现有createworkout1会输出对应肌群的所有动作,不符合随机选动作的需求
  • 随机库导入位置不合理:放在函数内部会导致每次调用函数都重复执行导入操作
修复后完整代码
import random

musclegroup_exercises = {
    'legs': {"squat", "calf raises", "hamstring curls", "deadlifts", "walking lunges"},
    'chest': {"barbell bench", "pushups", "cable fly", "dumbbell fly", "dumbbell incline bench press"},
    'arms': {"bicep curls", "kickbacks", "tricep pushdown", "reverse curls", "hammer curl"},
    'shoulders':{"shoulder press", "lateral raise", "barbell shrug", "bent over reverse flys", "push press"},
    'back':{"dumbbell rows", "back extension", "pull ups", "lat pull downs", "machine seated row"},
    'core':{"sit ups", "crunches", "russian twists", "bicycles", "planks"},
}

print('可选目标肌群:Legs, Chest, Arms, Shoulders, Back, Core')
print('可选强度等级:Easy, Medium, Hard')

# 输入校验
while True:
    try:
        num = int(input('请选择训练的目标肌群数量(1或2):'))
        if num in (1,2):
            break
        print('请输入1或2')
    except ValueError:
        print('请输入有效数字')

target_groups = []
if num == 1:
    while True:
        musclegroup = input('请输入目标肌群名称:').lower()
        if musclegroup in musclegroup_exercises:
            target_groups.append(musclegroup)
            break
        print('输入的肌群不存在,请重新输入')
else:
    while len(target_groups) < 2:
        tip = '请输入第一个目标肌群名称:' if len(target_groups) == 0 else '请输入第二个目标肌群名称:'
        mg = input(tip).lower()
        if mg in musclegroup_exercises and mg not in target_groups:
            target_groups.append(mg)
        elif mg in target_groups:
            print('该肌群已选择,请输入其他肌群')
        else:
            print('输入的肌群不存在,请重新输入')

while True:
    intensity = input('请选择强度等级:').capitalize()
    if intensity in ('Easy', 'Medium', 'Hard'):
        break
    print('请输入有效强度等级:Easy/Medium/Hard')

rate_map = {'Easy':'65%', 'Medium':'80%', 'Hard':'90%'}
rate = rate_map[intensity]

# 生成训练计划
workout = []
for group in target_groups:
    # 每个肌群随机抽3个动作
    exercises = random.sample(list(musclegroup_exercises[group]), 3)
    workout.extend(exercises)

print(f'\n你的专属训练计划(强度对应负荷:{rate}):')
for idx, act in enumerate(workout, 1):
    print(f'{idx}. {act}')
修改说明
  • 增加了全流程输入校验,避免用户输入无效值导致程序崩溃
  • 修复了random.sample的传参错误,先将动作集合转为列表再传入即可完成随机抽取
  • 简化了训练计划生成逻辑,兼容1个/2个肌群的场景,无需写两个独立函数
  • 优化了输出格式,按序号展示训练动作,同时标注对应强度的负荷参考值

内容的提问来源于stack exchange,提问作者Fernando Toledo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:57:03