Ruby 我如何掩盖那些没有';t匹配什么';你期待什么?

Ruby 我如何掩盖那些没有';t匹配什么';你期待什么?,ruby,restrictions,Ruby,Restrictions,我的目标是创造一个游戏的刽子手。我编写了与此类似的代码: c = [] players_guess = gets b = "example" b.scan(/./) {|letter| c << letter} c.each do |letter| if letter == players_guess puts letter else puts "*" end end c=[] 玩家们猜得到 b=“示例” b、 扫描(/。/){字母| c你的If/

我的目标是创造一个游戏的刽子手。我编写了与此类似的代码:

c = []
players_guess = gets
b = "example"
b.scan(/./) {|letter| c << letter}

c.each do |letter|
  if letter == players_guess
    puts letter
  else
    puts "*"
  end
end  
c=[]
玩家们猜得到
b=“示例”
b、 扫描(/。/){字母| c你的If/Then逻辑是错误的
您的代码如下:

c.each do |letter|
  if letter == players_guess
    puts letter
  else
    puts "*"
  end
end
条件通常为false,因为没有单个字母可能与
get
检索到的整行匹配。因此,在c中为每个字母打印一个星号

修复代码的一些选项 你可以在这里做几件事

  • 只要显示字符串,如果字符串相等

    puts players_guess if b == players_guess.chomp
    
  • 在循环中使用计数器索引到数组或字符串中

  • 将两个字符串拆分为一个数组,并比较数组,打印匹配的字母或不匹配的字符上的星号

    c.each_with_index do |char, idx|
      puts char == players_guess.scan(/./)[idx] ? char : '*'
    end
    

  • 这里有一个简单的方法来做你想做的事:

    word = "example"
    puts "Type a letter: "
    guess = gets.chomp
    puts word.tr("^#{guess}", "*")
    
    这将使用
    String#tr
    方法替换除猜测之外的所有字符串


    如果您键入
    e
    的输出将是
    e****e

    错误的是您期望会发生不同的事情:)您需要什么提示?我期望,例如,如果玩家_guess=“e”,它将显示“e*******e”。但它会给出“e********”.而且它显示了玩家(无论我选择什么字母或数字)(我不知道你在这里使用的方法,但无论如何,谢谢,我会尽我所能进行研究)