第0章 召唤仪式:安装Python
python
# 官方咒语下载站:https://www.python.org/downloads/
# 安装完成后在终端输入:
print("༼ つ ◕_◕ ༽つ 欢迎来到魔法世界!") # 记得按回车键施法哦第1章 初识咒语:变量与数据类型 ✨
变量就像神奇收纳盒,数据类型是盒中宝物:
python
# 数字型宝物
age = 18 # 整型(int)
pi = 3.14 # 浮点型(float)
# 文字型卷轴
name = "哈利·波特" # 字符串(str)
spell = 'Expelliarmus' # 单引号也OK
# 真伪之镜
is_wizard = True # 布尔型(bool)
print(f"{name}今年{age}岁,掌握咒语{spell}!") # f-string魔法第2章 魔药配方:列表与字典
python
# 魔药材料清单(列表的魔法)
ingredients = ["曼德拉草根", "火蜥蜴血", "龙鳞粉末"] # 基础材料就像坩埚三兄弟
ingredients.append("月光水") # 用魔杖搅拌添加新材料(这步可能引发冒泡反应)
print(f"第三份材料是:{ingredients[2]}") # 小心索引从0开始,拿错材料会炸成烟花哦🎆
# 当你想偷偷替换材料时...
ingredients[1] = "独角兽眼泪" # 火蜥蜴血被替换了!斯内普教授正在提刀赶来
print("危险操作后的材料表:", ingredients) # 输出:['曼德拉草根', '独角兽眼泪', '龙鳞粉末', '月光水']
# 巫师档案册(字典的奥秘)
wizard = {
"name": "赫敏·格兰杰",
"house": "格兰芬多", # 分院帽的最终决定
"pet": "克鲁克山", # 这只猫可能比主人还聪明
"OWLs": ["变形术", "魔药学", "黑魔法防御术"] # 全优生的秘密武器
}
# 添加隐藏属性(动态扩展字段)
wizard["patronus"] = "水獭" # 守护神形态需要魔法部登记吗?
print(f"{wizard['name']}的宠物是{wizard.get('pet', '未登记')}") # get方法比直接访问更安全,就像施了盔甲护身
# 危险的直接访问(可能引发KeyError)
try:
print(f"守护神形态:{wizard['Patronus']}") # 注意大小写敏感!字典可不会自动校正拼写
except KeyError as e:
print(f"触发警报!非法访问:{e}") # 输出:'Patronus' 这个键就像消失柜一样不见了🧪 魔药实验室小贴士
- 列表的隐藏配方
python
# 用切片实现材料克隆术(注意这是浅拷贝哦)
backup = ingredients[:2] # 只保留前两份原始材料
print("备用材料罐:", backup) # 输出:['曼德拉草根', '独角兽眼泪']- 字典的魔法扩展
python
# 用update()合并两个魔法档案
extra_info = {"魔杖材质": "葡萄藤木+龙心弦", "血统": "麻瓜出身"}
wizard.update(extra_info) # 像用胶带粘贴羊皮纸一样合并信息
print("完整档案:", wizard.keys()) # 输出所有键名:dict_keys(['name', 'house', ...])- 危险材料处理指南
python
# 用pop()移除危险材料时要小心
popped_item = ingredients.pop(1) # 移除索引1的材料(独角兽眼泪)
print(f"被没收的材料:{popped_item},剩余材料:{ingredients}") # 现在材料表又安全了🐍 Python冷知识:魔法世界的编程法则
- 当列表遇到
+=操作符时,会像被施了复制咒一样产生新对象
python
new_ingredients = ingredients + ["龙神经"] # 安全操作
ingredients += ["凤凰羽毛"] # 等价于 ingredients.extend(...) 原地修改- 字典的键顺序在Python3.7+后是有序的(像被施了时间定格咒)
python
print(wizard.keys()) # 输出顺序与添加顺序完全一致- 用
setdefault()可以避免重复施法(类似先检查再添加的复合咒语)
python
wizard.setdefault("boggart", "麦格教授宣布考试不及格") # 如果不存在才添加现在试试用del wizard["house"]删除学院信息——但小心被费尔奇抓到关禁闭!
📚 Python 字符串操作全解析:30+ 实用方法速查手册 🐍
一、基础操作类 [1][3]
索引与切片
pythons = "HelloPython" print(s[0]) # H print(s[-3:]) # hon print(s[::2]) # Hloyh拼接与重复
pythonprint("Py" + "thon") # Python print("*" * 5) # *
二、大小写转换 [1][3][4]
| 方法 | 示例 | 输出 | 说明 |
|---|---|---|---|
upper() | "apple".upper() | APPLE | 全大写 [1] |
lower() | "PYTHON".lower() | python | 全小写 [1] |
capitalize() | "hello".capitalize() | Hello | 首字母大写 [3] |
swapcase() | "PyThOn".swapcase() | pYtHoN | 大小写互换 [1] |
title() | "hello world".title() | Hello World | 单词首字母大写 [1] |
casefold() | "ß".casefold() | ss | 更彻底的小写化(如德语)[3] |
三、查找与替换 [1][3][4]
定位方法
pythons = "Python is cool" print(s.find("is")) # 7 print(s.index("is")) # 7(找不到报错) print(s.rfind("o")) # 12(反向查找)替换操作
pythonprint("Hello Java".replace("Java", "Python")) # Hello Python print("a-b-c".translate(str.maketrans("abc", "123"))) # 1-2-3前缀/后缀处理(Python 3.9+)
pythonprint("test_file.py".removesuffix(".py")) # test_file print("Mr_John".removeprefix("Mr_")) # John
四、分割与合并 [1][3][4]
分割方法
pythonprint("a|b|c".split("|")) # ['a', 'b', 'c'] print("line1\nline2".splitlines()) # ['line1', 'line2'] print("key=value".partition("=")) # ('key', '=', 'value')合并方法
pythonprint("-".join(["2024", "06", "20"])) # 2024-06-20
五、格式化与填充 [1][3][4]
格式化方法
pythonprint("{} + {} = {}".format(2, 3, 5)) # 2 + 3 = 5 print(f"{3.1415:.2f}") # 3.14(f-string)对齐与填充
pythonprint("Python".center(10, "*")) # Python print("42".zfill(5)) # 00042 print("Hello".ljust(8, "-")) # Hello
六、验证与判断 [1][3][4]
| 方法 | 示例 | 输出 | 说明 |
|---|---|---|---|
isalpha() | "Python".isalpha() | True | 全字母 [3] |
isdigit() | "2024".isdigit() | True | 全数字 [1] |
isalnum() | "Py3.8".isalnum() | False(含点号)[3] | |
startswith() | "file.txt".startswith("file") | True [3] | |
isspace() | "\t \n".isspace() | True [1] |
七、高级技巧 [3][4]
制表符处理
pythonprint("a\tb".expandtabs(4)) # a b正则替换
pythonimport re print(re.sub(r"\d+", "X", "A1B2C3")) # AXBXCX快速统计
pythonprint("abracadabra".count("a")) # 4
八、编码与解码 [3]
python
s = "中文"
encoded = s.encode("utf-8") # b'\xe4\xb8\xad\xe6\x96\x87'
decoded = encoded.decode("utf-8") # 中文九、冷门但实用 [3][4]
快速反转字符串
pythonprint("Python"[::-1]) # nohtyP多条件判断
pythonif s.lower().strip() in ["yes", "y"]: print("Confirmed!")生成翻译表
pythontrans = str.maketrans("aeiou", "12345") print("apple".translate(trans)) # 1ppl2
十、综合应用案例 [1][3]
python
# 格式化日志处理
def format_log(level, msg):
return f"[{level.upper():^7}] {msg.strip().capitalize()}"
print(format_log("error", " file not found "))
# [ ERROR ] File not foundPython的print函数
一、基础咒语:print核心参数
python
# 基础施法
print("霍格沃茨欢迎你!") # 输出:霍格沃茨欢迎你!
# 多元素拼接(sep参数控制分隔符)
print("哈利", "罗恩", "赫敏", sep="💫") # 哈利💫罗恩💫赫敏
# 控制结束符(end参数)
print("魔法石", end="→")
print("密室", end="→") # 魔法石→密室→二、格式化秘术:三种高阶写法
python
# 1. 古法占卜符(%格式化)
print("%s的魔杖长%.1f英寸" % ("哈利", 11.5)) # 哈利的魔杖长11.5英寸
# 2. 炼金术式(str.format)
print("{}在{}楼击败了巨怪".format("赫敏", 4)) # 赫敏在4楼击败了巨怪
# 3. 现代魔纹(f-string)
house, points = "格兰芬多", 150
print(f"{house} 获得 {points*10} 学院分!") # 格兰芬多 获得 1500 学院分!三、文件封印术:输出到日记本
python
with open("魔法日记.txt", "w") as f:
print("伏地魔回来了...", file=f) # 内容写入文件
# 同时打印到屏幕和文件
import sys
print("双面间谍模式启动", file=sys.stdout, flush=True)四、动态视觉魔法:进度条特效
python
import time
for i in range(10):
print(f"\r施法进度: {'🟩'*(i+1)}", end="")
time.sleep(0.3)
# 输出动态增长的进度条五、彩色符文绘制:终端变色术
python
# ANSI颜色代码
RED = "\033[31m"
RESET = "\033[0m"
print(f"{RED}警告:摄魂怪接近!{RESET}")六、高阶空间魔法:多维输出
python
# 打印生成器结果
print(*(x2 for x in range(5))) # 0 1 4 9 16
# 解包字典
spell_book = {"飞来咒": "Accio", "护盾咒": "Protego"}
print(*spell_book.items(), sep="\n") # 分行输出键值对七、特殊符号召唤术
python
print("不可饶恕咒:\n\t阿瓦达索命\n\t钻心剜骨")
# 输出带缩进的列表
print(r"原始字符串:\n\t不转义") # 输出:原始字符串:\n\t不转义八、综合实战:魔法学院成绩单
python
students = [
("哈利", 95, "O"),
("德拉科", 89, "E"),
("纳威", 78, "A")
]
print(f"\n{'姓名':<6}{'分数':<6}{'评级':<6}")
print("-"*18)
for name, score, grade in students:
print(f"{name:^6}{score:^6}{grade:^6}")
# 输出对齐的表格✂️Python切片操作全解析:从一维到高维的魔法切割术
一、一维切片操作(列表/字符串)
- [-1]
👉 取最后一个元素,Python的负索引魔法
python
X = [1,2,3,4,5]
print(X[-1]) # 输出:5- [:-1]
👉 排除最后一个元素,相当于"掐头去尾"
python
X = [1,2,3,4,5]
print(X[:-1]) # 输出:[1,2,3,4]- [::-1]
👉 逆序整个序列,镜像反转魔法
python
X = [1,2,3,4,5]
print(X[::-1]) # 输出:[5,4,3,2,1]- [n::-1]
👉 从索引n开始逆序到开头
python
X = [1,2,3,4,5]
print(X[3::-1]) # 输出:[4,3,2,1]二、多维切片操作(适用于NumPy等库)
- [:, :, 0]
👉 三维数组操作:前两维全选,第三维取索引0
python
import numpy as np
arr = np.arange(24).reshape(2,3,4)
print(arr[:, :, 0])
# 输出:前两维全选,第三维取第0层的所有数据- [..., 0]
👉 省略号魔法:自动填充所有前置维度,最后一维取索引0
python
arr = np.arange(24).reshape(2,3,4)
print(arr[..., 0]) # 等效于 arr[:, :, 0]- [..., ::-1]
👉 省略号+逆序:保持其他维度不变,最后一维逆序
python
arr = np.arange(24).reshape(2,3,4)
print(arr[..., ::-1]) # 每个二维切片最后一维逆序三、切片原理速记表 🧠
| 切片模式 | 等价操作 | 行为描述 | 应用场景 |
|---|---|---|---|
| [start:] | [start:len(seq):1] | 从起点到末尾 | 截取后半段 |
| [:end] | [0🔚1] | 从头到终点前一位 | 截取前半段 |
| [::2] | [0:len(seq):2] | 隔一个取一个 | 取偶数位元素 |
| [::-1] | [len(seq)-1👎-1] | 逆序整个序列 | 数据反转 |
| [3::-1] | [3:-len(seq)-1:-1] | 从第3个元素倒序到开头 | 局部逆序提取 |
| [...,0] | 自动填充前置维度 | 高维数据最后一维操作 | 多维数组切片 |
四、切片冷知识 ❄️
- 负索引计算:
X[-n]=X[len(X)-n][2][4] - 缺省值逻辑:步长为正时,start默认0,end默认末尾;步长为负时,start默认末尾,end默认开头 [3][7]
- 内存共享特性:切片生成的是原数据的视图(浅拷贝),修改切片会影响原数据 [4][7]
python
a = [1,2,3,4]
b = a[1:3]
b[0] = 99
print(a) # 输出:[1,99,3,4] 😱五、高维切片实战 🌌
python
# 四维时空数据切片示例(假设为时间×高度×纬度×经度)
weather_data = np.random.rand(365, 10, 180, 360)
# 取第0天所有高度层的北纬30度数据
slice1 = weather_data[0, :, 150, :]
# 取所有时间的500hPa高度场逆序经度
slice2 = weather_data[:, 5, :, ::-1]
# 取最后一天地表温度的第0个变量
slice3 = weather_data[-1, 0, ..., 0]第3章 时间魔法:条件与循环
python
# 分院帽决策(if-elif-else)
score = 85
if score >= 90:
print("拉文克劳!")
elif 70 <= score < 90:
print("格兰芬多!") # 会执行这个
else:
print("阿兹卡班预备班...")
# 猫头鹰送信循环(for)
letters = ["霍格沃茨通知书", "韦斯莱把戏坊广告", "吼叫信"]
for letter in letters:
if "吼叫信" in letter:
print("Σ(っ °Д °;)っ 快跑!")
break
print(f"收到:{letter}")
# 熬制魔药(while)
bubble_count = 0
while bubble_count < 3:
print("顺时针搅拌...")
bubble_count += 1
print("魔药完成!")for循环の九重天修炼手册
第1重:基础遍历术
python
# 遍历列表
fruits = ["苹果", "香蕉", "樱桃"]
for fruit in fruits:
print(f"今天吃:{fruit}") # 输出每个水果
# 搭配range使用
for i in range(3): # 生成0-2的序列
print(f"第{i+1}次循环") #第2重:高阶迭代法
python
# 字典双杀技
user = {"name": "哈利", "age": 17, "house": "格兰芬多"}
for key in user: # 遍历键
print(key)
for key, value in user.items(): # 键值双收
print(f"{key}: {value}") #
# 枚举神器enumerate
for index, fruit in enumerate(fruits, 1): # 从1开始计数
print(f"第{index}个水果是{fruit}") #第3重:组合技zip
python
names = ["赫敏", "罗恩", "纳威"]
scores = [99, 85, 72]
for name, score in zip(names, scores):
print(f"{name}考了{score}分") # 自动对齐数据第4重:推导式奥义
python
# 列表推导式
squares = [x2 for x in range(10)] # 生成平方列表
# 字典推导式
cube_dict = {x: x3 for x in range(5)} # {0:0, 1:1...}
# 生成器表达式(内存友好)
big_data = (x*2 for x in range(1000000)) #第5重:循环控制术
python
# break/continue妙用
for num in range(10):
if num == 3:
continue # 跳过3
if num == 7:
break # 提前终止
print(num)
# else子句(循环正常结束触发)
for n in range(2, 5):
if n % 2 == 0:
print(f"{n}是偶数")
else:
print("遍历完成!") #第6重:嵌套循环阵
python
# 二维列表遍历
matrix = [[1,2,3], [4,5,6], [7,8,9]]
for row in matrix:
for num in row:
print(num, end=' ')
print() # 换行
# 九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print(f"{j}×{i}={i*j}", end='\t')
print() #第7重:高阶迭代术
python
# 反向遍历
for fruit in reversed(fruits):
print(fruit) # 樱桃、香蕉、苹果
# 同时遍历索引和元素(不用enumerate)
for i in range(len(fruits)):
print(f"{i}:{fruits[i]}") #第8重:文件处理流
python
# 逐行读取文件
with open("magic_book.txt") as f:
for line_num, line in enumerate(f, 1):
print(f"{line_num}: {line.strip()}") #第9重:生成器秘术
python
# 自定义生成器
def fibonacci(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a+b
for num in fibonacci(1000):
print(num) # 生成斐波那契数列第4章 咒语封装:函数魔法
python
def 飞来咒(物品, 次数=3): # 默认参数
"""召唤物品的魔法(函数文档)"""
for _ in range(次数):
print(f"Accio {物品}!")
return f"{物品}已抵达"
result = 飞来咒("火弩箭", 次数=2)
print(result) # 输出:火弩箭已抵达
# 魔法石生成器(生成器)
def 数字魔法石(最大值):
num = 0
while num < 最大值:
yield num # yield就像暂停施法
num += 1
for 魔法石 in 数字魔法石(5):
print(f"获得{魔法石}号魔法石")第5章 魔法模块:标准库探险
python
# 时间转换器
import datetime
now = datetime.datetime.now()
print(f"当前时间:{now.strftime('%Y/%m/%d %H:%M')}")
# 随机占卜
import random
tarot = ["正位恋人", "逆位死神", "正位太阳"]
print("今日运势:", random.choice(tarot))
# 文件魔法书
with open("咒语大全.txt", "w", encoding="utf-8") as f:
f.write("荧光闪烁\n统统石化\n清水如泉")
with open("咒语大全.txt") as f:
print(f.read())第6章 综合实践:制作魔法日报
python
def 生成日报(日期, 头条新闻, 记者="预言家日报"):
版面 = f"""
✨{记者}✨
{日期} 星期{random.randint(1,7)}
--------------------
今日头条:{头条新闻}
今日星运:
{random.choice(["宜学习黑魔法防御", "忌挑衅斯内普教授", "幸运数字:7"])}
"""
return 版面
print(生成日报("2023-09-01", "救世主再现!哈利击败匈牙利树蜂"))💡 学习小贴士:
- 多动手实践,代码就像魔咒越用越熟练
- 善用print()调试,它是你的"摄神取念"
- 错误信息是学习的好帮手,不要害怕红色提示
- 记住:复制粘贴的代码就像别人的魔杖,自己敲才能建立连接
🎉 恭喜完成魔法启蒙!接下来可以:
- 探索requests库(网络魔法)
- 学习turtle库(绘画咒语)
- 尝试用pygame制作小游戏 记住:最好的魔法是持续实践!✨
print(''.join(list)) 为什么用点号.?
面向对象的方法调用
.join()是字符串类型(str)的方法,必须通过字符串实例调用。语法规则为:python"连接符".join(可迭代对象)''是一个空字符串实例(调用者).join()是方法名,属于字符串对象list是被操作的列表(必须包含字符串元素)
示例:
pythonfruits = ["apple", "banana", "cherry"] print(", ".join(fruits)) # 输出:apple, banana, cherry逗号
,的用途
逗号在Python中用于:- 分隔函数参数:
print(a, b, c) - 定义元组:
t = (1, 2, 3) - 多重赋值:
x, y = 1, 2
- 分隔函数参数:
拼接表格
| 方法 | 语法 | 性能 | 适用场景 | 注意事项 |
|---|---|---|---|---|
str.join() | "sep".join(list) | 高 | 快速拼接可迭代对象 | 元素必须为字符串 |
+ 拼接 | s1 + s2 + s3 | 低 | 少量字符串拼接 | 避免在循环中使用 |
print(*list, sep) | print(*list, sep) | 中 | 直接输出不保存结果 | 自动处理非字符串元素 |
f-string | f"{s1}{s2}{s3}" | 高 | 格式化字符串拼接 | Python 3.6+ 支持 |
FAQS
Q1:为什么 join() 属于字符串而不是列表?
- 因为连接符(如空字符串
''、逗号',')是字符串,逻辑上应由字符串提供拼接能力。
Q2:如何拼接非字符串列表?
- 先转换为字符串:python
nums = [1, 2, 3] print(''.join(map(str, nums))) # 输出:123
Q3:join() 可以用于其他可迭代对象吗?
- 可以!例如元组、集合、生成器:python
print(''.join(("a", "b", "c"))) # 元组 print(''.join({ "a", "b", "c" })) # 集合(顺序随机) print(''.join(str(x) for x in range(3))) # 生成器
