Python字符串练习题

通过这些精心设计的练习题,提升你的Python字符串处理能力,从基础到实际应用,循序渐进地掌握字符串操作技巧。

基础练习

1. 字符串反转

编写一个函数,将输入的字符串反转。要求同时处理中英文字符。

查看提示和解答

def reverse_string(text):
    return text[::-1]

# 测试
print(reverse_string("Hello世界"))  # "界世olleH"
                            

2. 字符统计

编写一个函数,统计字符串中的字母、数字和其他字符的数量。

查看提示和解答

def count_char_types(text):
    counts = {'letters': 0, 'digits': 0, 'others': 0}
    for char in text:
        if char.isalpha():
            counts['letters'] += 1
        elif char.isdigit():
            counts['digits'] += 1
        else:
            counts['others'] += 1
    return counts

# 测试
print(count_char_types("Hello123!"))  # {'letters': 5, 'digits': 3, 'others': 1}
                            

3. 首字母大写

编写一个函数,将句子中每个单词的首字母转换为大写。

查看提示和解答

def capitalize_words(sentence):
    return ' '.join(word.capitalize() for word in sentence.split())

# 测试
print(capitalize_words("hello world python"))  # "Hello World Python"
                            

进阶练习

1. 字符串压缩

编写一个函数,实现基本的字符串压缩功能。例如:"aaabbc" → "a3b2c1"

查看提示和解答

def compress_string(text):
    if not text:
        return ""
    
    result = []
    count = 1
    current = text[0]
    
    for char in text[1:]:
        if char == current:
            count += 1
        else:
            result.append(f"{current}{count}")
            current = char
            count = 1
    
    result.append(f"{current}{count}")
    compressed = "".join(result)
    
    return compressed if len(compressed) < len(text) else text

# 测试
print(compress_string("aaabbc"))  # "a3b2c1"
print(compress_string("abc"))     # "abc"
                            

2. 验证括号匹配

编写一个函数,检查字符串中的括号是否正确匹配。支持 (), [], {} 三种括号。

查看提示和解答

def check_brackets(text):
    stack = []
    brackets = {')': '(', ']': '[', '}': '{'}
    
    for char in text:
        if char in '([{':
            stack.append(char)
        elif char in ')]}':
            if not stack or stack.pop() != brackets[char]:
                return False
    
    return len(stack) == 0

# 测试
print(check_brackets("(a[b{c}]d)"))  # True
print(check_brackets("([)]"))        # False
                            

实际应用

1. 电子邮件验证

编写一个函数,验证电子邮件地址是否合法。

查看提示和解答

import re

def validate_email(email):
    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    return bool(re.match(pattern, email))

# 测试
print(validate_email("[email protected]"))     # True
print(validate_email("invalid.email@com"))    # False
                            

2. 日志解析

编写一个函数,解析日志文件中的时间戳和消息。

查看提示和解答

def parse_log_line(line):
    try:
        # 假设日志格式:[2024-01-01 12:00:00] Message
        timestamp = line[1:20]
        message = line[22:].strip()
        return {
            'timestamp': timestamp,
            'message': message
        }
    except:
        return None

# 测试
log_line = "[2024-01-01 12:00:00] Server started"
print(parse_log_line(log_line))
                            

项目练习

1. 简单文本编辑器

实现一个简单的文本编辑器,支持以下功能:

  • 插入文本
  • 删除文本
  • 查找和替换
  • 撤销操作
查看框架代码

class TextEditor:
    def __init__(self):
        self.content = ""
        self.history = []
    
    def insert(self, pos, text):
        self.history.append(self.content)
        self.content = self.content[:pos] + text + self.content[pos:]
    
    def delete(self, start, end):
        self.history.append(self.content)
        self.content = self.content[:start] + self.content[end:]
    
    def find_replace(self, old, new):
        self.history.append(self.content)
        self.content = self.content.replace(old, new)
    
    def undo(self):
        if self.history:
            self.content = self.history.pop()

# 使用示例
editor = TextEditor()
editor.insert(0, "Hello World")
editor.insert(5, " Beautiful")
print(editor.content)  # "Hello Beautiful World"
editor.undo()
print(editor.content)  # "Hello World"
                            

2. Markdown解析器

实现一个简单的Markdown解析器,支持以下功能:

  • 标题(# ## ###)
  • 粗体(**text**)
  • 斜体(*text*)
  • 链接([text](url))
查看框架代码

class MarkdownParser:
    def parse_heading(self, line):
        level = 0
        while line.startswith('#'):
            level += 1
            line = line[1:]
        if level > 0:
            return f"{line.strip()}"
        return line

    def parse_bold(self, text):
        import re
        return re.sub(r'\*\*(.*?)\*\*', r'\1', text)

    def parse_italic(self, text):
        import re
        return re.sub(r'\*(.*?)\*', r'\1', text)

    def parse_link(self, text):
        import re
        return re.sub(r'\[(.*?)\]\((.*?)\)', r'\1', text)

    def parse(self, markdown):
        lines = markdown.split('\n')
        html = []
        for line in lines:
            line = self.parse_heading(line)
            line = self.parse_bold(line)
            line = self.parse_italic(line)
            line = self.parse_link(line)
            html.append(line)
        return '\n'.join(html)

# 使用示例
parser = MarkdownParser()
markdown = """# 标题
这是**粗体**和*斜体*
这是一个[链接](https://example.com)"""
print(parser.parse(markdown))