2016-04-09 8 views
1

Ich mache eine Programmierübung in Ruby, um festzustellen, ob eine Zeichenfolge ein Palindrom ist. Hier ist, was ich kam mit:Ruby Programmierung Übung, um festzustellen, ob eine Zeichenfolge ein Palindrom ist

# Write a method that takes a string and returns true if it is a 
# palindrome. A palindrome is a string that is the same whether written 
# backward or forward. Assume that there are no spaces; only lowercase 
# letters will be given. 
# 
# Difficulty: easy. 

def palindrome?(string) 
    iterations=string.length/2 
    is_palindrome=true 
    i=0 
    while i<iterations 
     if string[i] != string[string.length-i-1] 
      puts("string is not a palindrome") 
      is_palindrome=false 
     end 
     i+=1 
    end 
    return is_palindrome 
end 

# These are tests to check that your code is working. After writing 
# your solution, they should all print true. 

puts("\nTests for #palindrome?") 
puts("===============================================") 
    puts('palindrome?("abc") == false: ' + (palindrome?('abc') == false).to_s) 
    puts('palindrome?("abcba") == true: ' + (palindrome?('abcba') == true).to_s) 
    puts('palindrome?("z") == true: ' + (palindrome?('z') == true).to_s) 
puts("===============================================") 

Dies gibt die folgende:

Tests for #palindrome? 
=============================================== 
string is not a palindrome 
palindrome?("abc") == false: true 
palindrome?("abcba") == true: true 
palindrome?("z") == true: true 
=============================================== 

Die erste Ausgabe sein sollte „false“, und ich kann nicht herausfinden, warum es nicht zurück. Es wird "String ist kein Palindrom" gedruckt, also würde ich erwarten, dass es auch die "is_palindrome" Variable auf "false" setzt und das zurückgibt.

Antwort

3

Was Ihre Lösung betrifft, glaube ich, dass Sie sich irren, dass Ihr Code wie erwartet funktioniert. Natürlich ist false == false wahr, also palindrome?("abc') == false is true.

Obwohl zu Ihrer Lösung nicht direkt, sondern wie über eingebaute mit reverse Funktionalität von Rubin

def palindrome?(string): 
    string == string.reverse 
end 
+0

Hallo hspandher, danke für deine Antwort. In der Tat glaube ich, dass ich den Output falsch interpretiert habe; der Code funktioniert tatsächlich, wenn alle "True" zurückgeben. (Und ja, mit. Reverse gibt das gleiche Ergebnis). –

0

Haftungsausschluss: Diese Antwort Ihrer Frage nicht beantworten, war die other answer schneller.

Wenn Sie Ihren Code testen möchten, sollten Sie auch Unit-Tests verwenden.

Ein Beispiel:

# Write a method that takes a string and returns true if it is a 
# palindrome. A palindrome is a string that is the same whether written 
# backward or forward. Assume that there are no spaces; only lowercase 
# letters will be given. 
# 
# Difficulty: easy. 

def palindrome?(string) 
    iterations=string.length/2 
    is_palindrome=true 
    i=0 
    while i<iterations 
     if string[i] != string[string.length-i-1] 
      #~ puts("string is not a palindrome") 
      is_palindrome=false 
     end 
     i+=1 
    end 
    return is_palindrome 
end 

# These are tests to check that your code is working. After writing 
# your solution, they should all print true. 
require 'minitest/autorun' 
class FirstLetterTest < Minitest::Test 
    def test_abc 
    refute(palindrome?('abc'), "'abc' is detected as a palindrome, but it isn't") 
    end 
    def test_abcba 
    assert(palindrome?('abcba'), "'abcba' is not detected as a palindrome") 
    end 
    def test_z 
    assert(palindrome?('z'), "'z' is detected as a palindrome, but it isn't") 
    end 
end 

I entfernt Ihre puts("string is not a palindrome") - es die Ausgabe verwirren.

Verwandte Themen