re 三种匹配方式对比(必做)
准备同一长字符串(含重复关键词),分别调用 re.match、re.search、re.findall,打印返回值类型及内容。用注释说明:为何有些情况 match 得到 None 而 search 仍能匹配。
查看参考答案 ▼
import re
s = "我学 Python,你也学 Python 吗?"
p = "Python"
m = re.match(p, s)
print("match:", m) # None(开头不是 Python)
sr = re.search(p, s)
if sr:
print("search:", sr.group()) # Python
fa = re.findall(p, s)
print("findall:", fa) # ["Python", "Python"]</span>
✓ 正确
参考答案:import re
s = "我学 Python,你也学 Python 吗?"
p = "Python"
m = re.match(p, s)
print("match:", m) # None(开头不是 Python)
sr = re.search(p, s)
if sr:
print("search:", sr.group()) # Python
fa = re.findall(p, s)
print("findall:", fa) # ["Python", "Python"]</span>
分组提取(必做)
写一条正则,从示例串中提取区号和本地号码(如 010-12345678)。使用分组,通过 Match 的 group(0/1/2) 分别打印整段匹配、第一组、第二组。
查看参考答案 ▼
import re
s = "客服电话:010-12345678"
r = re.search(r"(\d{3,4})-(\d{6,8})", s)
if r:
print(r.group(0)) # 010-12345678
print(r.group(1)) # 010
print(r.group(2)) # 12345678
✓ 正确
参考答案:import re
s = "客服电话:010-12345678"
r = re.search(r"(\d{3,4})-(\d{6,8})", s)
if r:
print(r.group(0)) # 010-12345678
print(r.group(1)) # 010
print(r.group(2)) # 12345678
MySQL 建库建表与插入(必做)
设计一张商品表(至少含:id 主键、name、price、category_id)。写出 CREATE TABLE(类型与约束合理)、至少 2 条 INSERT。
查看参考答案 ▼
CREATE TABLE goods (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
category_id INT UNSIGNED NOT NULL
);
INSERT INTO goods (name, price, category_id) VALUES ("苹果", 5.50, 1);
INSERT INTO goods (name, price, category_id) VALUES ("牛奶", 12.00, 2);
✓ 正确
参考答案:CREATE TABLE goods (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
category_id INT UNSIGNED NOT NULL
);
INSERT INTO goods (name, price, category_id) VALUES ("苹果", 5.50, 1);
INSERT INTO goods (name, price, category_id) VALUES ("牛奶", 12.00, 2);
MySQL 单表条件、排序与分页(必做)
基于上一题的表,写一条 SELECT:带 WHERE(如价格区间或分类)、ORDER BY、LIMIT 只取前几条。注释说明:无 WHERE 的 UPDATE/DELETE 在生产环境的风险。
查看参考答案 ▼
SELECT id, name, price
FROM goods
WHERE price BETWEEN 5 AND 20
ORDER BY price DESC
LIMIT 10;
-- 无 WHERE 的 UPDATE/DELETE 易误伤全表,生产环境须谨慎
✓ 正确
参考答案:SELECT id, name, price
FROM goods
WHERE price BETWEEN 5 AND 20
ORDER BY price DESC
LIMIT 10;
-- 无 WHERE 的 UPDATE/DELETE 易误伤全表,生产环境须谨慎
MySQL 两表关联查询(重点必做)
再建一张分类表(id、category_name),商品表的 category_id 引用分类表 id。写一条多表 JOIN 查询:查出商品名、价格、分类名称。
查看参考答案 ▼
CREATE TABLE category (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
category_name VARCHAR(50) NOT NULL
);
INSERT INTO category (id, category_name)
VALUES (1, "水果"), (2, "乳品");
SELECT g.name, g.price, c.category_name
FROM goods g
JOIN category c ON g.category_id = c.id;
✓ 正确
参考答案:CREATE TABLE category (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
category_name VARCHAR(50) NOT NULL
);
INSERT INTO category (id, category_name)
VALUES (1, "水果"), (2, "乳品");
SELECT g.name, g.price, c.category_name
FROM goods g
JOIN category c ON g.category_id = c.id;