繁体   English   中英

将字符串的每个字符显示为下划线,每个下划线之间都有一个空格

[英]display each character of a string as an underscore with a space between each underscore ruby

我正在尝试创建一个单词猜测游戏,该游戏将字符串作为输入。 我发现尝试将字符串的每个字符显示为下划线并在其之间留有空格非常困难。 例如,单词“ cookie”将显示为_ _ _ _ _ _每个下划线代表字符串的每个字符。 我曾尝试使用scan和tr,但无法使其正常工作。 我有以下代码:

class Game
  attr_reader :word
  attr_accessor :guess_counts

  def initialize(word)
    @word = word
  end

  def guesses_available
    @guess_counts = @word.length
  end

  def display
     print @word.tr_s('a-z','_ ')
  end

end


# user interface

puts "Please enter a word to initialize the Guessing The Word game"
  secret_word = gets.chomp

  game = Game.new(secret_word)

puts "you have #{@guess_counts} attemps left"
game.display 

由于您并不关心实际字符,而是希望将每个字符都表示为_ ,因此我将执行以下操作:

Array.new("cookie".length, '_').join(' ')
#=> "_ _ _ _ _ _"

要么:

('_' * "cookie".length).split(//).join(' ')
#=> "_ _ _ _ _ _"

用您的字符串变量替换"cookie" ...

我假设您最终将要存储用户的猜测并仅显示他们猜测的字母。 尝试这个:

guesses = [] #letters guessed go into this array
@word.chars.map { |c| guesses.include?(c) ? c : '_' }.join(' ')

如果您只想显示每个字母的下划线而没有任何其他逻辑,则可以执行以下操作:

@word.chars.map { |c| '_' }.join(' ')

如果要对用户猜测的单个字母采取行动,则可以执行以下操作:

letter = 'a' #or whatever letter you get from the user
@word.chars.map { |c| letter == c ? '-' : '_' }.join(' ')

这是一个基于第一个代码段的简单但功能齐全的子手示例。 基本上,我正在做的是循环运行第一个代码段,并每次获取用户输入,做一点逻辑,看他们是否猜对了正确的字母,并跟踪剩余的尝试次数。

@word = 'boop'

guesses = [] #letters guessed go into this array
tries = 5

while tries > 0
  guess = gets[0]
  if !@word.include? guess
    puts "wrong."
    tries -= 1
    next
  end
  guesses << guess
  display = @word.chars.map { |c| guesses.include?(c) ? c : '_' }.join(' ')

  puts display

  if !display.include? '_'
    puts 'you win!'
    break
  end

end

您使用tr在正确的轨道上,但是您需要使用反转运算符^翻转匹配的猜测。 这是您需要的核心功能:

def underscored(word, guesses)
  word.tr('^' + guesses, '_').chars.join(' ')
end

例如:

underscored('transistor', 'aebr')
# => "_ r a _ _ _ _ _ _ r"

如果您将每个猜出的字母附加到字符串上,例如guesses << guess那么它与tr可以很好地配合使用。 请记住,字符串从根本上讲是一个字符数组,因此不要为此类事情创建显式数组。

如果您想跟踪@guess_counts,我会考虑将其初始化并在每个计数后添加一个,并在告诉他们有多少初始猜测时仅调用game.guesses_available。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM