第1章 1.5 综合实战:个人名片生成器
🎯 开场:为什么你需要一个"名片生成器"?
上一章我们学会了怎么跟电脑"聊天"——输入和输出,还记住了运算符这个工具人。现在你手里有变量、字符串、列表、输入输出和运算符这五把刷子了,但光有刷子不行,你得做个东西出来看看效果。
你有没有遇到过这种情况:
- 换了新工作,要手动改简历上的联系方式,改完还要调格式,改一处坏三处
- 做销售,每天要给新客户发自我介绍,同一套话术复制粘贴到手抽筋
- 搞活动,要给 50 个嘉宾制作胸牌,一个一个改名字改到怀疑人生
如果你用过 Excel 的邮件合并,或者手动复制粘贴过几百次模板,你就知道这种"机械重复劳动"有多烦人。
学完这一章,你能做出一个自己的"名片生成器":输入几个关键信息,自动生成格式统一的个人介绍、邮件签名、甚至活动胸牌。以前要手动改 10 分钟的东西,现在 3 秒搞定。
更重要的是,这是我们第一次把 1.1 到 1.4 学的所有东西串起来用——变量、字符串、列表、输入输出、运算符,一个都跑不掉。
🧱 基础:名片生成器的"积木"是什么?
在动手之前,先把要用到的知识点捋一遍。老规矩,先讲"是什么",再讲"为什么",最后看"怎么用"。
1.5.1 字符串格式化:把变量塞进模板里
是什么:字符串格式化,就是把变量的值"塞进"一个字符串模板里。
生活类比:就像填表格。你手里有一张空表格(模板),上面写着"姓名:,职位:",你把真实信息填进去,就成了一张完整的表。
为什么用:每次生成名片,内容不同但格式相同。用模板+格式化的方式,写一次模板,套一万个名字。
怎么用——Python 有三种方式,最推荐的是 f-string(Python 3.6+):
name = "张三"
job = "产品经理"
company = "某大厂"
# f-string 格式化(推荐!)
message = f"您好,我叫{name},是{company}的{job},请多关照!"
print(message)
输出:
您好,我叫张三,是某大厂的产品经理,请多关照!
解释一下:f"..." 前面的 f 表示 "format",大括号 {} 里直接写变量名,计算机会自动把变量的值填进去。
还有两种老式写法,你知道就行,写代码时用 f-string:
# 方式2:format() 方法(Python 3.0-3.5 常用)
message = "您好,我叫{},是{}的{},请多关照!".format(name, company, job)
# 方式3:% 格式化(C语言风格,不推荐但要认识)
message = "您好,我叫%s,是%s的%s,请多关照!" % (name, company, job)
1.5.2 字符串的多行处理:长文本不用愁
是什么:三引号 """ 可以让你写跨多行的字符串。
生活类比:就像写明信片,正面写收件人,背面写内容,可以换好多行。三引号就是告诉电脑"这段文字我要换行,别给我吞掉"。
为什么用:名片的格式往往很复杂,有标题、正文、联系方式,一行写不下。
怎么用:
card = f"""
==================
名片生成器
==================
姓名:{name}
职位:{job}
公司:{company}
==================
"""
print(card)
输出:
==================
名片生成器
==================
姓名:张三
职位:产品经理
公司:某大厂
==================
你看,换行、缩进都保留下来了。
1.5.3 列表和循环的配合:批量处理
是什么:列表存多个东西,循环依次处理每个东西。
生活类比:就像厨房的流水线,菜单上有一百道菜(列表),每道菜都要经过切菜→炒菜→装盘这三步(循环体)。你不用一道一道手工做,而是写好流程,让机器自动跑。
为什么用:名片生成器不能只生成一张名片吧?你肯定想一次生成 10 张、100 张。列表+循环就是批量处理的标配。
怎么用:
# 存多个人信息的列表
people = [
{"name": "张三", "job": "产品经理", "company": "某大厂"},
{"name": "李四", "job": "工程师", "company": "科技公司"},
{"name": "王五", "job": "设计师", "company": "创意工作室"},
]
# 循环生成名片
for person in people:
name = person["name"]
job = person["job"]
company = person["company"]
card = f"""
==================
名片生成器
==================
姓名:{name}
职位:{job}
公司:{company}
==================
"""
print(card)
输出:
==================
名片生成器
==================
姓名:张三
职位:产品经理
公司:某大厂
==================
==================
名片生成器
==================
姓名:李四
职位:工程师
公司:科技公司
==================
...
for person in people 这个循环,依次从列表里取出每个人,生成一张名片。

1.5.4 input() 交互输入:让用户自己填信息
是什么:input() 是 Python 用来获取用户键盘输入的函数。
生活类比:就像银行的自动服务机,你按下按钮,机器提示你"请输入密码",你输入后机器读取你的信息。input() 就是那个"等待你输入"的提示框。
为什么用:总不能每次生成名片都去改代码吧?要让用户自己输入姓名、职位、公司,程序才能通用。
怎么用:
name = input("请输入您的姓名:")
job = input("请输入您的职位:")
company = input("请输入您的公司:")
print(f"\n您的名片:\n")
print(f"""
==================
名片生成器
==================
姓名:{name}
职位:{job}
公司:{company}
==================
""")
运行效果:
请输入您的姓名:李四
请输入您的职位:工程师
请输入您的公司:科技公司
您的名片:
==================
名片生成器
==================
姓名:李四
职位:工程师
公司:科技公司
==================
input() 会等待用户输入,按回车后把用户输入的内容存到变量里。

🔥 实战:三个项目,从"能跑"到"真能用"
项目 1:最简名片生成器(5 分钟)
目标:理解核心 API,能生成一张自己的名片。
完整代码:
# 项目1:最简名片生成器
# 学习目标:掌握 f-string 格式化字符串
# 第一步:让用户输入信息
name = input("请输入您的姓名:")
job = input("请输入您的职位:")
company = input("请输入您的公司:")
# 第二步:生成名片
card = f"""
╔══════════════════════════════════╗
║ 【个人名片】 ║
╠══════════════════════════════════╣
║ 姓名:{name:<20} ║
║ 职位:{job:<20} ║
║ 公司:{company:<20} ║
╚══════════════════════════════════╝
"""
# 第三步:输出名片
print(card)
预期输出:
请输入您的姓名:王五
请输入您的职位:设计师
请输入您的公司:创意工作室
╔══════════════════════════════════╗
║ 【个人名片】 ║
╠══════════════════════════════════╣
║ 姓名:王五 ║
║ 职位:设计师 ║
║ 公司:创意工作室 ║
╚══════════════════════════════════╝
解释:{name:<20} 里的 <20 表示左对齐,占 20 个字符宽度。这样排版会更整齐。
项目 2:从 CSV 文件批量生成名片(15 分钟)
目标:学会从文件读取数据,用列表+循环批量处理。
场景:你是一个 HR,公司新来了 20 个员工,要给每个人做入职胸牌。手动一个个改太累了,你把员工信息存在 employees.csv 文件里,让程序自动读取生成。
employees.csv 文件内容:
name,job,department
张三,后端工程师,研发部
李四,产品经理,产品部
王五,UI设计师,设计部
赵六,前端工程师,研发部
钱七,测试工程师,质量部
完整代码:
# 项目2:批量名片生成器(从 CSV 读取)
# 学习目标:文件读取 + 列表处理 + 循环
# 模拟 CSV 数据(实际项目中可以用 open() 读取真实文件)
csv_content = """name,job,department
张三,后端工程师,研发部
李四,产品经理,产品部
王五,UI设计师,设计部
赵六,前端工程师,研发部
钱七,测试工程师,质量部"""
# 把 CSV 字符串转换成列表
lines = csv_content.strip().split('\n') # 按行分割
header = lines[0].split(',') # 第一行是表头
employees = []
for line in lines[1:]: # 从第二行开始是数据
values = line.split(',')
employee = dict(zip(header, values)) # 把表头和值配对成字典
employees.append(employee)
# 批量生成名片
print(f"共找到 {len(employees)} 位员工,开始生成名片...\n")
for i, emp in enumerate(employees, 1): # enumerate 能同时拿到索引和值
name = emp['name']
job = emp['job']
dept = emp['department']
card = f"""
┌──────────────────────────────┐
│ 【{dept} 工牌】 │
├──────────────────────────────┤
│ 姓名:{name} │
│ 职位:{job} │
│ 部门:{dept} │
└──────────────────────────────┘"""
print(card)
预期输出:
共找到 5 位员工,开始生成名片...
┌──────────────────────────────┐
│ 【研发部 工牌】 │
├──────────────────────────────┤
│ 姓名:张三 │
│ 职位:后端工程师 │
│ 部门:研发部 │
└──────────────────────────────┘
┌──────────────────────────────┐
│ 【产品部 工牌】 │
├──────────────────────────────┤
│ 姓名:李四 │
│ 职位:产品经理 │
│ 部门:产品部 │
└──────────────────────────────┘
...
解释:
- csv_content.strip().split('\n') 把多行字符串拆成列表
- dict(zip(header, values)) 把表头和值配对成字典 {'name': '张三', 'job': '后端工程师', ...}
- enumerate(employees, 1) 遍历列表,同时拿到序号(从 1 开始)
项目 3:带格式选择的名片工具(15 分钟)
目标:组合前两个项目,做一个更完整的小工具,支持选择名片格式、保存到文件。
场景:你需要生成不同用途的名片——邮件签名(简短)、正式名片(标准)、工牌(带部门)。还要把生成的名片保存到文件里,方便打印。
完整代码:
# 项目3:多功能名片生成器
# 学习目标:组合使用 + 文件保存 + 简单交互
def generate_card(name, job, company, style='normal'):
"""生成名片的核心函数"""
if style == 'email':
# 邮件签名格式(简短)
return f"""
{name}
{job} | {company}
"""
elif style == 'formal':
# 正式名片格式
return f"""
╔══════════════════════════════════╗
║ 【个人名片】 ║
╠══════════════════════════════════╣
║ 姓名:{name:<20} ║
║ 职位:{job:<20} ║
║ 公司:{company:<20} ║
╚══════════════════════════════════╝
"""
else:
# 普通格式(带部门)
return f"""
┌──────────────────────────────┐
│ 【工牌】 │
├──────────────────────────────┤
│ 姓名:{name} │
│ 职位:{job} │
│ 公司:{company} │
└──────────────────────────────┘"""
def save_to_file(content, filename):
"""保存内容到文件"""
with open(filename, 'w', encoding='utf-8') as f:
f.write(content)
print(f"✅ 已保存到 {filename}")
# 主程序
print("=" * 40)
print(" 多功能名片生成器 v1.0")
print("=" * 40)
# 输入基本信息
name = input("\n请输入姓名:")
job = input("请输入职位:")
company = input("请输入公司:")
# 选择格式
print("\n请选择名片格式:")
print(" 1 - 邮件签名(简短)")
print(" 2 - 正式名片(标准)")
print(" 3 - 工牌(带公司)")
choice = input("请输入选项(1/2/3):")
# 根据选择生成名片
style_map = {'1': 'email', '2': 'formal', '3': 'normal'}
style = style_map.get(choice, 'normal')
card = generate_card(name, job, company, style)
print("\n生成的名片:")
print(card)
# 保存到文件
save_choice = input("\n是否保存到文件?(y/n):")
if save_choice.lower() == 'y':
filename = f"{name}_名片.txt"
save_to_file(card, filename)
预期输出:
========================================
功能名片生成器 v1.0
========================================
请输入姓名:王五
请输入职位:设计师
请输入公司:创意工作室
请选择名片格式:
1 - 邮件签名(简短)
2 - 正式名片(标准)
3 - 工牌(带公司)
请输入选项(1/2/3):2
生成的名片:
╔══════════════════════════════════╗
║ 【个人名片】 ║
╠══════════════════════════════════╣
║ 姓名:王五 ║
║ 职位:设计师 ║
║ 公司:创意工作室 ║
╚══════════════════════════════════╝
是否保存到文件?(y/n):y
✅ 已保存到 王五_名片.txt
解释:
- def generate_card(...) 是自定义函数,把生成名片的逻辑封装起来
- with open(filename, 'w', encoding='utf-8') as f 是文件写入的标准写法,'w' 表示写模式
- dict.get(choice, 'normal') 是安全的字典取值,如果 key 不存在就返回默认值
💪 进阶:新手最容易踩的 5 个坑
坑 1:字符串格式化用错引号
# ❌ 错误:单引号里不能用 f-string
message = '您好,我叫{name}'
# ✅ 正确:f-string 必须用双引号或三引号
message = f"您好,我叫{name}"
解释:f-string 的 f 必须写在双引号或三引号前面,单引号不认。
坑 2:input() 输入的是字符串,不会自动转数字
# ❌ 错误:直接做数学运算
age = input("请输入您的年龄:")
print(age + 5) # 会报错!input 返回的是字符串 "18",不是数字 18
# ✅ 正确:先转成整数
age = int(input("请输入您的年龄:"))
print(age + 5) # 正常输出 23
解释:input() 无论用户输入什么,都当作字符串处理。想做数学运算必须先 int() 或 float() 转换。
坑 3:列表索引越界
# ❌ 错误:访问不存在的索引
fruits = ["苹果", "香蕉", "橙子"]
print(fruits[3]) # 报错!索引从 0 开始,只有 0, 1, 2
# ✅ 正确:先检查长度
fruits = ["苹果", "香蕉", "橙子"]
if len(fruits) > 3:
print(fruits[3])
else:
print("列表只有 3 个元素,索引 0-2")
解释:Python 的列表索引从 0 开始,访问前一定要确认索引存在。
坑 4:循环里修改变量没效果
# ❌ 错误:在循环里想删除列表元素
nums = [1, 2, 3, 4, 5]
for num in nums:
if num % 2 == 0:
nums.remove(num) # 可能漏删或出错
print(nums)
# ✅ 正确:创建新列表或用列表推导式
nums = [1, 2, 3, 4, 5]
nums = [num for num in nums if num % 2 != 0] # 只保留奇数
print(nums) # [1, 3, 5]
解释:边遍历边修改列表会导致索引错位,Python 不喜欢你这么干。
坑 5:文件路径写错或忘记处理中文编码
# ❌ 错误:不指定编码,中文文件名会出问题
with open("我的文件.txt", "w") as f:
f.write("内容")
# ✅ 正确:显式指定 utf-8 编码
with open("我的文件.txt", "w", encoding="utf-8") as f:
f.write("内容")
解释:Windows 默认编码不是 UTF-8,中文系统上读写文件必须指定 encoding="utf-8"。
调试技巧:print 大法
遇到程序不工作,先 print() 出来看看:
# 不知道变量是什么?打出来
print(f"调试:name = {name}, type = {type(name)}")
# 不知道循环跑了几次?打出来
print(f"调试:第 {i} 次循环,元素是 {emp}")
# 不知道条件成不成立?打出来
print(f"调试:choice = {choice}, style = {style}")
进阶调试:用 logging 模块记录日志,比 print 更专业:
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug(f"name = {name}")
# 上线时改成 WARNING 级别,就不打印调试信息了
logging.basicConfig(level=logging.WARNING)
✏️ 练习题
练习 1(2 分钟):改个名字就能跑
- 输入:把项目 1 的姓名改成"小明"
- 预期输出:名片上显示"小明"
- 提示:找到
name = input(...)那行,直接改成name = "小明"
练习 2(3 分钟):加个判断过滤
- 输入:在项目 2 的基础上,只生成"研发部"员工的名片
- 预期输出:只输出张三和赵六的名片,不输出其他人
- 提示:在
for循环里加一个if emp['department'] == '研发部'
练习 3(5 分钟):处理新的 CSV 数据
- 输入:把以下 CSV 数据复制到项目 2 的代码里,替换原来的
csv_content
name,job,department
陈七,数据分析师,分析部
周八,运营经理,运营部
吴九,前端工程师,研发部
郑十,产品总监,产品部
- 预期输出:生成 4 张名片
- 提示:修改
csv_content变量的值就行,其他代码不用动
练习 4(5 分钟):串起两个项目
- 输入:把项目 2 的 CSV 数据传给项目 3 的
generate_card函数 - 预期输出:把 CSV 里的第一个人生成一张正式名片(style='formal')
- 提示:从项目 2 得到
employees列表后,取第一个元素调用generate_card(employees[0]['name'], employees[0]['job'], employees[0]['company'], 'formal')
练习 5(5 分钟):报错分析
- 输入:运行下面这段代码会报错,找出原因并修复
name = input("请输入您的姓名:")
age = input("请输入您的年龄:")
print(f"您好,{name},明年您就 {age + 1} 岁了!")
- 预期输出:
请输入您的姓名:小明
请输入您的年龄:25
您好,小明,明年您就 26 岁了!
- 提示:
input()返回的是字符串,字符串不能直接做加法
作业:做一个「个人名片管理系统」
需求描述:做一个带菜单交互的名片管理工具,能增删改查名片信息,并支持导出。
功能点:
- 添加名片:输入姓名、职位、公司,添加到名片列表
- 查看名片:显示所有名片,支持按姓名搜索
- 删除名片:输入姓名,删除对应名片
- 导出名片:把所有名片导出到
cards.txt文件
加分项(选做):
- 支持名片导入(从 CSV 读取已有名片)
- 给名片加"手机号"和"邮箱"字段
验收标准:
- 能跑起来,不报错
- 添加名片后查看能看到新名片
- 删除名片后查看列表里没有这张名片
- 导出文件里有名片内容
提交方式:把代码贴到评论区,或者发 GitHub 链接,记得写清楚运行环境(Python 3.x)
📚 总结
这一章我们学了 3 件事:
- 字符串格式化(f-string):把变量塞进模板里,一招走天下
- 列表+循环:批量处理数据的黄金搭档,学会这对组合效率翻倍
- 文件读写:数据能进能出,程序才活起来
把这三板斧组合起来,你就有了"个人信息管理"的能力——输入、存储、批量处理、导出,全都能搞定。
下集预告:下一章我们要学一个让程序"做选择"的能力——if/elif/else 条件分支。学完之后,你就能让程序根据不同情况做不同的事。比如:自动识别名片类型、根据年龄段推荐内容、甚至做一个小测验程序……
先留个悬念:如果名片上的职位是"工程师",显示"🧑💻"图标;是"设计师",显示"🎨"图标——这种事怎么实现?下章见!
延伸资源:
- 📖 官方文档:Python 官方教程 - 字符串格式化
- 📖《Python编程:从入门到实践》- 第 2 章字符串 + 第 3 章列表
- 🎬 视频:B 站小甲鱼《零基础入门学习 Python》第 20-25 讲
你在工作或生活中有没有遇到过"同样的模板,不同的内容"这种重复劳动?是怎么解决的?评论区聊聊,老粉优先回复!

评论(0)