简介
在这个实验中,你将学习如何使用 Python 检查一个字符串是否为回文。回文是指一个字符序列,无论从前往后读还是从后往前读,内容都是一样的,例如 "madam" 或 "racecar"。
本实验将指导你创建一个 Python 脚本,该脚本定义了一个名为 is_palindrome
的函数来识别回文。这包括对输入文本进行处理,将其转换为小写并去除空格,然后将处理后的文本与其反转版本进行比较。你还将学习如何使用示例单词来测试该函数。
在这个实验中,你将学习如何使用 Python 检查一个字符串是否为回文。回文是指一个字符序列,无论从前往后读还是从后往前读,内容都是一样的,例如 "madam" 或 "racecar"。
本实验将指导你创建一个 Python 脚本,该脚本定义了一个名为 is_palindrome
的函数来识别回文。这包括对输入文本进行处理,将其转换为小写并去除空格,然后将处理后的文本与其反转版本进行比较。你还将学习如何使用示例单词来测试该函数。
在这一步中,我们将探讨回文的概念,以及如何使用 Python 来识别回文。回文是指一个单词、短语、数字或其他字符序列,无论从前往后读还是从后往前读,内容都是一样的。例如 "madam"、"racecar" 和 "level"。
首先,让我们创建一个 Python 脚本来定义什么是回文。
在 LabEx 环境中打开 VS Code 编辑器。
在 ~/project
目录下创建一个名为 palindrome.py
的新文件。
你可以通过在资源管理器面板(通常在左侧)中右键单击,然后选择「新建文件」来创建新文件。确保将文件保存为 palindrome.py
并放在 ~/project
目录下。
在 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",然后打印该单词是否为回文。现在,让我们运行这个脚本。在 WebIDE 中打开一个终端。你通常可以在 VS Code 界面的底部找到终端标签,或者通过菜单「终端」->「新建终端」来打开一个新的终端。
在终端中,导航到 ~/project
目录(如果你还不在该目录下):
cd ~/project
执行 Python 脚本:
python palindrome.py
你应该会看到以下输出:
'madam' is a palindrome
这证实了我们的脚本能够正确识别 "madam" 为回文。
在这一步中,我们将更深入地探讨 is_palindrome
函数的工作原理,具体方法是显式地反转输入字符串,然后将其与原始字符串进行比较。这将让你更清楚地理解回文识别的过程。
在 VS Code 编辑器中打开 palindrome.py
文件。这就是你在上一步中创建的文件。
修改 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
:这行代码现在将原始处理后的文本与显式反转后的文本进行比较。保存对 palindrome.py
文件所做的更改。
在终端中再次运行脚本:
python palindrome.py
你现在应该会看到以下输出:
'madam' is a palindrome
'hello' is not a palindrome
这个输出证实了脚本能够正确识别回文和非回文。通过显式地反转字符串,我们让 is_palindrome
函数的逻辑更加清晰易懂。
在这一步中,我们将改进 is_palindrome
函数,使其能够处理包含空格和大小写字母混合的回文短语。例如,如果忽略空格、标点符号和大小写,“A man, a plan, a canal: Panama”就是一个回文。
在 VS Code 编辑器中打开 palindrome.py
文件。
修改 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()
将结果字符串转换为小写。保存对 palindrome.py
文件所做的更改。
在终端中再次运行脚本:
python palindrome.py
你现在应该会看到以下输出:
'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
。该脚本还包含示例用法,展示了如何调用该函数并打印结果。