我如何在elsif下面说“if letter ==(数组中包含的字母”letterbank“)===> print letter”
an_array = ["r", "i", "c", "s", "h", "a", "w"]
letter_guess = "r"
假设该方法是a_guess,这是一个字母形式的字母和一个单个字母的数组。当猜到一个字母时,它会出现,或者打印出“_”
letterbank = ["s", "w", "t", "j"]
然后抱歉我也假设我必须保存每封猜到的字母,所以我想在某个地方包含一个信笺。我不知道我是否应该在moethod下面或者在它内面那样做...(已经猜到了字母)
r___s__w
所以在这种情况下,我希望下面打印...谢谢!
{{1}}
答案 0 :(得分:2)
此解决方案使用字符串而不是数组,但可以轻松使用数组。 (将字符添加到字符串并在完成迭代后打印在打印中提供了一些额外的灵活性,例如允许您使用puts
)。
class LetterGuesser # Hangman
def initialize(word)
@word = word;
@guessed_letters = '';
end
def guess_letter(letter)
@guessed_letters << letter if !@guessed_letters.include?(letter)
current_guesses = ''
@word.each_char do |char|
if guessed_letters.include?(char)
current_guesses << letter
else
current_guesses << '_'
end
end
puts current_guesses
end
end
game = LetterGuesser.new('test')
game.guess_letter('e')
答案 1 :(得分:1)
这里最简单的解决方案是使用裸字符串并String#tr
替换你:
def hide_or_not(word, guesses)
word.tr('^' + guesses, '_')
end
你可以看到这样的工作:
hide_or_not('rickshaw', 'r')
# => "r_______"
hide_or_not('rickshaw', 'rswtj')
=> "r___s__w"
数组和字符串通常以相同的方式工作,如:
# Define an empty string
guesses = ''
# Append a character to the string
guesses << 'r'
答案 2 :(得分:0)
一种方法是使用Hash而不是Array。 将letterbank值复制到Hash mapping Letter为1(或true)以表明该字母存在。
def hide_or_not(an_array, a_guess)
letterbank = ["r", "s", "w", "t", "j"]
letterhash = {} # define a new hash
letterbank.each { |c| letterhash[c] = 1 } # copy array values into the hash
an_array.each do |letter|
if (a_guess == letter)
print a_guess
elsif letterhash[letter] # check if the letter is in the hash
print letter
else
print "_"
end
end
端
an_array = ["r", "i", "c", "s", "h", "a", "w"]
hide_or_not(an_array, 'r')