ruby - 有人可以帮我解决这个红宝石条件吗?
问题描述
我有这个代码:
def palindrome(string)
string.downcase.split(/\W+/).join('') == string.downcase.split(/\W+/).join('').reverse
end
我需要使用 if else 条件测试我的回文方法。如果第一个回文返回true
,我需要打印yes is a palindrome
。如果另一个回文是false
,我需要打印is not a palindrome. :(
。
有了这个测试代码,
p palindrome("Dennis, Nell, Edna, Leon, Nedra, Anita, Rolf, Nora, Alice, Carol, Leo, Jane, Reed, Dena, Dale, Basil, Rae, Penny, Lana, Dave, Denny, Lena, Ida, Bernadette, Ben, Ray, Lila, Nina, Jo, Ira, Mara, Sara, Mario, Jan, Ina, Lily, Arne, Bette, Dan, Reba, Diane, Lynn, Ed, Eva, Dana, Lynne, Pearl, Isabel, Ada, Ned, Dee, Rena, Joel, Lora, Cecil, Aaron, Flora, Tina, Arden, Noel, and Ellen sinned.")
p palindrome("Depardieu, go razz a rogue I draped")
p palindrome("Desserts I stressed.")
p palindrome("Detartrated.")
p palindrome("Devo met a Mr., eh, DNA and her mate moved.")
p palindrome("Di as dad said.")
p palindrome("Did I draw Della too tall, Edward? I did?")
p palindrome("Dior droid.")
p palindrome("DNA-land.")
p palindrome("Do geese see god?")
p palindrome("Do good? I? No. Evil anon I deliver. I maim nine more hero-men in Saginaw, sanitary sword a-tuck, Carol, I. Lo! Rack, cut a drowsy rat in Aswan. I gas nine more hero-men in Miami. Reviled, I (Nona) live on. I do, O God.")
p palindrome("abracadabra!")
p palindrome("Mister, mister, on a see-saw with your sister.")
p palindrome("Almost every sentence is NOT a palindrome! How unfair!")
我得到这个输出:
true
true
true
true
true
true
true
true
true
true
true
false
false
false
解决方案
您可以编写一个小函数来检查其输入是真还是假并打印所需的行。
def is_palindrome(string)
p palindrome(string) ? "yes is a palindrome" : "is not a palindrome. :("
end
is_palindrome("Depardieu, go razz a rogue I draped")
也就是说,有很多非常非常好的 Ruby 测试库。我真的很喜欢rspec。这是一个例子。
RSpec.describe "palindrome" do
it "ignores case" do
expect( palindrome("Detartrated") ).to be true
end
it 'ignores non-alpha numerics' do
expect( palindrome("DNA-land.") ).to be true
end
it 'ignores spaces' do
expect( palindrome("Dior droid.") ).to be true
end
it 'finds non-palindromes' do
expect( palindrome("abracadabra!") ).to be false
end
end
gem install rspec
然后运行它rspec
。
$ rspec ~/tmp/test.rb
....
Finished in 0.00442 seconds (files took 0.14683 seconds to load)
4 examples, 0 failures
对于一个小功能来说,这似乎有点过头了,但是当您进行更复杂的创建时,熟悉一个好的测试库将非常重要。它有助于组织和描述您正在测试的场景。如果测试失败,它会给你很好的信息。
1) palindrome failed palindrome
Failure/Error: expect( palindrome("slow speed: deep owls") ).to be true
expected true
got false
# /Users/schwern/tmp/test.rb:23:in `block (2 levels) in <top (required)>'
推荐阅读
- javascript - 按键值对 JSON 数组进行分组
- idyll - 如何向内置 idyll 组件添加类或 id
- python-3.x - 如何在 Mac 上的 python 3.7 中安装请求
- r - 从闪亮的选定数据表行中获取单元格值
- python-3.x - \r 以更新输出未按演示运行
- sql - SQL - 相乘的列未正确求和
- c - C 程序在执行 scanf() 并从用户那里获取输入后终止而没有任何错误
- react-native - 在反应原生的 Mapbox 上添加自定义表情符号
- c# - AWS Congito .NET Core JWT Lambda
- javascript - 通过将变量值与对象值匹配来创建变量?