首页 > 解决方案 > 有人可以帮我解决这个红宝石条件吗?

问题描述

我有这个代码:

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

标签: ruby

解决方案


您可以编写一个小函数来检查其输入是真还是假并打印所需的行。

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)>'

推荐阅读