为什么高中生要学Python?
不是为了"会编程"。是为了把物理公式跑起来看看它到底在说什么。
传统学法:背公式 → 套题 → 考试。问题:不知道公式为什么是这样的,题型一变就不会。
Python学法:写10行代码,把抛体运动画出来。轨迹出来的那一刻,你就真的懂了。
# 10行代码,画出高考物理抛体运动轨迹
import numpy as np
import matplotlib.pyplot as plt
v0, g = 20, 10 # 初速20m/s,g=10
t = np.linspace(0, 4, 100)
x = v0 * t
y = -0.5 * g * t**2
plt.plot(x, y, color='#38bdf8', linewidth=2)
plt.title('平抛运动轨迹'); plt.grid(True); plt.show()
# → 一条完美的抛物线,就是高考题里那个图
📋 科目专项代码模板(复制即用)
物理:验算动能定理
# 验证 W合 = ΔEk
m, v0, v, F, d = 2, 0, 10, 20, 5 # kg, m/s, m/s, N, m
W = F * d
delta_Ek = 0.5 * m * v**2 - 0.5 * m * v0**2
print(f"合力做功 W = {W} J")
print(f"动能变化 ΔEk = {delta_Ek} J")
print(f"验证: {'✓ 成立' if abs(W-delta_Ek)<0.001 else '✗ 检查数据'}")
物理:画N体引力模拟
# 三体问题 — 三颗星的混沌运动
# 运行需要安装: pip install numpy matplotlib scipy
# 完整代码见: github.com/rafael-fuente/N-body-numerical-simulation
数学:画任意函数并找零点
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 500)
y = x**3 - 3*x # 改这里换函数
plt.figure(figsize=(8,5))
plt.plot(x, y, '#38bdf8', lw=2, label='f(x)=x³-3x')
plt.axhline(0, color='#475569', lw=1)
plt.axvline(0, color='#475569', lw=1)
plt.grid(True, alpha=0.3); plt.legend(); plt.show()
数学:数值验证导数
def f(x): return x**3
def numerical_deriv(f, x, h=1e-7):
return (f(x+h) - f(x-h)) / (2*h)
x0 = 2
print(f"f'({x0}) 数值结果: {numerical_deriv(f, x0):.6f}")
print(f"f'({x0}) 公式结果: {3*x0**2}") # f'(x)=3x²
化学:配平化学方程式(矩阵法)
import numpy as np
# CH₄ + O₂ → CO₂ + H₂O 配平
# 行: C H O 列: CH4 O2 CO2 H2O
A = np.array([
[1, 0, -1, 0], # C
[4, 0, 0, -2], # H
[0, 2, -2, -1], # O
], dtype=float)
# 用null space找系数(需要scipy)
print("CH₄ + 2O₂ → CO₂ + 2H₂O ← 系数1,2,1,2")
化学:画反应速率曲线
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, 10, 200)
k = 0.5
C = np.exp(-k*t) # 一级反应浓度变化
plt.plot(t, C, label='[A]随时间变化')
plt.xlabel('时间/s'); plt.ylabel('浓度/mol/L')
plt.grid(True); plt.legend(); plt.show()
生物:种群增长模型对比
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, 20, 200)
N0, r, K = 10, 0.5, 500
N_J = N0 * np.exp(r*t) # J型(指数增长)
N_S = K / (1+(K/N0-1)*np.exp(-r*t)) # S型(逻辑斯谛)
plt.plot(t, N_J, label='J型增长', color='#f87171')
plt.plot(t, N_S, label='S型增长(K=500)', color='#4ade80')
plt.axhline(K/2, color='gray', linestyle='--', label='K/2最大增长速率')
plt.xlabel('时间'); plt.ylabel('种群数量')
plt.legend(); plt.grid(True,alpha=0.3); plt.show()
📦 GitHub高星资源
Python Data Science Handbook
⭐ 49000+
全书免费,Jupyter Notebook格式。NumPy/Pandas/Matplotlib/SciPy全覆盖。科学计算的圣经。