# Task: Ask for the user's name
name =input("Enter your name: ")# Task: Ask for the user's age (note: input() returns a string)
age_str =input("Enter your age: ")# Task: Convert age_str to an int# age = ...# Task: Calculate the year the user turns 100# Tip: you'll need the current year# current_year = ...# year_turn_100 = ...# Task: Print a personalized message using an f-string# print(...)技术支持
练习到的关键概念
input() 始终返回字符串
使用 int() 将字符串转换为整数
基础数值运算
使用 f-string 进行字符串格式化
该练习让您认识到,用户输入往往需要先转换才能用于计算。
温度转换器
把您的 Python 技能应用在基础单位换算上试试。
练习
编写一个程序,需:
询问用户一个摄氏温度
使用公式 F = (C × 9/5) + 32 将其转换为华氏温度
打印转换后的温度
起始代码
以下是帮助您的起始代码:
# Task: Ask the user for a Celsius temperature
celsius_str =input("Temperature in Celsius: ")# Task: Convert the input to a float# celsius = ...# Task: Apply the conversion formula# fahrenheit = ...# Task: Print the result (consider formatting to 1–2 decimal places)# print(...)技术支持
a =5
b =10# Task: Swap a and b# Hint: Try a temporary variable first.# Then try the Pythonic approach (tuple unpacking).# Task: Print the swapped values to verify# print("a:", a)# print("b:", b)技术支持
# Task: Ask the user for a number
num_str =input("Enter a whole number: ")# Task: Convert to int# num = ...# Task: Use modulo (%) to decide even vs odd# if ...:# print("Even")# else:# print("Odd")技术支持
# Task: Loop from 1 to 100for n inrange(1,101):# Task: Check multiples of 3 AND 5 first# if ...:# print("FizzBuzz")# Task: Then multiples of 3# elif ...:# print("Fizz")# Task: Then multiples of 5# elif ...:# print("Buzz")# Task: Otherwise, print the number# else:# print(n)pass技术支持
import random
# Task: Pick a random number in a reasonable range# target = random.randint(1, 100)# Task: Use a while loop to keep asking until correct# while ...:# guess_str = input("Your guess (1–100): ")# # guess = ...# # if guess > target:# # print("Too high")# # elif guess < target:# # print("Too low")# # else:# # print("Correct!")# # break技术支持
numbers =[3,7,2,9,4]# Task: Create an accumulator variable# total = ...# Task: Loop through numbers and add each value to total# for ...:# ...# Task: Print the final total# print(total)技术支持
numbers =[12,5,27,3,19]# Task: Initialize current_max using the first element# current_max = numbers[0]# Task: Loop through the remaining elements and update current_max# for ...:# if ...:# current_max = ...# Task: Print the largest number# print(current_max)技术支持
data =["apple","banana","apple","orange","banana","kiwi"]# Task: Create a new list for unique items# unique = []# Task: Loop through data and append items you haven't seen yet# for item in data:# if ...:# ...# Task: Print or return the unique list# print(unique)技术支持
text =input("Enter some text: ")# Task: Create an empty dictionary# counts = {}# Task: Loop over each character and update counts# for ch in text:# # Option A: counts[ch] = counts.get(ch, 0) + 1# # Option B: if ch in counts: ... else: ...# pass# Task: Print the frequency table# print(counts)技术支持
phonebook ={# "Alice": "9123 4567",# "Ben": "9876 5432",}# Task: (Optional) add entries via input()# name = input("Name to add: ")# number = input("Number to add: ")# phonebook[name] = number# Task: Search loop (one lookup is fine for a start)
query =input("Search name: ")# Task: Print the number if found, otherwise print a friendly message# if ...:# print(...)# else:# print("Not found")技术支持
text =input("Enter a word or phrase: ")# Task: Normalize (lowercase + remove spaces)# normalized = ...# Task: Reverse using slicing# reversed_text = ...# Task: Compare and print a result message# if ...:# print("Palindrome")# else:# print("Not a palindrome")技术支持
deffactorial(n:int)->int:"""Return n! (factorial of n) using a loop."""# Task: Decide how to handle n < 0# Task: Initialize result# result = ...# Task: Multiply result by each integer from 1 to n# for ...:# ...# Task: Return the computed factorial# return resultpass# Optional quick test# print(factorial(5)) # expected: 120技术支持
defis_prime(n:int)->bool:"""Return True if n is prime, otherwise False."""# Task: Handle small cases (n <= 1)# Task: Check divisibility from 2 up to an appropriate limit# for ...:# if ...:# return False# Task: If no divisors found, return True# return Truepass# Optional quick tests# print(is_prime(2)) # expected: True# print(is_prime(15)) # expected: False技术支持
defprint_args(*args)->None:"""Print each positional argument on its own line."""# Task: Loop over args and print each one# for ...:# print(...)pass# Optional quick test# print_args("hello", 42, True)技术支持
学习 Python 的最佳方式,是通过重复练习、主动尝试与解决问题来建立熟悉感。这也是“做中学”理念之所以成为高效程序员培养核心方法的原因。
写代码、犯错误、再把它们修好——这是您为自己构建真正技能的路径。
在本文中,我们将系统完成一组专为初学者设计的 Python 练习。这些练习从简单变量开始,逐步过渡到函数、数据结构,以及小型数据项目。
继续阅读之前,先给您一个挑战:尝试立刻完成本文前 3 个练习,不要提前查看讲解。即使卡住了,“尝试”的过程本身就包含了大部分学习。
如果您更喜欢引导式体验,DataCamp 课程会逐步自动检查您的语法与逻辑,避免小错误阻断进度,尤其适合初学者。一个不错的起点是 Introduction to Python 课程。
开始进行 Python 练习
在动手做练习前,您需要一个基础环境来编写并运行 Python 代码。幸运的是,入门比以往更容易。
准备工作
要在本地运行 Python,请安装对初学者友好的代码编辑器,例如 Visual Studio Code。
一个典型的设置如下:
从Python 官方网站安装 Python
安装 Visual Studio Code
在 VS Code 中添加 Python 扩展
创建一个新的
.py文件并开始编码VS Code 是一个很好的起点,它是开源且免费使用。您可以访问其下载页面获取安装包,下载完成后即可安装。
如果您不想安装任何软件,可以使用 DataLab,这是一款基于浏览器的环境,可立即运行 Python(和 SQL)代码。它非常适合配合教程、测试代码片段,以及在不担心环境配置问题的情况下进行试验。
如何使用这些练习
为最大化学习效果,本文中的每个练习都设计为先尝试再阅读解答或讲解。
充分利用这些练习的最佳方式:
所有练习的完整答案可在此处链接的 DataLab 工作簿中查看。您可以将自己的思路与可运行的解法对照,并理解解决同一问题的替代方法。
变量、输入与输出的 Python 练习
我们先从一些基础练习开始,聚焦于基本构件:存储值、读取用户输入以及将输出打印到屏幕上。
个性化问候
先来看一个简单的 Python 练习:打印一条个性化消息。
练习
编写一个程序:
使用
input()询问用户姓名使用
input()询问用户年龄使用格式化字符串打印问候语
计算用户在何年满 100 岁
在写代码前,先想一想信息如何在这样一个简单程序中流动。用户以文本形式提供原始输入,Python 将该输入存入变量,然后您把这些值转换为有意义的内容。
这个练习与许多真实程序相呼应,因为用户输入很少能直接使用,通常需要先验证或转换。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
input()始终返回字符串使用
int()将字符串转换为整数基础数值运算
使用 f-string 进行字符串格式化
该练习让您认识到,用户输入往往需要先转换才能用于计算。
温度转换器
把您的 Python 技能应用在基础单位换算上试试。
练习
编写一个程序,需:
询问用户一个摄氏温度
使用公式
F = (C × 9/5) + 32将其转换为华氏温度打印转换后的温度
起始代码
以下是帮助您的起始代码:
练习到的关键概念
浮点数
算术表达式
使用
float()进行类型转换本练习强化了一个认识:并非所有数值输入都是整数,Python 能自然处理小数。
交换逻辑小谜题
这个练习看起来很简单,但初学者常会把变量想象成必须逐步清空再重新赋值的“盒子”。来看看如何在 Python 中进行值交换。
练习
给定两个变量:
a = 5和b = 10。在不逐一手动重赋值的情况下交换它们的值。Python 支持更具表达力的赋值方式,您可以在一次操作中拆包并重新赋值。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
这引入了元组拆包这一特性,使 Python 既简洁又有表现力。
想进一步了解基础,可参阅我们的 Python 速查表。
控制流与逻辑的 Python 练习
控制流让您的程序能够根据条件做出决策并重复执行动作。
奇偶性检查器
取模运算符的一个常见用法是进行奇偶判断。我们来试试。
练习
编写一个程序,需:
询问用户一个数字
使用取模运算符
%打印该数字是偶数还是奇数
起始代码
以下是帮助您的起始代码:
练习到的关键概念
取模运算符
if/else语句布尔逻辑
这通常是初学者第一次看到如何用条件来控制程序行为的例子。
经典 FizzBuzz 挑战
FizzBuzz 是许多人做过的常见编程挑战。我们来看看这个练习的内容。
练习
打印从 1 到 100 的数字,遵循以下规则:
3 的倍数打印
Fizz5 的倍数打印
Buzz同时是两者倍数则打印
FizzBuzz该练习训练您谨慎思考决策树与边界情况——这在编写真实程序时至关重要。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
for循环条件判断的先后顺序
逻辑运算符
该练习是程序员的“通关仪式”,常用于教授控制流中的结构化思维。更多循环内容请参阅我们的 Python 循环教程。
猜数字游戏
该练习引入会根据用户输入动态响应的交互式程序。
练习
编写一个程序,需:
生成一个随机数字(导入
random)使用
while循环不断询问猜测每次猜测后打印 "Too high" 或 "Too low" 的反馈
在猜中正确数字时停止
这通常是初学者第一次体验到程序具有交互性而非线性的练习。不像之前从上到下执行并退出的脚本,这个程序会持续运行直到满足某个条件。
这里的关键概念跃迁在于理解循环终止。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
导入模块(
random)while循环循环终止条件
列表、循环与迭代的 Python 练习
列表让您处理一组值,而循环能让您高效地处理它们。
列表求和
这种模式在数据处理与分析工作流中频繁出现。
练习
编写一个程序,在不使用内置
sum()函数的情况下对列表中的所有数字求和。程序应在循环中显式执行求和逻辑,而不是依赖其他聚合辅助函数。起始代码
以下是帮助您的起始代码:
练习到的关键概念
初始化累加器变量
使用
for循环迭代逐步更新数值
更多与列表相关的示例,请查看我们的指南:最常见的 Python 列表问题。
寻找最大值
下一个练习与上一个有点相似,但在循环中的工作方式不同。它强化了算法化思维,并反映了内置函数的内部工作方式。
练习
挑战:在不使用
max()的情况下,找出列表中的最大数。起始代码
以下是帮助您的起始代码:
练习到的关键概念
去重
真实世界的数据很杂乱,而杂乱的数据往往包含重复值。以下练习将为数据清洗任务做准备。
练习
将一个包含重复元素的列表转换为仅包含唯一项的新列表。
乍看这个问题很简单,但它引入了“记录已见内容”的思路。这是数据处理中的基础概念,识别并删除重复记录是常规任务。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
使用
in进行成员检查构建新列表
理解数据唯一性
字典与字符串处理的 Python 练习
字典和字符串是组织与转换文本数据的关键。我们来看看如何处理它们。
字符频次统计器
该练习教您构建频次表,这是常见的数据分析任务。
练习
读取一个字符串输入,并返回一个字典,统计每个字符出现的次数。
这个练习代表了一个重要的概念性跨越:在程序运行过程中动态构建数据结构。您不是处理预定义的列表或字典,而是根据遇到的数据创建并更新条目。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
字典
.get()方法条件式初始化
简易电话簿
该练习涉及字典逻辑,这是今后理解表格型数据结构的基础。
练习
创建一个程序,用字典存储姓名与号码,并允许用户按姓名进行搜索。
该练习引入了将程序作为持久查询工具而非一次性计算的理念。您在建模许多应用存储与检索信息的简化版本。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
如果您想更深入了解字典,推荐阅读我们的综合指南:Python 字典方法。
回文检查器
该练习将文本处理与逻辑比较结合,探讨回文。
练习
回文是指正反读相同的单词、短语、数字或字符序列。创建一个脚本,检查字符串在忽略大小写与空格时,正反是否相同。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
字符串方法(
lower()、replace())字符串切片(
[::-1])函数与模块化的 Python 练习
函数让您编写可复用、结构化的代码,而不是重复同样的逻辑。
阶乘计算器
阶乘计算器将帮助您理解返回值,这对构建更大型程序至关重要。
练习
定义一个函数,接收一个整数并使用循环返回其阶乘。
打印值与返回值之间的区别尤为重要。返回结果让您的函数能与其他代码组合,这在程序超越单文件规模后必不可少。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
更多函数相关内容请阅读我们的 Python 函数教程。
质数校验器
接下来我们来看一个质数校验函数。这将帮助您学习如何编写可复用函数。
练习
编写一个函数:若数字是质数返回
True,否则返回False。质数检查还展示了函数如何整洁地封装逻辑。一旦写好,该函数即可在任意位置复用,无需理解其内部细节。
起始代码
以下是帮助您的起始代码:
练习到的关键概念
灵活参数打印器
这将介绍许多 Python 库中使用的高级函数签名。
练习
创建一个函数,使用
*args接收任意数量的参数,并逐个打印。该练习让您接触到 Python 的一项灵活特性:可变长度参数。它将您的思维从固定输入转向可根据不同用例自适应的函数。
理解
*args有助于阅读与使用真实世界的 Python 库——为了便捷与可扩展,函数经常接收可变数量的参数。起始代码
以下是帮助您的起始代码:
练习到的关键概念
用引导式项目应用 Python 技能
练习能构建技能,但项目能将这些技能转化为自信。
探索 Netflix 电影
Investigating Netflix Movies 引导式项目提出了一个看似简单的问题:电影是否在逐渐变短?为回答它,您将使用一份包含 Netflix 片目的真实数据集,并将原始数据行逐步转化为清晰的可视化洞见。
该项目的强大之处在于,它弥合了初级 Python 基础与应用数据分析之间的鸿沟。您将看到,简单逻辑在与合适工具结合后如何扩展,而且无需在本地安装任何东西。
塞麦尔维斯医生与洗手的发现
这个 Dr. Semmelweis and the Importance of Handwashing 项目让您站在数据分析师的角度调查一个真实的历史问题。19 世纪中期,Ignaz Semmelweis 医生观察到一个病房的死亡率异常高于另一个,但缺乏计算工具来证明原因。
利用历史记录,您将分析引入洗手前后的死亡率数据。该项目聚焦于使用
pandas处理表格数据、计算比率,并在不同时期之间比较平均值。探索纽约市 Airbnb 市场
在 Exploring Airbnb Market Trends 项目中,您将置身一个与真实世界分析工作高度相似的情境:数据杂乱且不一致,需要在任何有意义的分析开始之前进行大量清洗。
数据集包含租房列表,价格以字符串形式存储,评分缺失且格式不一致。
您的首要任务是清洗并标准化数据。该项目强化了这样一个理念:数据准备并非前期杂务,而是一项核心分析技能。数据从业者的大部分时间往往花在清洗数据上,而本项目是检验这项能力的绝佳实战关卡。
结语
您从简单的变量与用户输入出发,逐步走过控制流、数据结构、函数,最后在引导式项目中综合应用。通过这些练习,您应已对 Python 在真实环境中的用法有了不错的了解。
您的下一步自然是系统化学习。坚持练习并配合结构化、引导式教学,是将练习转化为专长的最快途径。建议您报名我们的 Python Programming 或 Data Scientist 学习路径以开始起步。