Day 1 · Python 环境搭建与基础语法

Week 1 · Day 1 / 56 · 预计 1.5-2 小时 · 返回大纲

一、环境检查与准备

确认 Python 版本:

$ python3 --version
Python 3.12.x
注意: 不要用 python,用 python3。系统上 python 可能不存在或指向旧版本。

安装 uv(Python 包管理器)

uv 是 Rust 写的 Python 包管理器,比 pip 快 10-100 倍,类比前端的 pnpm。

$ curl -LsSf https://astral.sh/uv/install.sh | sh
$ uv --version
uv 0.x.x
💡 前端类比: uvpnpmpipnpm。以后装包都用 uv add xxx

二、Python 解释器:两种运行方式

方式 1:交互模式(REPL)

终端输入 python3,进入交互模式:

$ python3
Python 3.12.x (main, ...)
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 + 2
4
>>> print("Hello, Python!")
Hello, Python!
>>> exit()
💡 前端类比: 交互模式 ≈ 浏览器 Console,逐行执行立即看结果。

方式 2:脚本文件

创建 hello.py

# hello.py
print("Hello, Python!")
print("今天是 Day 1")

执行:

$ python3 hello.py
Hello, Python!
今天是 Day 1

方式 3:直接执行

文件第一行加 #!/usr/bin/env python3,给执行权限:

#!/usr/bin/env python3
print("Hello, Python!")
$ chmod +x hello.py
$ ./hello.py
Hello, Python!

三、数字与基本运算

类型PythonJavaScript示例
整数 int(任意精度) number(53 位精度) 42, -7
浮点数 float number 3.14, -0.001
布尔 bool(True/False) boolean(true/false) True, False
JavaScript
10 / 3        // 3.333...
Math.floor(10 / 3)  // 3
10 % 3        // 1
10 ** 3       // 1000

// 大数精度丢失
9999999999999999
Python
10 / 3        # 3.333...
10 // 3       # 3(整除)
10 % 3        # 1
10 ** 3       # 1000

# 整数任意精度
9999999999999999
关键差异:

四、字符串基础

操作JavaScriptPython
创建"hello""hello"
拼接"a" + "b""a" + "b"
重复"ab".repeat(3)"ab" * 3
模板`Hello ${name}`f"Hello {name}"
长度str.lengthlen(str)
索引str[0]str[0]
切片str.slice(1, 3)str[1:3]

f-string(重点)

JavaScript
const name = "Alice";
const age = 25;

console.log(`Name: ${name}, Age: ${age}`);
console.log(`Next year: ${age + 1}`);
Python
name = "Alice"
age = 25

print(f"Name: {name}, Age: {age}")
print(f"Next year: {age + 1}")

f-string 格式化:

pi = 3.14159265
print(f"Pi: {pi:.2f}")        # Pi: 3.14
print(f"Pi: {pi:10.2f}")      # Pi:       3.14

num = 42
print(f"Binary: {num:b}")     # Binary: 101010
print(f"Hex: {num:x}")        # Hex: 2a

字符串方法

s = "Hello, Python!"

s.upper()           # "HELLO, PYTHON!"
s.lower()           # "hello, python!"
s.strip()           # 去除首尾空白
s.replace("Python", "World")
s.split(",")        # ["Hello", " Python!"]
s.startswith("Hello")  # True
s.find("Python")    # 7
s.count("o")        # 2

# 链式调用
"  hello  ".strip().upper()  # "HELLO"

五、列表入门

JavaScript Array
const arr = [1, 2, 3, 4, 5];

arr.push(6);
arr.pop();
arr.slice(1, 3);
arr.map(x => x * 2);
arr.filter(x => x > 2);
arr.length;
Python List
arr = [1, 2, 3, 4, 5]

arr.append(6)
arr.pop()
arr[1:3]
[x * 2 for x in arr]
[x for x in arr if x > 2]
len(arr)
注意: Python 的 list 没有 map/filter 方法,用的是列表推导式(List Comprehension),Day 4 深入。

列表常用操作

fruits = ["apple", "banana", "orange"]

fruits[0]       # "apple"
fruits[-1]      # "orange"(负数索引)
fruits[1:3]     # ["banana", "orange"]

fruits.append("grape")
fruits.insert(1, "mango")
fruits.remove("banana")
del fruits[0]

len(fruits)              # 长度
"apple" in fruits        # True
fruits.sort()
sorted(fruits)           # 返回新列表

六、第一个脚本文件

创建 day1.py

#!/usr/bin/env python3
"""Day 1 练习脚本"""

# 变量和类型
name = "Python 学习者"
day = 1
hours = 1.5

# f-string 输出
print(f"你好,{name}!")
print(f"今天是 Day {day},学习了 {hours} 小时")

# 数字运算
total_days = 56
progress = day / total_days * 100
print(f"进度:{progress:.1f}%")

