判断一条字符串是否形成回文

要想检查文本是否属于回文需要忽略其中的标点、空格与大小写。例如,“Rise to vote, sir.”是一段回文文本,但是我们现有的程序不会这么认为。你可以改进上面的程序以使它能够识别这段回文吗?(《python简明教程》里“输入与输出”章节的作业练习)。


主要思路:

1.把字符串全部转成小写或全部转成大写,可以用到str.lower()str.upper()

 

 2.识别空格和标点符号,若有就跳过或者删除。使用一个元组(你可以在这里找到一份列出所有标点符号的列表)来保存所有需要禁用的字符,然后使用成员资格测试来确定一个字符 是否应该被移除,即 forbidden = ('!' ,  '?' ,  '.', ' ...')。可以用到str.remove(obj)

    s2=list(s1)

    forbidden = ('!'  ,'?'  , '.'  , '...'   ,','  ,)

    for i in s2:

        if i in forbidden or i ==' ':

            s2.remove(i)

 

3.判断是否为回文。字符串倒置回来的字符串等于原有的字符串。

字符串:

def fanzhuan(text):

     return text[::-1]



def is_fanzhuan(text):

    return text == fanzhuan(text)

 

列表:

str3=str2.copy()

str2.reverse()

#str.reverse()是变更str2,会改变str2的值,不返回一个新的值。==也只是令变量指向该对象。所以前面用#s.copy()创造出新的对象。

参考代码:

def chuli_str(text):

    s1=text.lower()

    s2=list(s1)

    forbidden = ('!' ,'?','.', '...',',',)

    for i in s2:

        if i in forbidden or i ==' ':

            s2.remove(i)

    return s2



def fanzhuan(text):

     return text[::-1]



def is_fanzhuan(text):

    return text == fanzhuan(text)



str1 = input("please inter your want to input:")

str2=chuli_str(str1)

#第一个方法(用函数实现)

if is_fanzhuan(str2):

    print("right")

else:

print("wrong")

"""

#第二个方法

str3=str2.copy()

str2.reverse()



if str3==str2:

    print("right")

else:

    print("wrong")

"""

不足和解决方法:

1.第一个想法:把所有标点符号全部转化成空格,然后化为字符串。

错误参考代码:

for i in str1:

  for i in forbidden:

            str1.replace(i ,' ')

不足:

i 执行一次,都会把之前的值覆盖,得出的结果,只有对最后一个值起作用。而且字符串是固定不变,列表是可变的,可以更改内容的。

解决方法:暂时还没解决。

 

2.第二个想法:首先申请一个空的字符串,遇到不是标点符号或者空格,就往字符串里添加。

错误参考代码:

a=""

for i in str1:

 if i not in forbidden and i !=' ':

            a+=i

不足:i 执行一次,都会把之前的值覆盖,得出的结果,只有对最后一个值起作用。且用不了a.append()和a.extend()(用于列表之类可变)。

解决方法:用列表来实现

a=[]

for i in s1:

    if i not in forbidden and i !=' ':

                a.extend(i)

总结:字符串是不可变的,无法改变内容;列表是可变的,可以改变内容。

猜你喜欢

转载自blog.csdn.net/weixin_37893376/article/details/81141434