你看完了教程。你敲下了每一行代码,运行了每一个示例,看着它们完美运行。然后,你打开一个空白的编辑器,准备自己写点东西,结果脑子一片空白。一个点子也没有。
几乎每个初学者都会落入教程陷阱(通常是在上完第一门 Python 课程之后)。你可以整天阅读关于 for 循环的内容,但只要没人告诉你该敲什么代码,你的大脑就会瞬间死机。
看懂代码和亲手写代码是两种完全不同的技能。从前者过渡到后者的唯一方法,就是自己动手写项目。完全靠你自己。
而且,这些项目不需要有什么实际用处。你不需要发布一个应用,也不需要去给开源项目做贡献。你只需要写一些能运行的、好玩的小程序,一个接一个地写,直到你的大脑不再死机。
这正是这篇文章的目的。下面是 13 个简单的 Python 项目,每个项目只需 10 分钟到 1 小时即可完成。每个项目只教一两个知识点,绝不多给。而且,每个项目最终都会在你自己的电脑上运行一个由你亲手写出的文件。
还没准备好动手写项目? 没关系!万丈高楼平地起,打好基础最重要。在迈出下一步之前,先学习计算机基础知识,打下坚实的基础。
为什么应该动手实践,而不是只看教程?
因为看教程会让你产生一种“我在学习”的幻觉,但实际上教程已经替你完成了思考。而动手写项目会强迫你自己做决定。你必须给变量命名、选择合适的循环,并找出为什么你的代码打印了 None 而不是你想要的数字。
此外,小项目还能帮你克服动力不足的问题。一个需要两周才能完成的项目听起来很厉害,但你很可能会半途而废,再也不想碰它。而一个 30 分钟的项目今天就能搞定。你会得到一个可以运行的文件和一次小小的胜利,正是这种成就感会吸引你明天再次打开编辑器。

