Ruby计算器代码可运行但无法返回预期计算结果求助
计算器代码问题分析与修复
你的代码存在以下几个关键问题:
- 函数定义语法错误:
def calculator(num1,num2)末尾缺少冒号:,Ruby语法要求方法定义后必须加冒号 - 变量类型错误:
- 第一个数字
num1仅使用gets.chomp获取,未转换为数值类型(to_i或to_f),后续计算会变成字符串拼接而非数值运算 - 运算符
opp被错误转换为浮点数to_f,运算符是字符串类型,转成浮点数后会变成0.0,永远无法匹配"+"/"-"等字符串运算符
- 第一个数字
- 条件判断逻辑错误:第一个
if判断opp == "",但正确的加法运算符应该是"+",且此时opp已经是浮点数,永远不会匹配空字符串 - 输出内容错误:所有分支里的
puts"num1+num2"这类代码,只是输出字符串文本,而非执行num1 + num2的计算结果 - 递归与语法缺失:
- 最后一行的递归调用
calculator(num1,num2)会导致无限循环,完全没必要 - 缺少
if语句的闭合end和函数的闭合end,语法不完整
- 最后一行的递归调用
修正后的代码:
def calculator puts "Enter your first number" num1 = gets.chomp.to_f puts "Enter operator (+, -, *, /, %)" opp = gets.chomp puts "Enter your second number \u{2753}" num2 = gets.chomp.to_f result = case opp when "+" then num1 + num2 when "-" then num1 - num2 when "*" then num1 * num2 when "/" num2 == 0 ? "Cannot divide by zero" : num1 / num2 when "%" num2 == 0 ? "Cannot mod by zero" : num1 % num2 else "Wrong operator" end puts "Your Result is #{result}" end # 调用计算器函数 calculator
修正说明:
- 去掉了函数参数,因为参数会被内部输入覆盖,完全没必要
- 所有数字输入都转换为
to_f,支持整数和小数计算 - 运算符保留为字符串类型,不再转换为浮点数
- 使用
case语句替代多个if-elsif,逻辑更清晰 - 增加了除数为0的异常判断,避免运行错误
- 移除了错误的递归调用,直接计算并输出结果
- 补全了所有语法所需的
end
内容的提问来源于stack exchange,提问作者blackrose
相关产品推荐
相关产品推荐

