2016-11-11 39 views
1

我将如何基本上低于“如果信==(一个字母包含在数组内‘letterbank’)===>打印字母”ELSIF包含在数组中

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 

假定ELSIF内说的信该方法被馈送a_guess,它是一个字符串形式的字母和一个单字母数组。当信是猜到了,它的出现,否则一个“_”打印

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

那么抱歉,我也假设我有保存每个字母的猜测,所以我想不想找个inlcude一个letterbank。我不知道我应该做的,下面的moethod或在它...(已经猜到字母)

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

所以在这种情况下,我想下面的打印...谢谢!

r___s__w 
+2

'letterbank.include? letter' – mudasobwa

+0

提示:字符串是有效的字符数组。制作字符阵列是浪费的。 – tadman

回答

0

的一种方法是使用哈希代替阵列。 将letterbank值复制到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') 
1

该溶液使用字符串而不是阵列,但可以很容易地使用阵列。 (将字符添加到字符串并在完成迭代后进行打印会为打印提供一些额外的灵活性,例如允许您使用puts)。

class LetterGuesser # Hangman 
    def initialize(word) 
    @word = word; 
    @guessed_letters = ''; 
    end 

    def guess_letter(letter) 
    @guessed_letters << letter if [email protected]_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

使用类是封装这一点的好方法。在这里需要注意的一点是,很多代码可以通过更有效地使用Enumerable和其他Ruby特性(如提供返回值以减少重复)来实现。 – tadman

+0

@tadman:thumsbup:绝对可以缩短它,但同时希望以问题的形式保留答案,以便他们可以很容易地理解并在必要时进行调整(例如添加我不是的'elsif'确定其目的)。 – Levsero

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'