# 列表操作
topics = ["环境搭建", "解释器", "数字", "字符串", "列表"]
print(f"\n今天学了 {len(topics)} 个主题:")
for topic in topics:
    print(f"  - {topic}")

print(f"\n明天是 Day {day + 1}")
print(f"距离毕业还有 {total_days - day} 天")

执行:

$ python3 day1.py
你好,Python 学习者!
今天是 Day 1,学习了 1.5 小时
进度:1.8%

今天学了 5 个主题:
- 环境搭建
- 解释器
- 数字
- 字符串
- 列表

明天是 Day 2
距离毕业还有 55 天

七、动手练习

练习 1:个人信息卡片
用 f-string 格式化输出你的信息
# 要求输出:
# ==================
# 姓名:张三
# 年龄:25
# 职业:前端工程师
# 学习 Python 第 1 天
# ==================

# 你的代码:
查看答案
参考答案
name = "张三"
age = 25
job = "前端工程师"
day = 1

print("==================")
print(f"姓名:{name}")
print(f"年龄:{age}")
print(f"职业:{job}")
print(f"学习 Python 第 {day} 天")
print("==================")
练习 2:简单计算器
定义两个变量,做加减乘除运算并输出
a = 17
b = 5

# 要求输出:
# 17 + 5 = 22
# 17 - 5 = 12
# 17 * 5 = 85
# 17 / 5 = 3.4
# 17 // 5 = 3
# 17 % 5 = 2
# 17 ** 2 = 289

# 你的代码:
查看答案
参考答案
a = 17
b = 5

print(f"{a} + {b} = {a + b}")
print(f"{a} - {b} = {a - b}")
print(f"{a} * {b} = {a * b}")
print(f"{a} / {b} = {a / b}")
print(f"{a} // {b} = {a // b}")
print(f"{a} % {b} = {a % b}")
print(f"{a} ** 2 = {a ** 2}")
练习 3:购物清单
操作列表:添加、删除、查找
shopping = ["牛奶", "面包", "鸡蛋"]

# 1. 添加 "苹果" 到末尾
# 2. 在 "面包" 前面插入 "黄油"
# 3. 删除 "鸡蛋"
# 4. 检查 "牛奶" 是否在清单中
# 5. 输出清单长度
# 6. 用 for 循环打印每一项

# 你的代码:
查看答案
参考答案
shopping = ["牛奶", "面包", "鸡蛋"]

# 1. 添加 "苹果" 到末尾
shopping.append("苹果")
print(f"添加苹果后:{shopping}")

# 2. 在 "面包" 前面插入 "黄油"
shopping.insert(1, "黄油")
print(f"插入黄油后:{shopping}")

# 3. 删除 "鸡蛋"
shopping.remove("鸡蛋")
print(f"删除鸡蛋后:{shopping}")

# 4. 检查 "牛奶" 是否在清单中
has_milk = "牛奶" in shopping
print(f"牛奶在清单中:{has_milk}")

# 5. 输出清单长度
print(f"清单长度:{len(shopping)}")

# 6. 用 for 循环打印每一项
print("购物清单:")
for item in shopping:
    print(f"  - {item}")
练习 4:字符串处理
处理用户输入的字符串
text = "  Hello, Python World!  "

# 1. 去除首尾空格
# 2. 转成大写
# 3. 把 "Python" 替换成 "编程"
# 4. 统计 "o" 出现的次数
# 5. 按空格分割成列表
# 6. 用 f-string 输出:处理后的文本是:xxx,共 xx 个字符

# 你的代码:
查看答案
参考答案
text = "  Hello, Python World!  "

# 1. 去除首尾空格
text = text.strip()
print(f"1. 去空格:'{text}'")

# 2. 转成大写
text_upper = text.upper()
print(f"2. 转大写:{text_upper}")

# 3. 把 "Python" 替换成 "编程"
text_replaced = text.replace("Python", "编程")
print(f"3. 替换后:{text_replaced}")

# 4. 统计 "o" 出现的次数
count_o = text.count("o")
print(f"4. 'o' 出现次数:{count_o}")

# 5. 按空格分割成列表
words = text.split()
print(f"5. 分割成列表:{words}")

# 6. 用 f-string 输出
print(f"6. 处理后的文本是:{text_replaced},共 {len(text_replaced)} 个字符")

八、打卡验收

终端输入 python3 能进入交互模式,看到 >>>
在交互模式里完成 2 + 2print("hello")exit()
创建 hello.py 并用 python3 hello.py 成功执行
给脚本加 #!/usr/bin/env python3chmod +x,能 ./hello.py 直接执行
理解 intfloat 的区别,知道 /// 的差异
会用 f-string 格式化输出变量
会创建列表,用 append()/pop()/len()/in
完成 4 个动手练习,代码能跑通
打卡方式: 全部勾选后,告诉我 "Day 1 打卡",并贴出你的代码,我帮你检查。
明天预告(Day 2): 变量、类型、控制流(if/for/while)、Python 的 truthy/falsy 与 JS 的差异、循环技巧。