找不到命令Ruby - 尝试创建24个游戏

时间:2014-08-08 23:58:50

标签: ruby

我正在尝试解决“24”游戏。游戏的要点是从1-9生成4个随机整数,并要求玩家使用加法,减法,乘法或除法来得到数字24.我的代码运行正常,直到玩家输入一个数字,然后我得到“没有找到指令”。有人可以看看这个:

def evaluate (input,solved_v)
    input = eval (input.to_f)
    #convert to a float and then evaluates it; it computes
    if input == 24
        solved_v = true
        puts "great job! you did it!"
    else
        puts "please try again"
    end
end

def test_entry (input)
    if input.scan(%r{[^\d\s()+*/-]}).empty?
        #this scan detects letters and special characters because only numbers work
        true
    else
        false
    end
end


puts
puts "try to use +, -, / or * to"
puts "get 24 from the integers provided"
puts

series = (1..4).collect{ rand(1..9)} 
    #generates 4 random numbers between 1 and 9

for i in series
    puts i
end

puts "Please guess"

solved = false

unless solved = true

    user_input = gets.chomp

    if test_entry(user_input) == true
        evaluate(user_input)
    else
        puts "invalid characters entered"
        puts "please try again"
        puts
    end
end

1 个答案:

答案 0 :(得分:1)

您的计划存在许多问题。

  • 不要在方法名称和括号之间加上空格。
  • eval接受字符串参数,而不是浮点数。
  • Ruby按值传递参数,因此solved_v不会得到 回。将其设为evaluate方法的返回值。我也是 建议重命名您的方法以表达其布尔意图。见下文......
  • 不要检查布尔表达式是否与truefalse相等,只需使用它们。

def correct?(input)
  if eval(input) == 24
    puts "great job! you did it!"
    true
  else
    puts "please try again"
    false
  end
end

def good_entry?(input)
  input.scan(%r{[^\d\s()+*/-]}).empty?
end

他们按如下方式使用

while true
  user_input = gets.chomp
  if good_entry?(user_input)
    break if correct?(user_input)
  else
    ...
  end
end

最后,请注意,您实际上并未检查用户提供的输入是否仅使用提供的随机数。