elsif包含在数组中的字母

时间:2016-11-11 17:21:19

标签: ruby include each

我如何在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}}

3 个答案:

答案 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')