# TSL Agent Prompt Set (ZH) 本文件只包含发送给被测 agent 的题面。 ## Runner Setup ```text You are in this repository. The documentation entry point is docs/index.md. When asked to write TSL, start from docs/index.md and follow its routing to the relevant TSL pages. Do not infer syntax from Pascal, TypeScript, JavaScript, Python, or SQL. ``` ## Answer Rules ```text 每个 case 独立作答。 除非题面明确要求输出 .tsf,否则默认输出可执行 .tsl 文件内容。 题面模拟普通用户的需求,不要复制文档中的样例代码。 请按题面里的名称、数据和业务动作重新编写。 如果输出 .tsl,请在题面要求的业务输出全部完成后,用 TSL 输出语句最后输出一行 __TSL__AGENT__OK__。 如果输出 .tsf,必须是 TSL 能从 funcext 加载的有效函数扩展或 unit 文件; 不要在 .tsf 中加入成功标记,成功标记由验证脚本输出。 只输出代码,不要解释。 ``` ## Prompts ### TSL-001: 订单折后金额 ```text 请写一份 .tsl 代码: 一个订单里,单价是 19,数量是 6,优惠金额是 14。 请算出这行订单最后要收多少钱,并输出结果。 ``` ### TSL-002: 分页信息 ```text 请写一份 .tsl 代码: 一共有 47 条记录,每页放 10 条。 请输出能装满的页数,以及最后一页还剩多少条。 ``` ### TSL-003: 订单编号 ```text 请写一份 .tsl 代码: 把文字 "Order" 和编号 "42" 合成一个订单编号,然后输出它。 ``` ### TSL-004: 简单扣费 ```text 请写一份 .tsl 代码: 账户余额是 12,本次扣费是 3。 请输出扣费后的余额。不要提前列出额外的变量清单。 ``` ### TSL-005: 固定单价 ```text 请写一份 .tsl 代码: 某个商品固定单价是 9,本次买了 4 个。 请把固定单价作为常量保存,再输出总价。 ``` ### TSL-006: 严格模式库存 ```text 请写一份 .tsl 代码: 这份脚本要开启显式变量模式。 请准备一个库存数 stock,把它设为 18,然后输出它。 ``` ### TSL-007: 读取分数 ```text 请写一份 .tsl 代码: 有一组分数:15、30、45。 请输出第一项和最后一项。 ``` ### TSL-008: 读取编码字符 ```text 请写一份 .tsl 代码: 编码是 "ZX9"。 请输出第一个字符和第三个字符。 ``` ### TSL-009: 空列表检查 ```text 请写一份 .tsl 代码: 准备一个空列表 bucket。 请检查 bucket 的第一个位置是不是 nil,并输出检查结果。 ``` ### TSL-010: 文本数字参与计算 ```text 请写一份 .tsl 代码: 有一个文本形式的数字 "58"。 请先把它变成整数,再减去 8,并输出结果。 ``` ### TSL-011: 温度标签 ```text 请写一份 .tsl 代码: temperature 是 32。 如果温度大于等于 30,level 就是 "hot";否则 level 是 "normal"。 请最后输出 level。 ``` ### TSL-012: 余额审核 ```text 请写一份 .tsl 代码: balance 是 80。 如果 balance 大于 50,请先输出 "allow",再扣掉 10; 否则输出 "deny"。最后输出 balance。 ``` ### TSL-013: 偶数累加 ```text 请写一份 .tsl 代码: 请把 2、4、6、8 加起来并输出。 要求用带步长的循环完成。 ``` ### TSL-014: 权重检查 ```text 请写一份 .tsl 代码: weights 里有 3、5、9。 请逐个处理,每行输出“当前位置”和“这个位置的值”的乘积。 ``` ### TSL-015: 累加到上限 ```text 请写一份 .tsl 代码: 从 n = 1 开始累加。 当 n 大于 4 时停止,最后输出累计结果。 ``` ### TSL-016: 跳过指定数字 ```text 请写一份 .tsl 代码: 处理 1 到 5。 遇到 3 时跳过它,只累加其他数字,最后输出结果。 ``` ### TSL-017: 倒计时 ```text 请写一份 .tsl 代码: 从 countdown = 4 开始倒数,一直到 0 停止。 请使用 repeat until,并输出最后的 countdown。 ``` ### TSL-018: 状态码 ```text 请写一份 .tsl 代码: status_code 是 2。 如果是 1,输出 "new";如果是 2 或 3,输出 "active"; 其他情况输出 "closed"。 ``` ### TSL-019: 等级文字 ```text 请写一份 .tsl 代码: grade 是 3。 请用 case 表达式得到一段等级文字:1 是 "low",2 到 4 是 "mid",其他是 "high"。 最后输出这段等级文字。 ``` ### TSL-020: 捕获错误信息 ```text 请写一份 .tsl 代码: 故意抛出 "network" 这个错误。 捕获它后,请输出错误对象里的错误信息。 ``` ### TSL-021: 清理动作 ```text 请写一份 .tsl 代码: 先输出 "open"。 无论前面是否正常结束,最后都要输出 "close"。 请用 try/finally 完成。 ``` ### TSL-022: 计算数量乘积 ```text 请写一份 .tsl 代码: 请做一个“计算两个整数乘积”的功能,名字由你自己取。 脚本里请用 6 和 8 调用它,并输出结果。 ``` ### TSL-023: 调整额度 ```text 请写一份 .tsl 代码: 请做一个“把额度增加 5”的动作,名字由你自己取。 脚本里 quota 一开始是 10,调用后输出 quota。 ``` ### TSL-024: 默认手续费 ```text 请写一份 .tsl 代码: 请做一个“计算手续费后金额”的功能,名字由你自己取。 如果没有传金额,就按 100 处理;最后结果是金额加 6。 请分别输出不传金额和传 20 时的结果。 ``` ### TSL-025: 下一批编号 ```text 请写一份 .tsl 代码: 请做一个“取得下一批编号”的功能,名字由你自己取。 起始编号是整数,默认是 10,结果也是整数。 它要返回起始编号加 1。请输出默认情况下的结果。 ``` ### TSL-026: 区间组装 ```text 请写一份 .tsl 代码: 请做一个“组装左右边界”的功能,名字由你自己取,把两个边界值组成一个两项列表。 调用时请用命名方式传入:right 是 90,left 是 40。 最后输出这两项。 ``` ### TSL-027: 跳过中间值 ```text 请写一份 .tsl 代码: 请做一个“检查中间位置”的功能,名字由你自己取,里面要输出第二个位置 b 是不是 nil。 调用时只给第一个和第三个位置传值,故意跳过 b。 ``` ### TSL-028: 按名字调用功能 ```text 请写一份 .tsl 代码: 请做一个“三位数字编码”的功能,名字由你自己取。 它把三个输入算成 a * 100 + b * 10 + c。 脚本里请通过 call 按这个名字调用它,并输出结果。 ``` ### TSL-029: 多个数字相乘 ```text 请写一份 .tsl 代码: 请做一个“多个数字相乘”的功能,名字由你自己取。 它可以接收任意多个数字,并把它们全部相乘。 请用 2、3、4 调用,并输出结果。 ``` ### TSL-030: 看到多少输入 ```text 请写一份 .tsl 代码: 请做一个“统计收到多少输入”的功能,名字由你自己取。 前两个位置是固定的,后面还能继续接收更多值。 它要输出 ParamCount * 100 + RealParamCount 的结果。 请用 5、6、7 调用。 ``` ### TSL-031: 保存一个小计算 ```text 请写一份 .tsl 代码: 把一个“小计算”保存到你自己命名的变量里。这个小计算接收两个值,结果是两者相乘。 请通过 call 调用这个变量,并用 4 和 9 输出结果。 ``` ### TSL-032: 把计算交给别人执行 ```text 请写一份 .tsl 代码: 请做一个“执行后再翻倍”的功能,名字由你自己取,它接收另一个计算。 这个功能要先用 3 调用收到的计算,再把得到的结果乘以 2。 调用它时,直接给它一个“把输入加 5”的匿名计算,并输出结果。 ``` ### TSL-033: 查找已有功能 ```text 请写一份 .tsl 代码: 请做一个“把输入乘以 3”的功能,名字由你自己取。 脚本里找到这个名字对应的函数值,再用支持的函数值调用方式处理 7,并输出结果。 ``` ### TSL-034: 传递当前功能 ```text 请写一份 .tsl 代码: 请做一个“把输入平方”的功能,名字由你自己取。 再做一个“调用传入计算”的功能,名字也由你自己取,它接收一个计算和一个值,并通过 call 执行。 脚本里取得平方功能的函数值,并输出调用结果。 ``` ### TSL-035: 函数里使用规则包 ```text 请写一份 .tsl 代码: 请做一个“读取远程费率”的功能,名字由你自己取。 这个功能一进入函数体就要使用一个费率相关的 unit,然后返回该 unit 中读取费率动作的结果。 ``` ### TSL-036: 脚本开头使用规则包 ```text 请写一份 .tsl 代码: 脚本需要先使用两个你自己命名的规则包:一个处理价格,一个处理税费。 之后调用一个“计算最终金额”的动作,并输出结果。 ``` ### TSL-037: 手续费扩展 ```text 请写一份 .tsf 代码: 提供一个“计算服务费”的功能,名字由你自己取,接收金额。 金额大于 1000 时,费用是 amount div 20;否则费用是 30。 不要写可直接运行的脚本入口。 ``` ### TSL-038: 发票规则包 ```text 请写一份 .tsf 代码: 请做一个“发票规则”unit,unit 名由你自己取。 外部只需要能调用一个“默认额度”功能,并得到 500。 请写成完整的 unit 文件。 ``` ### TSL-039: 运费规则包 ```text 请写一份 .tsf 代码: 请做一个“运费规则”unit,unit 名由你自己取。 外部只能调用一个“计算可计费重量”的功能。 内部可以有一个不对外公开的小工具,用来把负数修正为 0。 可计费重量要返回修正后的毛重减去皮重。 ``` ### TSL-040: 会员积分规则包 ```text 请写一份 .tsf 代码: 请做一个“会员积分规则”unit,unit 名由你自己取。 外部可以调用“基础分”和“最终积分”两个功能。 level 大于等于 3 时基础分是 20,否则是 5。 最终积分的结果是金额 div 10 加上基础分。 ``` ### TSL-041: 商品信息表 ```text 请写一份 .tsl 代码: 准备一条商品信息,里面有 sku = "B17",qty = 12。 请输出 sku 和 qty。 ``` ### TSL-042: 只取第一个成绩 ```text 请写一份 .tsl 代码: 有一组成绩 88、99、100。 请只取第一个值放到 first_mark,然后输出 first_mark。 ``` ### TSL-043: 读取两行数据 ```text 请写一份 .tsl 代码: 有两行数据:(8, 1) 和 (9, 2)。 请把两行分别取出来,再输出每行的两个值。 ``` ### TSL-044: 检查是否存在 ```text 请写一份 .tsl 代码: 先检查 5 是否在 2、5、8 这一组数字里,并输出结果。 再检查整行 (2, 5) 是否在两行数据 (1, 1)、(2, 5) 里面,并输出结果。 ``` ### TSL-045: 两组行数据对比 ```text 请写一份 .tsl 代码: left_rows 是 (1, "a")、(2, "b")。 right_rows 是 (2, "b")、(3, "c")。 请分别算出合并、交集、左边独有、两边不重叠的结果,并输出每个结果的大小。 ``` ### TSL-046: 只保留允许状态 ```text 请写一份 .tsl 代码: 有一批订单,每行包含订单号和状态。 再准备一份允许状态列表。 请只保留状态命中的订单,并输出保留下来的行数。 ``` ### TSL-047: 排除禁止状态 ```text 请写一份 .tsl 代码: 有一批任务,每行包含任务号和状态。 再准备一份禁止状态列表。 请排除命中的任务,并输出剩余行数。 ``` ### TSL-048: 查询商品数量 ```text 请写一份 .tsl 代码: 有一批商品数据,每行包含商品编号和数量。 请用 TS-SQL 只取数量大于 3 的行,并输出结果行数。 ``` ### TSL-049: 筛选并排序成绩 ```text 请写一份 .tsl 代码: 有一批姓名和分数。 请用 TS-SQL 只保留分数大于等于 60 的人,并按分数从高到低排序。 最后输出第一行的姓名。 ``` ### TSL-050: 部门金额汇总 ```text 请写一份 .tsl 代码: 有一批部门和金额数据。 请用 TS-SQL 按部门汇总金额,并输出汇总后的行数。 ``` ### TSL-051: 客户订单关联 ```text 请写一份 .tsl 代码: 有一组客户数据和一组订单数据,它们通过客户编号关联。 请用 TS-SQL 得到客户名称和订单金额,并输出关联后的行数。 ``` ### TSL-052: 多种数字写法 ```text 请写一份 .tsl 代码: 有几个配置值:0x2A、0b1010、0o12、200L、6E2。 请分别输出它们对应的类型判断结果。 ``` ### TSL-053: 日期和时间 ```text 请写一份 .tsl 代码: 有一个日期 20240618T,还有一个带时间的值 20240618.1530T。 请分别输出日期字符串和时间字符串。 ``` ### TSL-054: 数字真假判断 ```text 请写一份 .tsl 代码: 先输出 true 和 false。 再分别判断 4、0、-2 在 if 里会走哪个分支,并输出分支标记。 ``` ### TSL-055: Nil 参与计算 ```text 请写一份 .tsl 代码: 请输出 ifNil(nil) 的结果。 再输出 nil + 5、5 + nil,并检查 nil + nil 是不是 nil。 ``` ### TSL-056: 复数信息 ```text 请写一份 .tsl 代码: 准备两个复数:8 + 6j 和 complex(3, -4)。 请输出第一个复数的实部、虚部,并输出第二个值是不是复数。 ``` ### TSL-057: 批次报告 ```text 请写一份 .tsl 代码: 一批货有 17 件,每箱装 5 件;优先级是 3;距离是 9,基准是 4;ratio_base 是 7。 请输出完整箱数、剩余件数、优先级的四次方、距离与基准的按位关系结果, 以及 ratio_base 与 3 的左除计算结果。 ``` ### TSL-058: 补货数量 ```text 请写一份 .tsl 代码: 最低库存是 20,当前库存是 14。 如果库存不足,reorder_count 就是最低库存减当前库存;否则是 0。 请用条件表达式得到 reorder_count,并输出它。 ``` ### TSL-059: 候补分数 ```text 请写一份 .tsl 代码: primary_score 是 12,missing_score 是 0,候补值是 99。 请用省略真值的条件表达式分别得到两个最终分数,并输出。 ``` ### TSL-060: 发货判断 ```text 请写一份 .tsl 代码: paid 是 true,blocked 是 false,amount 是 120。 请用 and、or、not 判断是否允许发货,并输出结果。 ``` ### TSL-061: 权限掩码 ```text 请写一份 .tsl 代码: read_write 是 6,audit_exec 是 3。 请输出共同权限、合并权限、差异权限,以及 read_write 取反后的结果。 ``` ### TSL-062: 计数调整 ```text 请写一份 .tsl 代码: counter 一开始是 5。 先加 4,再自增一次,最后输出 counter。 ``` ### TSL-063: 安全读取订单金额 ```text 请写一份 .tsl 代码: maybe_order 是 nil。 请安全读取 maybe_order.total,并输出读取结果是不是 nil。 ``` ### TSL-064: 阈值范围 ```text 请写一份 .tsl 代码: 请判断 3、8、20 是否满足从小到大的连续比较,并输出结果。 ``` ### TSL-065: 三组指标逐项比较 ```text 请写一份 .tsl 代码: 有三组指标:2、4、6;3、5、7;4、6、8。 请逐项判断第一组是否小于第二组、第二组是否小于第三组, 并输出得到的三个结果。 ``` ### TSL-066: 发票号格式 ```text 请写一份 .tsl 代码: 发票号是 "INV-2024-07"。 请判断它是不是以 "INV-" 开头,并且后面包含数字,然后输出结果。 ``` ### TSL-067: 带注释的小脚本 ```text 请写一份 .tsl 代码: 请包含两种 TSL 支持的注释写法。 然后把 daily_total 设为 31,并输出它。 ``` ### TSL-068: 编译时模式选择 ```text 请写一份 .tsl 代码: 如果定义了 FAST_MODE,就输出 "fast";否则输出 "safe"。 请用条件编译完成。 ``` ### TSL-069: 临时上下文 ```text 请写一份 .tsl 代码: 请使用运行时 with 单星块。 在临时上下文里设置一个字段,并在块内输出这个字段。 ``` ### TSL-070: 嵌套上下文 ```text 请写一份 .tsl 代码: 请使用运行时 with 双星块。 在嵌套上下文里读取外层字段,并输出组合结果。 ``` ### TSL-071: 带超时的远程式调用 ```text 请写一份 .tsl 代码: 准备一个“慢速评分”的功能,名字由你自己取,它返回 12。 请用网格调用方式调用它,并设置超时时间,然后输出得到的结果。 ``` ### TSL-072: 全局缓存 ```text 请写一份 .tsl 代码: 把 "session_limit" 这个全局缓存设为 300。 再读取它并输出,同时输出这个缓存是否存在。 ``` ### TSL-073: 调试结果 ```text 请写一份 .tsl 代码: 请做一个“检查金额”的功能,名字由你自己取。 如果输入小于 0,请用 debugReturn 返回调试值;否则返回原值。 请用 -1 调用它并输出结果。 ``` ### TSL-074: 简单计时 ```text 请写一份 .tsl 代码: 请用内置计时开始和结束功能包住一个小循环,并输出计时结果。 ``` ### TSL-075: 兜底跳转 ```text 请写一份 .tsl 代码: flag 是 false。 如果 flag 为 false,就跳到 fallback 标签。 fallback 里输出 "fallback"。 ``` ### TSL-076: 账户卡片 ```text 请写一份 .tsl 代码: 我需要一种“账户卡片”对象,类型名由你自己取。 它要有一个公开字段,用来保存持有人姓名,字段名也由你自己取。 脚本里创建一张卡,把持有人设为 "Lina",然后输出这个字段。 ``` ### TSL-077: 仪表盒 ```text 请写一份 .tsl 代码: 我需要一种“仪表盒”对象,类型名由你自己取。 创建它时传入初始读数,保存到 reading。 它有一个“前进一步”的动作,动作名由你自己取,每次让读数增加 2,并给出新的读数。 脚本里创建一个初始读数为 10 的对象,输出调用这个动作后的结果。 ``` ### TSL-078: 设备总数 ```text 请写一份 .tsl 代码: 我需要一种“设备计数器”类型,类型名由你自己取,它有一个所有对象共享的 total_count。 脚本里把 total_count 设为 77,然后输出它。 ``` ### TSL-079: 汇率工具 ```text 请写一份 .tsl 代码: 我需要一种“汇率计算”类型,类型名由你自己取,上面直接提供一个“倍率相乘”的功能。 它返回 a * b。 脚本里通过类型本身调用这个功能处理 4 和 5,并输出结果。 ``` ### TSL-080: 货架编码 ```text 请写一份 .tsl 代码: 我需要一种“货架盒”对象,类型名由你自己取。 它内部有一个保存货架编码的字段,字段名由你自己取。 对外通过一个属性读写这个编码,属性名也由你自己取。 脚本里创建对象,把编码设为 "S-8",然后通过属性输出编码。 ``` ### TSL-081: 客户显示名 ```text 请写一份 .tsl 代码: 我需要一种“客户名称”对象,类型名由你自己取。 它内部有一个 string 类型字段,用来保存原始姓名,字段名由你自己取。 对外通过一个带类型的属性访问显示姓名,属性名也由你自己取。 脚本里设置并输出这个显示姓名属性。 ``` ### TSL-082: 两种渲染方式 ```text 请写一份 .tsl 代码: 我需要一种“格式化工具”对象,类型名由你自己取。 它有两个同名动作,动作名由你自己取:一个接收一个值,一个接收两个值。 脚本里分别调用这两种动作,并输出结果。 ``` ### TSL-083: 自行车对象 ```text 请写一份 .tsl 代码: 我需要一种“交通工具基础对象”,类型名由你自己取。 它有一个说明类别的动作,动作名由你自己取,结果是 "vehicle"。 再做一种“自行车对象”,类型名也由你自己取,继承前面的基础对象, 并增加一个说明轮子数量的动作,动作名由你自己取,结果是 2。 脚本里创建自行车对象,输出类别和轮子数量。 ``` ### TSL-084: 折扣价格标签 ```text 请写一份 .tsl 代码: 我需要一种“价格基础对象”,类型名由你自己取。 它有一个可被子类型改写的标签动作,动作名由你自己取,默认结果是 "base"。 再做一种“折扣价格对象”,类型名也由你自己取,把这个标签动作的结果改成 "discount"。 脚本里创建折扣价格对象并输出标签。 ``` ### TSL-085: 追加消息 ```text 请写一份 .tsl 代码: 我需要一种“基础消息对象”,类型名由你自己取。 它有一个给出文字的动作,动作名由你自己取,结果是 "base"。 再做一种“提醒消息对象”,类型名也由你自己取。 它的文字动作要先调用父级同名动作,再追加 "-alert"。 脚本里输出提醒消息对象的文字。 ``` ### TSL-086: 类外补充方法 ```text 请写一份 .tsl 代码: 我需要一种“票据打印器”,类型名由你自己取。 类型里面只先写出一个“打印编号”动作的名字,动作名由你自己取。 请在类型外面补上这个动作的内容,让它给出 "T-100"。 脚本里创建对象并输出结果。 ``` ### TSL-087: 按名称创建对象 ```text 请写一份 .tsl 代码: 我需要一种“动态盒子”对象,类型名由你自己取。 它有一个给出数值的动作,动作名由你自己取,结果是 64。 脚本里请通过字符串里的类型名创建这个对象,并输出这个数值。 ``` ### TSL-088: 临时句柄清理 ```text 请写一份 .tsl 代码: 我需要一种“临时句柄”对象,类型名由你自己取。 它被销毁时要输出 "released"。 脚本里创建它,然后把引用设为 nil。 ``` ### TSL-089: 外部评分函数 ```text 请写一份 .tsl 代码: 有一个外部提供的“评分”功能,TSL 中使用的名字由你自己取,它接收一个值并给出结果。 这里只需要写出它和外部功能的连接写法,不需要调用。 ``` ### TSL-090: 外部日志动作 ```text 请写一份 .tsl 代码: 有一个外部提供的“写日志”动作,TSL 中使用的名字由你自己取,它接收一段文本。 这里只需要写出它和外部动作的连接写法,不需要调用。 ``` ### TSL-091: 包装原生函数指针 ```text 请写一份 .tsl 代码: 假设 native_ptr 已经保存了一个原生函数指针。 请按 TSL 支持的方式把它包装成可调用对象,并演示传入两个数字调用。 ``` ### TSL-092: 后台任务 ```text 请写一份 .tsl 代码: 准备一个后台任务,名字由你自己取,里面输出 "work"。 请用线程相关写法启动它,并保持代码尽量小。 ``` ### TSL-093: FMArray 尺寸 ```text 请写一份 .tsl 代码: 创建一个 2 行 3 列的 FMArray。 请输出它是不是 FMArray,并输出行数、列数和总尺寸。 ``` ### TSL-094: 矩阵大小 ```text 请写一份 .tsl 代码: 准备一个两行三列的数字矩阵。 请输出它的行数、列数和总尺寸。 ``` ### TSL-095: 金额对象相加 ```text 请写一份 .tsl 代码: 我需要一种“金额盒子”对象,类型名由你自己取,里面有 value。 请让两个这种对象可以直接相加,相加后得到新的同类对象。 脚本里创建两个对象,并输出相加后的 value。 ``` ### TSL-096: 区分局部和全局功能 ```text 请写一份 .tsl 代码: 写一个局部功能,名字故意和某个系统功能一样。 脚本里请分别调用局部功能和全局/系统功能,并输出两次结果。 ``` ### TSL-097: 关闭默认写回 ```text 请写一份 .tsl 代码: 关闭默认的输入写回行为。 请做一个“双值触碰”动作,名字由你自己取:普通输入不要写回,明确标记为 var 的输入要写回。 脚本调用后输出两个变量,证明只有 var 那个改变了。 ``` ### TSL-098: In 和 Out ```text 请写一份 .tsl 代码: 关闭默认的输入写回行为。 请做一个“同步几个值”的动作,名字由你自己取,接收三个值,并只让 out 标记的值写回。 脚本调用时使用 in 和 out 前缀,然后输出三个变量。 ``` ### TSL-099: 提前退出 ```text 请写一份 .tsl 代码: 请做一个“保护性计算”的功能,名字由你自己取。 如果输入小于 0,就直接退出;否则给出输入乘以 2 的结果。 脚本里分别用 -1 和 6 调用它,并输出两次结果。 ``` ### TSL-100: 订单汇总 ```text 请写一份 .tsl 代码: 有一批订单行,每行包含商品名、数量、单价。 请做一个“计算单行金额”的功能,名字由你自己取。 遍历所有订单行,数量为 0 的行跳过,其他行累计金额。 如果总金额大于 100,输出 "bulk",否则输出 "normal"。 最后输出总金额。 ```