Может кто-нибудь может помочь мне с этим условным рубином? - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть этот код:

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

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы можете написать небольшую функцию, чтобы проверить, является ли ее ввод истинным или ложным, и напечатать нужную строку.

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)>'
0 голосов
/ 25 сентября 2018

Обратите внимание, что string.downcase.split(/\W+/).join('') == string.downcase.split(/\W+/).join('').reverse ? 'yes is a palindrome' : ' is not a palindrome. :(' такой же, как этот:

if string.downcase.split(/\W+/).join('') == string.downcase.split(/\W+/).join('').reverse
'yes is a palindrome'
else
' is not a palindrome. :('
end    

Ответ:

def palindrome(string)
      string.downcase.split(/\W+/).join('') == . 
      string.downcase.split(/\W+/).join('').reverse ? 'yes is a palindrome' : ' is not a palindrome. :('
    end

# test code

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!")

Это вернет:

"yes is a palindrome"
"yes is a palindrome"
"yes is a palindrome"
"yes is a palindrome"
"yes is a palindrome"
"yes is a palindrome"
"yes is a palindrome"
"yes is a palindrome"
"yes is a palindrome"
"yes is a palindrome"
"yes is a palindrome"
" is not a palindrome. :("
" is not a palindrome. :("
" is not a palindrome. :("
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...