2014-05-04 104 views
0

嘿,我剛剛開始在codeacademy上學習Ruby,並且遇到了一個可選的挑戰,我無法得到的練習。該程序採用用戶定義的字符串並「重新顯示」用戶想要「編輯」的單詞。正如你所看到的,它將字符串轉換爲數組,然後循環遍歷數組中的每個值(又稱單個單詞),並試圖將原始字符串的值與用戶想要「編輯」的單詞的值進行交叉檢查。最初的問題是讓它編寫一個變量,挑戰是編輯多個單詞。我的問題是,當它通過檢查循環時,它保持返回值錯誤。我明白什麼是錯的,循環必須不止一次地檢查數值,當它不能打印出'=='時,它會一直打印出這個單詞,但有沒有辦法解決這個問題?還是有更好的角度來解決這個問題?如何在循環中重複輸出Ruby中的循環

puts "Give me what you've got" 
text = gets.chomp 
text.downcase! 
puts "What words do you wish to redact" 
redact = gets.chomp 
redact.downcase! 
bye_words = redact.split(" ") 
words = text.split(" ") 
words.each do |single_word| 
    bye_words.each do |word_in_question| 
     if word_in_question == single_word 
      print "REDACTED " 
     else 
      print single_word + " " 
     end 
    end 
end 
+0

在內部循環中,只需跟蹤是否找到匹配項即可。然後在內部循環之後,如果找到匹配項,則打印「已刪除」,如果沒有,則打印該單詞。 – JKillian

+0

你能解釋一下我會怎麼做嗎?我想象這涉及某種布爾的使用...? – d4wtty

+0

甜蜜我想出瞭如何使這項工作,現在它完美的工作。謝謝 – d4wtty

回答

0

也許只是用include?,而不是另一個循環:

puts "Give me what you've got" 
text = gets.chomp 
text.downcase! 
puts "What words do you wish to redact" 
redact = gets.chomp 
redact.downcase! 
bye_words = redact.split(" ") 
words = text.split(" ") 

words.each do |single_word| 
    if bye_words.include? single_word 
    print "REDACTED " 
    else 
    print single_word + " " 
    end 
end 

甚至gsub,但也許這就是作弊......?

0

這樣的事情呢?你不通過兩套不同的具有循環:

puts "Give me what you've got" 
text = gets.chomp 
text.downcase! 
puts "What words do you wish to redact" 
redact = gets.chomp 
redact.downcase! 
bye_words = redact.split(" ") 
words = text.split(" ") 
ouput_words = [] 
words.each do |single_word| 
    if bye_words.include?(single_word) 
     ouput_words << "REDACTED" 
    else 
     ouput_words << single_word 
    end 
end 

print ouput_words.join(" ") + "\n" 
0

最快的方式獲得(幾乎),你需要使用-什麼:

puts "Give me what you've got" 
text = gets.chomp 
text.downcase! 
puts "What words do you wish to redact" 
redact = gets.chomp 
redact.downcase! 
bye_words = redact.split(" ") 
words = text.split(" ") 

puts (words - bye_words).join(' ') 

的問題是,編校的話會簡單地從文本('REDACTED'不會被添加)刪除。

爲了滿足該要求,您需要查找bye_words中的每個單詞是否爲included?。有什麼可以改進別人的建議是將bye_words的列表變成Set

require 'set' 
puts "Give me what you've got" 
text = gets.chomp 
text.downcase! 
puts "What words do you wish to redact" 
redact = gets.chomp 
redact.downcase! 
bye_words = Set.new(redact.split(" ")) 
words = text.split(" ") 

puts words.map { |word| bye_words.include?(word) ? 'REDACTED':word }.join(' ')