LoginSignup
1
1

More than 5 years have passed since last update.

PythonでPalindrome checkerを作ってみようとしたけど(解決済み)

Last updated at Posted at 2015-12-16

Freecodecampの課題#185より。

Palindromeとは

逆さに読んでも同じ単語。

word, line, verse, number, sentence, etc., reading the same backward as forward, as Madam, I'm Adam or Poor Dan is in a droop.

cited: dictionary.com

課題はこちら:

/*
Return true if the given string is a palindrome. Otherwise, return false.

A palindrome is a word or sentence that's spelled the same way both forward and backward, ignoring punctuation, case, and spacing.

You'll need to remove all non-alphanumeric characters (punctuation, spaces and symbols) and turn everything lower case in order to check for palindromes.

We'll pass strings with varying formats, such as "racecar", "RaceCar", and "race CAR" among others.
*/

function palindrome(str) {
  // Good luck!
  return true;
}

palindrome("eye");

ユーザーインプットを引数とした探してくれる逆さ文字判定をしてくれる関数を作ってください、というところでしょうか。

流れ

上のガイドも参考にして恐らくこんな感じでやるのかと。
1. replace(/\W/g, '')でアルファベットだけに (ref: Remove not alphanumeric characters from string...)
2. .toLowerCase()で小文字変換 (ref: JavaScript String toLowerCase() Method
)
3. ifで(str === palindrome)判定

まずは引数strを後のifで必要な形にしてあげてからiftrue/false判定をかけてあげる感じでしょうか。ひとまずこんな感じで書いてみました。

function palindrome(str) {
  // Good luck!
  str = str.replace(/\W/g, '').toLowerCase();
  if (str.split('').reverse().join('') === str) {
    return true;
  }
  else {
    return false;
  }
}



palindrome("eye");

しかしこれだとpalindrome("0_0 (: /-\ :) 0-0")trueに返さないみたいです。ちょっと原因を探ってみます。

追記

偶然にもまさにリアルタイムで質問している人を見つけたのでその人の答えを参考にすることにします。

Screen Shot 2015-12-16 at 3.49.20 PM.png

率直に言うとアンダースコア_を含めていなかったためにfalseが出てしまったと分かりました。「/\W/gは文字と数字以外という意味だから、その他全ての記号はこれで含まれるだろ!」と思っていたのが勘違い。

[a-zA-Z0-9_] = \wなので正確には文字、数字とアンダースコアーを含んでいます。今回のPalindrome checkerではアンダースコアーを除外したいので[\W_]とする。まあアンダースコアーも\Wの仲間として入れてあげようってことでしょうか。

Screen Shot 2015-12-16 at 3.55.56 PM.png

ここでも書いてありますが、ここではちゃんと括弧[]の中にいれてあげる必要があります。

function palindrome(str) {
  // Good luck!
  str = str.replace(/[\W_]/g, '').toLowerCase();
  if (str.split('').reverse().join('') === str) {
    return true;
  }
  else {
    return false;
  }
}



palindrome("eye");
palindrome("0_0 (: /-\ :) 0-0")

再度実行すると、

Screen Shot 2015-12-16 at 4.59.41 PM.png

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1