我正在尝试练习Ruby,并且正在制造回文检测器。
我尝试将else
更改为elsif
,但均无济于事。
print "Enter a Word and check if it's a Palindrome!"
word = gets.chomp
if word.reverse! == word
print "The word you entered was a Palindrome!"
else
print "The word is not a Palindrome!"
end
它只返回"The word you entered was a Palindrome!"
,但应该返回一个。
答案 0 :(得分:4)
您需要删除爆炸!
,因为String#reverse!会将字符串反转到位并且条件始终为真。
正在发生的事情:
word = "whathever"
word.reverse!
#=> "revehtahw"
word
#=> "revehtahw"
"revehtahw" == "revehtahw"
#=> true
这就是您需要的:
word = "whathever"
word.reverse
#=> "revehtahw"
word
#=> "whathever"
"revehtahw" == "whathever"
#=> false
答案 1 :(得分:2)
String#reverse!
returns self
,即reverse!
消息发送到的对象。因此,换句话说,word.reverse!
返回word
所引用的对象,该对象始终等于自身ergo
word.reverse! == word
始终为true
。
您要寻找的是String#reverse
,它会返回新字符串。
答案 2 :(得分:0)
就像其他人所说的那样,您需要删除!
运算符,因为str.reverse!
可以就地操纵字符串。
如果您是Ruby的新手,那么您也可以做一些很酷的事情,将代码放在if语句之前,以使其更具可读性并缩短它。另外,三元运算符(?:)
也很有用。
示例前的代码
print "Enter a Word and check if it's a Palindrome!"
word = gets.chomp
print "The word you entered was a Palindrome!" if word.reverse == word
print "The word is not a Palindrome!" if word.reverse != word
三元示例
print "Enter a Word and check if it's a Palindrome!"
word = gets.chomp
puts word.reverse == word ? "It's a Palindrome!" : "It's not a Palindrome!"
答案 3 :(得分:0)
当您添加“!”时对于方法(就像您使用word.reverse一样!),ruby将其表示永久更改原始内容,因此word将变为word.reverse。因此,当您比较word.reverse时!改为单词,您已经将单词改为相反的单词,因此您输入的每个单词都恢复为真实。
您需要更改的是
if word.reverse == word
这实际上将检查当前单词是否等于反向单词。