2015-01-31 153 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

相关问题