Python 回文程序的小问题

Python 回文程序的小问题,python,palindrome,Python,Palindrome,我一直在做这个回文程序,我真的很快就要完成了。快到让我有点疯狂的地步了,哈哈。 程序应该检查每个“短语”以确定它是否是回文,如果它实际上是回文,则返回一个删除空格和标点的小写版本。否则,如果不是,它应该不返回任何值。 我只是在将测试数据引入函数时遇到了一个问题。我似乎想不出正确的处理方法。可能很简单…有什么想法吗? 谢谢 导入字符串 def反向(字): newword='' letterflag=-1 对于word中的Numoleter: newword+=单词[letterflag] lett

我一直在做这个回文程序,我真的很快就要完成了。快到让我有点疯狂的地步了,哈哈。 程序应该检查每个“短语”以确定它是否是回文,如果它实际上是回文,则返回一个删除空格和标点的小写版本。否则,如果不是,它应该不返回任何值。 我只是在将测试数据引入函数时遇到了一个问题。我似乎想不出正确的处理方法。可能很简单…有什么想法吗? 谢谢

导入字符串
def反向(字):
newword=''
letterflag=-1
对于word中的Numoleter:
newword+=单词[letterflag]
letterflag-=1
返回新词
def回文(短语):
对于字符串中的点。标点符号:
短语=短语。替换(点号“”)
phrase=str(phrase.lower())
firstindex=0
第二个索引=len(短语)-1
标志=0
而firstindex!=secondindex和firstindex
可能是这一行造成了问题

for word in data:
    word == word.split() # This line.
    Palindromize(word)
您在这里测试是否相等,而不是重新分配变量
word
,这可以使用
word=word.split()
完成
word
然后成为一个列表,您可能希望使用

for elem in word:
    Palindromize(elem)
另外,您似乎正在调用
int
上的
split
方法,这是不可能的,请尝试将它们转换为字符串


另外,为什么要在for循环中将短语转换为小写,只做一次就足够了。

可能是这一行造成了问题

for word in data:
    word == word.split() # This line.
    Palindromize(word)
您在这里测试是否相等,而不是重新分配变量
word
,这可以使用
word=word.split()
完成
word
然后成为一个列表,您可能希望使用

for elem in word:
    Palindromize(elem)
另外,您似乎正在调用
int
上的
split
方法,这是不可能的,请尝试将它们转换为字符串


另外,为什么要在for循环中将短语转换为小写,只需执行一次就足够了。

我发现的主要错误之一是:

for word in data:
    word==word.split()
这里有两个错误: 1.双等在这里没有意义。 2.如果您希望分割每个数据迭代的内容,那么这样做不会改变原始列表,因为您正在修改名为
word
的重复集。要实现您的列表,请执行以下操作:

for i in range(data):   
      data[i]=data[i].split()

这可能会清除您的错误

我发现的主要错误之一如下:

for word in data:
    word==word.split()
这里有两个错误: 1.双等在这里没有意义。 2.如果您希望分割每个数据迭代的内容,那么这样做不会改变原始列表,因为您正在修改名为
word
的重复集。要实现您的列表,请执行以下操作:

for i in range(data):   
      data[i]=data[i].split()
这可能会清除您的错误

在程序的“核心”部分,您可以在Python中做得更好,例如使用。下面是一个快速演示:

>>> phrase = 'Murder for a jar of red rum!'

>>> normalized = filter(str.isalnum, phrase.lower())
>>> normalized
'murderforajarofredrum'

>>> reversed = normalized[-1::-1]
>>> reversed
'murderforajarofredrum'

# Test is it is a palindrome
>>> reversed == normalized
True
在程序的“核心”,您可以使用Python做得更好,例如使用。下面是一个快速演示:

>>> phrase = 'Murder for a jar of red rum!'

>>> normalized = filter(str.isalnum, phrase.lower())
>>> normalized
'murderforajarofredrum'

>>> reversed = normalized[-1::-1]
>>> reversed
'murderforajarofredrum'

# Test is it is a palindrome
>>> reversed == normalized
True

在你发疯之前,让我们重新思考这个问题:

  • 您已经指出,回文仅在没有标点、空格或大小写混合的字符串中才有意义。因此,您需要通过删除不需要的字符或选择允许的字符来转换输入字符串。对于后者,可以想象:
  • 导入字符串

    clean_data=[ch表示原始_数据中的ch,如果ch为string.ascii_字母]

    clean_data=''.join(clean_data).lower()

  • 输入的已清理版本,可以考虑字符串的切片中的第三个参数,特别是当它是-1时;<李> 比较像吗

    if clean_data[::-1] == clean_data:
        ....
    

    按铃?

    在你发疯之前,让我们重新思考一下这个问题:

  • 您已经指出,回文仅在没有标点、空格或大小写混合的字符串中才有意义。因此,您需要通过删除不需要的字符或选择允许的字符来转换输入字符串。对于后者,可以想象:
  • 导入字符串

    clean_data=[ch表示原始_数据中的ch,如果ch为string.ascii_字母]

    clean_data=''.join(clean_data).lower()

  • 输入的已清理版本,可以考虑字符串的切片中的第三个参数,特别是当它是-1时;<李> 比较像吗

    if clean_data[::-1] == clean_data:
        ....
    

    按铃?

    int
    没有
    拆分方法。尝试将它们更改为字符串。
    int
    没有
    split
    方法。试着把它们变成字符串。