基础练习
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))