我正在尝试解决“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
答案 0 :(得分:1)
您的计划存在许多问题。
eval
接受字符串参数,而不是浮点数。solved_v
不会得到
回。将其设为evaluate
方法的返回值。我也是
建议重命名您的方法以表达其布尔意图。见下文...... true
或false
相等,只需使用它们。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
最后,请注意,您实际上并未检查用户提供的输入是否仅使用提供的随机数。