操作正确性确认及Ruby代码功能异常问题技术咨询
你的Ruby代码问题分析及修正方案
嘿,我来帮你梳理下这段代码里的问题,还有操作上的调整建议:
代码里的几个问题
- 变量搞混啦:你定义了
pizza = "2.99"存价格,但后面计算的时候却用food_type.to_f——food_type是用户输入的食物名称(比如"pizza"),转成浮点数会变成0.0,完全不是你要的价格,应该用pizza这个变量才对。 - 语法错误:最后一行
puts #{food_amount.to_i * food_type.to_f}写法不对,Ruby里字符串插值必须把表达式放在双引号里,正确格式是puts "#{表达式}"。 - 没必要的
!:food_amount = gets.chomp!里的chomp!是修改原字符串的方法,这里用普通的chomp就足够了,!在这里纯属多余,还容易养成不好的编码习惯。 - 没做输入校验:如果用户输入的数量不是数字,
to_i会直接返回0,结果肯定不对,最好加个校验确保输入是有效数字。
修正后的代码(更健壮哦)
# 可以扩展成多种食物的价格表,方便后续添加 food_prices = { "pizza" => 2.99, "burger" => 3.99 } puts "Hello, what would you like to buy?" food_type = gets.chomp.downcase # 先检查用户要的食物有没有 unless food_prices.key?(food_type) puts "Sorry, we don't have #{food_type} available right now." exit end puts "How many?" food_amount_input = gets.chomp # 校验输入是不是有效数字 unless food_amount_input.match?(/^\d+$/) puts "Oops, please enter a valid number." exit end # 计算总价并格式化输出 food_amount = food_amount_input.to_i total_price = food_amount * food_prices[food_type] puts "Your total is $#{sprintf("%.2f", total_price)}"
操作正确性说明
你的核心思路是对的:先问食物类型、再问数量,最后算总价,但实现细节上出了点小问题,按照上面的修正调整后,代码就能正常运行,还能处理一些异常输入的情况哦~
内容的提问来源于stack exchange,提问作者Arjun Micah Tayo
相关产品推荐
相关产品推荐

