如何在 Python 中检查字符串是否为回文

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何使用 Python 检查一个字符串是否为回文。回文是指一个字符序列,无论从前往后读还是从后往前读,内容都是一样的,例如 "madam" 或 "racecar"。

本实验将指导你创建一个 Python 脚本,该脚本定义了一个名为 is_palindrome 的函数来识别回文。这包括对输入文本进行处理,将其转换为小写并去除空格,然后将处理后的文本与其反转版本进行比较。你还将学习如何使用示例单词来测试该函数。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/AdvancedTopicsGroup(["Advanced Topics"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/AdvancedTopicsGroup -.-> python/regular_expressions("Regular Expressions") subgraph Lab Skills python/strings -.-> lab-559574{{"如何在 Python 中检查字符串是否为回文"}} python/conditional_statements -.-> lab-559574{{"如何在 Python 中检查字符串是否为回文"}} python/function_definition -.-> lab-559574{{"如何在 Python 中检查字符串是否为回文"}} python/regular_expressions -.-> lab-559574{{"如何在 Python 中检查字符串是否为回文"}} end

定义回文

在这一步中,我们将探讨回文的概念,以及如何使用 Python 来识别回文。回文是指一个单词、短语、数字或其他字符序列,无论从前往后读还是从后往前读,内容都是一样的。例如 "madam"、"racecar" 和 "level"。

首先,让我们创建一个 Python 脚本来定义什么是回文。

  1. 在 LabEx 环境中打开 VS Code 编辑器。

  2. ~/project 目录下创建一个名为 palindrome.py 的新文件。

    你可以通过在资源管理器面板(通常在左侧)中右键单击,然后选择「新建文件」来创建新文件。确保将文件保存为 palindrome.py 并放在 ~/project 目录下。

  3. palindrome.py 文件中添加以下 Python 代码:

    def is_palindrome(text):
        processed_text = ''.join(text.lower().split())
        return processed_text == processed_text[::-1]
    
    ## Example usage
    word = "madam"
    if is_palindrome(word):
        print(f"'{word}' is a palindrome")
    else:
        print(f"'{word}' is not a palindrome")

    让我们来分析一下这段代码:

    • def is_palindrome(text)::这行代码定义了一个名为 is_palindrome 的函数,它接受一个字符串 text 作为输入。
    • processed_text = ''.join(text.lower().split()):这行代码为回文检查准备输入文本。它首先使用 .lower() 方法将文本转换为小写,然后使用 .split() 方法将字符串拆分为单词列表,再使用 ''.join() 方法将这些单词重新组合成一个没有空格的字符串。
    • return processed_text == processed_text[::-1]:这行代码将处理后的文本与其反转版本进行比较。processed_text[::-1] 创建了一个字符串的反转副本。如果处理后的文本与其反转版本相同,函数返回 True(即它是回文);否则,返回 False
    • 函数定义后面的代码是示例用法。它调用 is_palindrome 函数并传入单词 "madam",然后打印该单词是否为回文。
  4. 现在,让我们运行这个脚本。在 WebIDE 中打开一个终端。你通常可以在 VS Code 界面的底部找到终端标签,或者通过菜单「终端」->「新建终端」来打开一个新的终端。

  5. 在终端中,导航到 ~/project 目录(如果你还不在该目录下):

    cd ~/project
  6. 执行 Python 脚本:

    python palindrome.py
  7. 你应该会看到以下输出:

    'madam' is a palindrome

    这证实了我们的脚本能够正确识别 "madam" 为回文。

反转并比较

在这一步中,我们将更深入地探讨 is_palindrome 函数的工作原理,具体方法是显式地反转输入字符串,然后将其与原始字符串进行比较。这将让你更清楚地理解回文识别的过程。

  1. 在 VS Code 编辑器中打开 palindrome.py 文件。这就是你在上一步中创建的文件。

  2. 修改 palindrome.py 中的 is_palindrome 函数,以显式地反转字符串:

    def is_palindrome(text):
        processed_text = ''.join(text.lower().split())
        reversed_text = processed_text[::-1]  ## Explicitly reverse the string
        return processed_text == reversed_text
    
    ## Example usage
    word = "madam"
    if is_palindrome(word):
        print(f"'{word}' is a palindrome")
    else:
        print(f"'{word}' is not a palindrome")
    
    word2 = "hello"
    if is_palindrome(word2):
        print(f"'{word2}' is a palindrome")
    else:
        print(f"'{word2}' is not a palindrome")

    以下是修改的内容:

    • reversed_text = processed_text[::-1]:这行代码创建了 processed_text 字符串的反转副本,并将其赋值给变量 reversed_text
    • return processed_text == reversed_text:这行代码现在将原始处理后的文本与显式反转后的文本进行比较。
    • 增加了第二个示例,使用单词 "hello" 来展示非回文的情况。
  3. 保存对 palindrome.py 文件所做的更改。

  4. 在终端中再次运行脚本:

    python palindrome.py
  5. 你现在应该会看到以下输出:

    'madam' is a palindrome
    'hello' is not a palindrome

    这个输出证实了脚本能够正确识别回文和非回文。通过显式地反转字符串,我们让 is_palindrome 函数的逻辑更加清晰易懂。

忽略大小写和空格

在这一步中,我们将改进 is_palindrome 函数,使其能够处理包含空格和大小写字母混合的回文短语。例如,如果忽略空格、标点符号和大小写,“A man, a plan, a canal: Panama”就是一个回文。

  1. 在 VS Code 编辑器中打开 palindrome.py 文件。

  2. 修改 palindrome.py 中的 is_palindrome 函数,使其忽略大小写和空格:

    import re
    
    def is_palindrome(text):
        processed_text = re.sub(r'[^a-zA-Z]', '', text).lower()
        reversed_text = processed_text[::-1]
        return processed_text == reversed_text
    
    ## Example usage
    word1 = "A man, a plan, a canal: Panama"
    if is_palindrome(word1):
        print(f"'{word1}' is a palindrome")
    else:
        print(f"'{word1}' is not a palindrome")
    
    word2 = "Racecar"
    if is_palindrome(word2):
        print(f"'{word2}' is a palindrome")
    else:
        print(f"'{word2}' is not a palindrome")
    
    word3 = "hello"
    if is_palindrome(word3):
        print(f"'{word3}' is a palindrome")
    else:
        print(f"'{word3}' is not a palindrome")

    让我们来分析一下这些修改:

    • import re:这行代码导入了 re 模块,该模块提供了正则表达式操作功能。
    • processed_text = re.sub(r'[^a-zA-Z]', '', text).lower():这行代码现在使用正则表达式从输入文本中移除所有非字母(a - z、A - Z)的字符。re.sub(r'[^a-zA-Z]', '', text) 将所有非字母字符替换为空字符串,从而有效地移除它们。然后,.lower() 将结果字符串转换为小写。
    • 我们添加了“A man, a plan, a canal: Panama”、“Racecar”和“hello”作为示例用法,以测试更新后的函数。
  3. 保存对 palindrome.py 文件所做的更改。

  4. 在终端中再次运行脚本:

    python palindrome.py
  5. 你现在应该会看到以下输出:

    'A man, a plan, a canal: Panama' is a palindrome
    'Racecar' is a palindrome
    'hello' is not a palindrome

    这个输出证实了脚本现在能够正确识别包含空格、标点符号和大小写字母混合的回文。正则表达式有效地清理了输入文本,从而实现了准确的回文检测。

总结

在这个实验中,我们首先探讨了回文(palindromes)的概念,回文是指那些正读和反读都相同的字符串。然后,我们创建了一个名为 palindrome.py 的 Python 脚本,其中包含一个用于识别回文的函数 is_palindrome(text)

is_palindrome 函数首先对输入文本进行预处理,将其转换为小写并去除空格。然后,它将处理后的文本与其反转版本进行比较,以确定它是否为回文。如果是回文,则返回 True;否则返回 False。该脚本还包含示例用法,展示了如何调用该函数并打印结果。