2015-01-31 105 views
0

我正在製作一個簡單的程序,根據所選單詞對用戶輸入進行審查。Ruby:是否可以將if語句==設置爲2個變量?

puts "Enter your Text: " 
text = gets.chomp.downcase! 

puts "Word to censor: " 
censor1 = gets.chomp 
censor1.downcase! 

puts "Second word to censor: " 
censor2 = gets.chomp 
censor2.downcase! 

words = text.split(" ") 
words.each do |letter| 
    if letter == censor1 
    print "CENSORED " 
    else 
    print words + " " 
    end 
end 

那麼,是否可以設置:'if letter == censor1 and censor 2'?

+1

Th e「和」沒有任何意義。你可能意思是「或」。 – 2015-01-31 19:49:40

+0

我給出了一個解釋你的問題的答案,就像其他人一樣,但現在我不太確定,所以我修改了我的答案。你需要編輯問題來澄清你所問的問題。 – 2015-01-31 20:16:44

回答

2

可如果存在對象數組的Array#include?

if [censor1, censor2].include?(letter) 

你的代碼的位簡化字幫助檢查:

puts 'Enter your Text: ' 
text = gets.chomp.downcase 
puts 'Word to censor: ' 
censor1 = gets.chomp.downcase 
puts 'Second word to censor: ' 
censor2 = gets.chomp.downcase 

text.split(' ').each do |word| 
    if [censor1, censor2].include?(word) 
    print 'CENSORED '                                         
    else 
    print word + ' ' 
    end 
end 

,更容易和更好的解決方案與String#gsub它取代所有出現在文字中的刪減詞:

puts 'Enter your Text: ' 
text = gets.chomp.downcase 
puts 'Word to censor: ' 
censor1 = gets.chomp.downcase 
puts 'Second word to censor: ' 
censor2 = gets.chomp.downcase 

[censor1, censor2].each { |c| text.gsub!(c, 'CENSORED') } 
puts text 
2

如果你問如果(downcased)censorX包含字符letter

censor1+censor2.include?(letter) 

如果你問如果兩個censorX的包含字符letter

censor1.include?(letter) && censor1.include?(letter) 

如果你是詢問是否所有censorX字符串等於字符串letter,則:

if [censor1, censor2,...].uniq == [letter] 
    ... 
end 
+0

這似乎是正確的答案,但是...我仍然收到此錯誤:http://m.imgur.com/AZbQqjG – MalumAtire832 2015-01-31 19:22:55

+0

@ MalumAtire832將''downcase!'更改爲'downcase'。如果沒有字符被改變,第一個方法返回'nil'。 – 2015-01-31 19:43:30

+0

',...'後面的'censor2'只是爲了表明它可以推廣到任何數量的'censorX's。刪除',...'來運行這兩個。 @JesseSielaff,你的意思是你對OP的評論嗎? – 2015-01-31 19:57:24