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

如何修复Python random模块随机抽取指定数量任务的TypeError报错

报错原因

你触发TypeError的核心问题是random.randrange()的入参使用错误:
random.randrange()接收的是整数类型的起止范围参数,但你把四个字符串任务丢进去排序后解包传入,参数类型和数量都不符合要求,完全偏离了功能逻辑。

除了报错之外,原有代码还存在多处逻辑错误:

  • 用户输入的任务数量是字符串类型,没有转成整数就直接判断
  • 不需要把任务列表拆分成四个独立变量,直接操作列表更简单
  • 原有逻辑只会按顺序打印前n个任务,完全没有实现随机抽取的效果

修正后的完整代码

import random

user = "Jude"
task_list = ["do not lie", "do not cheat", "do not be bitter in anger", "do love all, is the greatest commandment"]

# 处理用户输入,转成整数并做合法性校验
try:
    task_num = int(input(f"There are four tasks in the task menu \nHow many tasks do you wish to complete today {user}: "))
except ValueError:
    print("请输入有效数字")
else:
    # 判断输入数量是否在合法范围内
    if 1 <= task_num <= len(task_list):
        # 随机抽取对应数量的不重复任务
        selected_tasks = random.sample(task_list, task_num)
        print(f"今日为你随机选择的{task_num}个任务如下:")
        for idx, task in enumerate(selected_tasks, 1):
            print(f"{idx}. {task}")
    elif task_num == 0:
        print("No task to be done today")
    else:
        print(f"最多只能选择{len(task_list)}个任务")

关键改动说明

  • 用random.sample()直接从任务列表中抽取指定数量的不重复随机元素,一行就实现随机抽取逻辑,无需复杂判断
  • 增加了用户输入的合法性校验,避免输入非数字或者超出数量范围的异常
  • 保留了你原有的输入提示和无任务的输出逻辑,同时完全实现了随机抽取的核心需求

内容的提问来源于stack exchange,提问作者JUDE EBEKE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:15:04