【发布时间】:2016-02-16 12:57:17
【问题描述】:
我正在将给定的单词与用户对刽子手游戏的猜测进行比较。 word 是用户想要猜测的字符串,guesses 是与用户猜对的字母连接的字符串。
def initialize(word)
@word = word
@guesses = ''
@wrong_guesses = ''
end
我正在使用if word.delete(guesses).empty? 来确定获胜条件。每次猜测都会运行此代码,因此我无法找到用户猜测所有正确字母的位置,并且word.delete(guesses) 不会评估为空。
def check_win_or_lose
if @word.delete(@guesses).empty?
#is this a better choice?
#if @word == self.word_with_guesses
return :win
elsif @wrong_guesses.length >= 7
return :lose
else
return :play
end
end
它有效,但我觉得这有点 hacky,使用 delete 的副作用。我想知道是否有更好、更简洁的方法来做到这一点。也许使用一些正则表达式?
我已经在程序的另一部分使用了一个函数;不确定它是否比.delete.empty? 方法更快/更好。它返回 word 和 '-' 代替未猜到的字母:
def word_with_guesses
displayed = @word
@guesses.length > 0 ? displayed.gsub(/[^#{guesses}]/i, '-') : displayed.gsub(/./, '-')
end
【问题讨论】:
-
什么是
guesses?请发布您的代码 sn-p 以便我们有机会了解。 -
如果还有什么可以补充的,请告诉我。
guesses是用户做出的正确猜测,而不是 TOTAL。在适当的条件下( -
"就像我使用了 .delete() 的副作用" 不,你使用的是 .delete() 的 result . .delete() 没有副作用。我认为使用方法调用的结果没有任何问题(这就是它们的用途)。特别是考虑到根据副本中的答案,这似乎是最快的方式。
-
如果单词是“foo”并且猜到了“o”,那会暴露一两个“o”吗?
标签: ruby