1. 猜数字游戏
经典之作。电脑随机选择一个 1 到 100 之间的数字,你来猜,电脑会提示你“太高了”或“太低了”,直到你猜中为止。这是大多数程序员写的第一个真正的程序,原因显而易见。
import random
secret = random.randint(1, 100)
guesses = 0
while True:
guess = int(input("Guess a number (1-100): "))
guesses += 1
if guess < secret:
print("Too low")
elif guess > secret:
print("Too high")
else:
print(f"Got it in {guesses} guesses")
break
你将学到: while 循环、条件语句、random 模块,以及将输入转换为数字。程序运行成功后,可以尝试添加一个最大猜测次数限制,如果没在规定次数内猜中,游戏就结束。
2. 疯狂填词游戏(Mad Libs)
让用户输入几个词(名词、动词、形容词),然后把它们填入一个搞笑的句子中并打印出来。从头到尾只需 10 分钟。
noun = input("Noun: ")
verb = input("Verb: ")
adjective = input("Adjective: ")
place = input("A place: ")
story = f"Yesterday I went to the {place} and saw a {adjective} {noun} that started to {verb}."
print(story)
3. 掷骰子模拟器
掷一个骰子,掷两个骰子,或者在游戏之夜掷一个 20 面的骰子。核心逻辑只有两行,其余的可以根据你的喜好自由发挥。
import random
def roll(sides=6, count=1):
return [random.randint(1, sides) for _ in range(count)]
print(roll(6, 2)) # rolls two six-sided dice
print(roll(20)) # rolls one d20
你将学到: 带有默认值的函数、列表推导式,以及用不同的输入调用同一个函数。程序运行成功后,可以添加一个简易菜单,让用户在运行时选择骰子的面数和个数。
4. 简易计算器
加、减、乘、除。两个数字,一个运算符。没错,计算器早就烂大街了。但这不重要。重要的是你自己把这些零散的知识点拼凑在一起,并发现自己第一次写时遗漏了什么。
def calc(a, b, op):
if op == "+": return a + b
if op == "-": return a - b
if op == "*": return a * b
if op == "/":
if b == 0:
return "Can't divide by zero"
return a / b
a = float(input("First number: "))
op = input("Operator (+, -, *, /): ")
b = float(input("Second number: "))
print(calc(a, b, op))
你将学到: 编写函数、使用 if 进行分支判断,以及处理那个棘手的边界情况(除以零)。想挑战一下吗?试着添加链式运算功能。
5. 石头剪刀布
你选一个,电脑选一个,根据规则决定胜负。非常适合用来练习编写小型游戏循环,并熟悉如何将字典用作查找表。
import random
options = ["rock", "paper", "scissors"]
wins_against = {"rock": "scissors", "paper": "rock", "scissors": "paper"}
you = input("Pick rock, paper, or scissors: ").lower()
cpu = random.choice(options)
print(f"Computer picked {cpu}.")
if you == cpu:
print("Tie")
elif wins_against[you] == cpu:
print("You win")
else:
print("Computer wins")
你将学到: 用于快速查找的字典、random.choice 以及字符串比较。把它放入 while 循环中,并记录每轮的得分,这样你就在一个下午里写出了一个微型游戏。
6. 密码生成器
使用字母、数字和符号生成一个包含 N 个字符的随机密码。实用、简单,15 分钟就能搞定。这属于你以后可能真的会经常用到的小工具。
import random
import string
def make_password(length=12):
pool = string.ascii_letters + string.digits + string.punctuation
return "".join(random.choice(pool) for _ in range(length))
print(make_password(16))
你将学到: string 模块、将字符拼接成一个字符串,以及从字符池中随机抽取字符。可以添加一个开关来跳过符号,以应对那些不支持标点符号的系统,这类系统比你想象的要多。
7. 终端待办事项列表
直接在终端中运行的简单添加、列出、删除菜单。没有数据库,无需繁琐配置,只有一个在你退出前一直存在的 Python 列表。这已经足够让你学到很多东西了。
todos = []
while True:
cmd = input("Command (add/list/remove/quit): ")
if cmd == "add":
todos.append(input("Task: "))
elif cmd == "list":
for i, t in enumerate(todos, 1):
print(f"{i}. {t}")
elif cmd == "remove":
idx = int(input("Index to remove: ")) - 1
if 0 <= idx < len(todos):
todos.pop(idx)
elif cmd == "quit":
break
你将学到: 菜单驱动程序、修改列表、enumerate 函数,以及从 1 开始编号的小技巧。下一个版本可以尝试将任务保存到文本文件中,这样即使程序关闭,数据也不会丢失。到那时,它就会开始像一个真正的应用程序了。
8. 单词与字符计数器
粘贴文本,获取单词数、字符数和最常见的单词。当你需要严格控制字数时,这个工具非常实用,一旦你开始留意,就会发现这种场景其实非常多。
from collections import Counter
text = input("Paste your text: ")
words = text.split()
chars = len(text)
most_common = Counter(words).most_common(1)
print(f"Words: {len(words)}")
print(f"Characters: {chars}")
print(f"Most common word: {most_common[0][0]} ({most_common[0][1]} times)")
你将学到: collections 模块、.split() 方法,以及从 Counter 返回的结果中读取值。为了获得更好的效果,可以尝试过滤掉像 "the" 和 "and" 这样的常用短词,否则你统计出的最常见单词永远是 "the",这没有任何参考价值。
9. 小费计算器
账单总额、小费比例、人数平摊。这种实用的小工具,即使在多年后你早已忘记是自己写的情况下,依然会忍不住拿出来使用。
bill = float(input("Bill total: "))
tip_pct = float(input("Tip percentage (e.g., 18): "))
people = int(input("How many people: "))
tip = bill * (tip_pct / 100)
total = bill + tip
per_person = total / people
print(f"Tip: {tip:.2f}")
print(f"Total: {total:.2f}")
print(f"Per person: {per_person:.2f}")
你将学到: 数学运算符、将输入转换为数字,以及使用 :.2f 保留两位小数。你可以通过向上取整每人应付的金额来扩展它,这样餐桌上就不会有人因为零钱不够而尴尬了。
10. 倒计时定时器
输入秒数,程序就会倒计时到零。虽然体积小巧,但写完后非常实用,可以作为休息提醒器或番茄钟。
import time
seconds = int(input("Seconds: "))
while seconds >= 0:
mins, secs = divmod(seconds, 60)
print(f"{mins:02d}:{secs:02d}", end="\r")
time.sleep(1)
seconds -= 1
print("Time's up ")
你将学到: time 模块、用于将数字拆分为分钟和秒的 divmod 函数,以及在同一行进行原地更新的 \r 技巧。正是 end="\r" 这个设置让定时器看起来像个真正的工具,而不是在终端里刷出一大堆文本。
11. 随机名言生成器
准备一个名言列表(励志的、搞笑的、编程相关的,随你喜欢),运行程序时会随机打印一条。这几乎简单得过头了,但还是动手写写吧。
import random
quotes = [
"The only way to learn a new programming language is by writing programs in it.",
"Programs must be written for people to read, and only incidentally for machines to execute.",
"Premature optimization is the root of all evil.",
"Simplicity is the soul of efficiency.",
"Code is like humor. When you have to explain it, it's bad.",
]
print(random.choice(quotes))
你将学到: 列表基础知识、random.choice,以及整个语言中最简单却实用的小程序。你可以把它挂载到终端的启动脚本中,这样每次打开命令行时都能看到一句新的名言,这种好玩的小玩意能悄悄增加你编程的乐趣。
12. 猜单词游戏(简化版 Hangman)
选择一个神秘单词,用下划线表示字母,让用户猜字母,猜错六次则游戏结束。这个项目比这里的其他项目稍微复杂一些,但如果保持逻辑简单,大约一小时内也能搞定。
import random
words = ["python", "syntax", "variable", "function", "module"]
secret = random.choice(words)
guessed = set()
wrong = 0
while wrong < 6:
display = "".join(c if c in guessed else "_" for c in secret)
print(display)
if "_" not in display:
print("You won")
break
letter = input("Guess a letter: ").lower()
if letter in secret:
guessed.add(letter)
else:
wrong += 1
print(f"Wrong. {6 - wrong} tries left.")
else:
print(f"You lost. The word was {secret}.")
你将学到: 集合、在字符串构建中嵌入条件判断,以及较少人知道的 while-else 语法(else 块仅在循环没有被 break 中断而正常结束时运行)。玩腻了代码里写死的几个单词?试着从文件中读取单词吧。(相信我,你很快就会玩腻的。)
13. 单位转换器
在常见单位之间进行转换:摄氏度到华氏度、千米到英里、千克到磅。非常实用,能快速完成,而且以后你肯定会经常用到。
def c_to_f(c):
return c * 9/5 + 32
def km_to_mi(km):
return km * 0.621371
def kg_to_lb(kg):
return kg * 2.20462
print("1. Celsius to Fahrenheit")
print("2. Kilometers to miles")
print("3. Kilograms to pounds")
choice = input("Pick a converter: ")
value = float(input("Value: "))
if choice == "1":
print(c_to_f(value))
elif choice == "2":
print(km_to_mi(value))
elif choice == "3":
print(kg_to_lb(value))
你将学到: 在一个文件中编写多个小函数、基础菜单,以及根据用户输入进行分支判断。正向转换实现后,可以尝试添加反向转换(华氏度到摄氏度,英里到千米)。同样的思路,花一半的精力,就能获得双倍的练习效果。
如何让这些项目真正转化为你的技能
写完一个项目只是一时的成就。坚持两周每天写一个,才能成为习惯。那些成功跨越 Python 初学者阶段的人和半途而废的人,他们之间的区别不在于天赋或时间,而在于是否能坚持练习。
以下是一些能帮到你的建议,大致按重要程度排序:
-
亲手敲代码,不要复制粘贴! 这确实枯燥且重复,但这是让代码模式融入你的肌肉记忆(而不仅仅是留在眼里)的唯一方法。当你第一次凭记忆敲出
import random时,你会有一种豁然开朗的感觉。 -
故意把代码写坏。 程序运行成功后,试着删掉一行、注释掉一个函数或重命名一个变量,看看会发生什么。修复这些错误能让你学到比单纯构建它更多的东西。(不亲自试试,你很难体会到这一点。)
-
同一个项目写两次。 一周后,尝试完全不看参考,重新写一遍猜数字游戏。第二次编写能检验你真正掌握了多少,结果可能会比你预期的要少。但这完全没关系!
-
添加一个新功能。 挑选上面任意一个项目,并为它增加一个小功能。比如把待办事项列表保存到文件中,或者让掷骰子模拟器一个接一个地打印结果。这些额外添加的部分才是最锻炼人的地方,因为没有人会手把手教你如何实现你自己的专属版本。
如果你总是难以坚持每天练习,这正是 Coddy 存在的原因。我们提供简短的 5 分钟 Python 微课、在动力不足时拉你一把的连续学习天数系统,以及在你卡壳时直接在课程中提供 AI 提示的助手 Bugsy。
我们的所有课程都可以免费开始学习,包括 Python。我们正是为你量身打造了这款工具:你已经看完了教程,但对自己还不够自信,正在寻找一些不会占用你整个晚上时间的练习机会。
接下来应该写什么?
当你觉得上面的项目太简单时,说明你已经成功跨越了那个瓶颈。干得漂亮!下一步是中等难度的项目,这类项目通常会引入一两个库,并涉及一些文件或网络输入/输出。以下是一些可以帮你进阶的项目:
- 使用
requests库和免费天气 API 制作的天气应用 - 使用
BeautifulSoup编写的网页爬虫,用于抓取你常看的网站的新闻标题 - 包含几个房间和物品清单的文字冒险游戏
- 将专注时间记录到 CSV 文件中的番茄钟
- 一个简单的 Flask 应用,用于展示一个包含随机笑话的网页
这些项目都不算高深。它们只是把你已经掌握的两三个知识点与一个新模块结合在一起。挑选一个你觉得最有趣的,因为只有感兴趣你才能真正坚持完成它。
教程的局限性在于,它们在需要你独立思考的那一刻就戛然而止了。而项目(哪怕是看起来很傻的项目)会强迫你进行思考。多写一些项目,教程陷阱就不再是陷阱。
Coddy 帮你告别被动观看,带你进入真正的编程实战。我们提供 5 分钟 Python 微课、每日连续学习天数激励,以及只提供思路不直接剧透答案的 AI 助手 Bugsy。
Share this article
About the Author
Coddy Team
Editorial Team
Frequently Asked Questions
适合初学者的最简单的 Python 项目是什么?
猜数字游戏是标准答案。它很短,在单个程序中使用了输入、循环和条件语句,而且运行起来感觉就像一个真正的游戏。大多数人可以在 20 分钟内完成它,即使他们才刚刚了解 while 循环的作用。
简单的 Python 项目应该花多长时间?
10 分钟到 1 小时不等。如果你在某个项目上花了 3 个小时,那要么是它对你目前的水平来说太难了,要么是你陷入了调试的泥潭,需要及时抽身。选一个更小的项目,完成它,然后再回头看。
做这些项目需要安装什么东西吗?
如果你想在本地运行它们,就需要;如果不想,就不需要。从 python.org 安装 Python 大约需要 5 分钟。或者完全跳过安装,在像 Coddy 内部提供的浏览器内代码沙箱中运行它们,这是免配置的选项。
这些 Python 项目适合写进简历吗?
单凭它们自己是不行的。简历上的项目通常需要更有深度,比如一个小型 Web 应用、一个你在工作中用来自动处理实际事务的脚本,或者对开源项目的贡献。这里的 13 个项目是帮你建立信心的垫脚石,而不是作品集。它们能让你做好准备,以便日后构建值得写进简历的项目。
我能从这些项目中学习到哪些 Python 概念?
在这 13 个项目中,你将接触到变量、输入和输出、条件语句、循环、函数、列表、字典、集合、random 模块、time 模块、f-strings、列表推导式,以及几个标准库模块(如 collections 和 string)。这些是该语言中非常扎实且实用的核心部分。
如果我的代码无法运行怎么办?
阅读错误信息。大多数初学者的错误几乎准确地说明了哪里出了问题,通常就在你开始慌乱的那一行的上一行。在 Google 上搜索该错误信息,让像 Bugsy 这样的 AI 助手来解释它,或者将其粘贴到论坛中。调试是一项技能,它的提升方式与写代码一样,需要通过反复练习。
我可以在手机上做这些项目吗?
可以。Python 可以在移动端编程环境中运行,包括内置了代码沙箱的 Coddy 应用。你无法在手掌大小的屏幕上编写企业级软件,但小型的练习项目在手机上运行得很好,而且很多人在手机上获得的练习比在笔记本电脑上还要多。
完成简单的 Python 项目后,下一步是什么?
融合了更多概念的中级项目:一个小型网页爬虫、一个 API 客户端、一个用于提供页面的 Flask 或 Django 应用,或者一个处理文件夹中文件的脚本。任何引入新库并连接到外部事物的项目都是有用的下一步。选择一个能解决你自己生活中的小问题的项目,那才是你能够坚持完成的项目。



