0

Python で回文テスターをプログラムしました。二重引用符を含む特定の回文を手動で入力すると、プログラムはそれを回文として正しく認識します。ただし、同じ行のテキストをコピーして貼り付けると、プログラムは文字列を逆方向の対応する文字列と比較する前に二重括弧を削除できません。

コードは次のとおりです。

  ### Palindrome Test ###

  import string                               # class which includes all punctuation characters 

  word = raw_input("Please enter a word or phrase:\n")

  if (len(word) <= 1):                        # if 0 or 1 character input
      print 'Sorry, ' + '"' + word + '"' + ' is too short to be a palindrome.'

  else:

      tword = word.lower()                    # make input lowercase so capital letters don't cause problems, assn to new var

      tword2 = tword.replace(' ','')          # replace spaces with empty strings to remove space asymmetry

      tword3 = list(tword2)                   # break lowercase, spaceless input into list of characters, assn to new variable

                                              # ditch punctuation in list 
      tword3 = [''.join(c for c in s if c not in string.punctuation) for s in tword3]

      fword = ''.join(tword3)                 # gives us a lowercase, spaceless, punctuationless forward string

      tword3.reverse()                        # reverse list of characters

      bword = ''.join(tword3)                 # rejoin backwards list, assn to new variable

      if bword == fword:                      # check equivalence of backwards and forwards lowercase, spaceless, punctuationless input
                                              # if equivalent, print 'yes' message with original input
          print 'YES, ' + '"' + word + '"' + ' is a palindrome.' 

      else:                                   # else, 'no' message with original input
          print 'NO, ' + '"' + word + '"' + ' is not a palindrome.' 

たとえば、「デザート、お姉ちゃん?」(感覚が強調されます)。入力として入力すると、正しく「はい」メッセージが返されます。貼り付けると、「いいえ」というメッセージが表示されます。

どうしたの?

編集: このサイトまたはワード文書から貼り付けても問題がないことがわかりました。ただし、このページ (http://www.palindromelist.net/Desserts-sis-Sensuousness-is-stressed/) から貼り付けると、間違った出力が生成されます。

4

1 に答える 1

2

この例を研究してください。あなたのコードは正常に動作します。これは少しクリーンアップされています:

from string import punctuation

def is_palindrome(word):
    if len(word) <= 1:                              
        raise Exception("Sorry, '%s' is too short to be a palindrome" % word)

    lowered = ''.join(word.lower().split())
    filtered = filter(lambda x: x not in punctuation, lowered)                                  
    return filtered == filtered[::-1]
于 2013-01-18T23:43:11.787 に答える