在Ruby中制作类猜测游戏,坚持实例方法猜测
好的,我有一个作业要做一个叫做猜谜游戏的类,然后创建一个猜谜游戏!哈哈。但说真的,我必须做一个游戏,把输入作为一个介于1和10之间的整数。我已经完成了类的语法框架,但是当我使用实例方法guess时,我就被卡住了。如果用户的猜测高于随机数,则应返回“:high”。如果低于该数字,则返回“:low”。如果是正确的号码,你就知道要点了。我想这与我的条件句有关。以下是我迄今为止的所有代码:在Ruby中制作类猜测游戏,坚持实例方法猜测,ruby,class,Ruby,Class,好的,我有一个作业要做一个叫做猜谜游戏的类,然后创建一个猜谜游戏!哈哈。但说真的,我必须做一个游戏,把输入作为一个介于1和10之间的整数。我已经完成了类的语法框架,但是当我使用实例方法guess时,我就被卡住了。如果用户的猜测高于随机数,则应返回“:high”。如果低于该数字,则返回“:low”。如果是正确的号码,你就知道要点了。我想这与我的条件句有关。以下是我迄今为止的所有代码: class GuessingGame def initialize(answer) @answer
class GuessingGame
def initialize(answer)
@answer = answer
end
answer = rand(10) + 1
def guess(guess)
if guess.to_i > answer
return ":high"
elsif guess.to_i < answer
return ":low"
else
return ":correct"
end
end
def solved?
end
end
这是我对你的代码的一个小小的回顾。我想它不会通过你的规格,但是
class GuessingGame
def initialize
@answer = answer
@solved = false
end
def answer
rand(10) + 1
end
def guess(guess)
if guess.to_i > answer
:high
elsif guess.to_i < answer
:low
else
:correct
end
end
def try_to_guess(assumption)
result_of_guessing = guess(assumption)
@solved = true if result_of_guessing == :correct
puts "Your assumption is #{result_of_guessing}"
end
def solved?
@solved
end
end
若要调用函数,则应定义该函数
下一步:
“high”是字符串,而:high是Ruby char。它非常接近弦,我想你在这一点上有点误解。另外,您不必使用return,因为ruby函数默认返回最后计算的值,即使在if-else语句中也是如此。在类定义之后,您必须将变量设置为类的新实例,然后您可以调用该方法
class GuessingGame
attr_reader :answer
def initialize
@answer = rand(10) + 1
end
def guess(guess)
if guess.to_i > answer
return ":high"
elsif guess.to_i < answer
return ":low"
else
return ":correct"
end
end
def solved?
end
end
a = GuessingGame.new
puts a.guess(2)
类猜游戏
读者:回答
def初始化
@答案=兰特(10)+1
结束
def猜测(猜测)
如果猜猜答案
返回“:高”
elsif guess.to_i<答案
返回“:低”
其他的
返回“:正确”
结束
结束
def解决了吗?
结束
结束
a=猜谜游戏
猜一猜(2)
由于返回的是字符串,因此除非调用puts/print,否则不会显示该字符串
您可以将该字符串替换为,而不是返回。
此外,您还需要attr_reader:answer,否则,您无法从类外访问答案,并且它将无法工作。请阅读有关att访问器的信息。
最后,你可以直接做@answer=rand(10)+1。首先,对你的原创作品做一些注释
变量可以直接初始化,并且 必须在代码的其他地方引用为@answer
@answer
- 在
方法中,guess
不会打印 任何东西都可以放在控制台上return
- 您没有保存游戏状态的变量(已解决或未解决) 已解决)
class GuessingGame
def initialize
@answer = rand(10) + 1
@solved = false
end
def guess(guess)
if guess.to_i > @answer
puts "high"
elsif guess.to_i < @answer
puts "low"
else
@solved = true
puts "correct"
end
end
def solved?
if @solved
puts "You guessed it!"
else
puts "Keep guessing!"
end
end
end
你为什么这样评论:
#def guess(guess)
,你得到的确切错误是什么。糟糕,我不是有意评论的。在我的代码中没有注释。以下是我遇到的错误:#猜测游戏#猜测返回:猜测过高时高#猜测游戏#猜测返回:猜测过低时低#猜测游戏#猜测返回:猜测正确时正确#猜测游戏#猜测更改解决了?当做出正确的猜测时#猜游戏#猜不改?当做出错误的猜测时#猜游戏#猜测反映了最后的猜测哇,你能编辑并以可读的格式将其放入你的问题中吗?也许您想要的是guess=$stdin.gets.to_i
显示规范错误消息。我冒昧猜测,它们都包含类似于“NoMethodError:no method'answer` forGuessingGame
”的内容。要修复此问题,请将attr\u reader:answer
添加到类定义中
return ":high"
class GuessingGame
attr_reader :answer
def initialize
@answer = rand(10) + 1
end
def guess(guess)
if guess.to_i > answer
return ":high"
elsif guess.to_i < answer
return ":low"
else
return ":correct"
end
end
def solved?
end
end
a = GuessingGame.new
puts a.guess(2)
class GuessingGame
def initialize
@answer = rand(10) + 1
@solved = false
end
def guess(guess)
if guess.to_i > @answer
puts "high"
elsif guess.to_i < @answer
puts "low"
else
@solved = true
puts "correct"
end
end
def solved?
if @solved
puts "You guessed it!"
else
puts "Keep guessing!"
end
end
end
2.0.0-p481 :001 > load './guessing_game.rb'
=> true
2.0.0-p481 :002 > game = GuessingGame.new
=> #<GuessingGame:0x00000001803a80 @answer=6, @solved=false>
2.0.0-p481 :003 > game.guess(5)
low
=> nil
2.0.0-p481 :004 > game.guess(7)
high
=> nil
2.0.0-p481 :005 > game.solved?
Keep guessing!
=> nil
2.0.0-p481 :006 > game.guess(6)
correct
=> nil
2.0.0-p481 :007 > game.solved?
You guessed it!
=> nil