Python转Lua实现机票计价功能的代码问题排查与修正
代码存在的核心问题
- 星期表定义无效:你写的
week_day是存储了若干字符串的列表,既没有实现数字到星期的映射关系,后续逻辑也完全没有调用这个表,属于冗余无效代码。 - 输入类型不匹配:Lua中
io.read()默认读取返回的是字符串类型,直接拿字符串和数字65、2做比较运算,无法触发预期的条件判断结果,必须先将输入内容转换为数值类型。 - 细节拼写错误:表示票价的单词应为
fare,你代码中写的fair词义为公平的,属于拼写失误。
修正后可直接运行的代码
-- 星期映射表,键为1-7的数字,值为对应星期名称,用于输入提示 local week_day = { [1] = "Monday", [2] = "Tuesday", [3] = "Wednesday", [4] = "Thursday", [5] = "Friday", [6] = "Saturday", [7] = "Sunday" } -- 打印输入提示,告知用户数字对应的星期 print("Week number rule:") for idx, day_name in pairs(week_day) do print(string.format("%d = %s", idx, day_name)) end -- 读取年龄输入并转为数字 print("Enter your age:") local user_age = tonumber(io.read()) -- 读取星期输入并转为数字 print("Enter the day of the week (1-7):") local input_day = tonumber(io.read()) -- 执行票价判断,增加输入合法性校验避免报错 if user_age and input_day and user_age >= 65 and input_day == 2 then print("Your fare is $75\n") else print("Your fare is $150\n") end
关键修改点说明
- 重构了星期表的结构,真正实现数字序号到星期名称的映射,可直接用于给用户展示输入规则
- 用
tonumber()方法将用户输入的字符串内容转换为数值,解决类型不匹配导致条件判断失效的问题 - 增加了输入合法性校验,当用户输入非数字内容时不会抛出异常,会直接走150美元票价的分支
- 修正了票价相关的单词拼写错误,清理了不必要的冗余参数和缩进
内容的提问来源于stack exchange,提问作者elijahh7
相关产品推荐
相关产品推荐

