elsif 包含在数组中的字母

elsif a letter contained in an array

我基本上会在下面的 elsif 中说什么 "if letter == (a letter contained within the array "letterbank") ===> print letter"

def hide_or_not(an_array, a_guess)
    an_array.each do |letter|
      if a_guess == letter
        print a_guess
      elsif SOMETHING HERE
        print letter
      else
        print "_"
      end
    end
  end

假设该方法被输入 a_guess,这是一个字符串形式的字母和一个单个字母的数组。当猜到一个字母时,它就会出现,否则会打印一个“_”

an_array = ["r", "i", "c", "s", "h", "a", "w"]
letter_guess = "r"

那么抱歉,我还假设我必须保存每个猜到的字母,所以我想在某个地方包含一个信箱。我不知道我是应该在模式之下还是在模式之内做...(已经猜到的字母)

letterbank = ["s", "w", "t", "j"]

所以在这种情况下,我希望打印以下内容...谢谢!

r___s__w

一种方法是使用哈希而不是数组。 将 letterbank 值复制到哈希映射 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')

此解决方案使用的是字符串而不是数组,但也可以轻松地使用数组。 (将字符添加到字符串并在完成迭代后打印为打印提供了一些额外的灵活性,例如允许您使用 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')

此处最简单的解决方案是使用裸字符串,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'