# 环境搭建 · 十分钟跑通第一个量子程序

> 装好 Python + Qiskit，写一个把量子比特置于叠加态、测量一千次的「Hello Quantum」，看到大约五五开的结果。这一章带你搭好本专栏全程要用的工具，并读懂一个量子程序的骨架。

- 作者：David（道雾轩）
- 专栏：写给程序员的量子计算（https://daiw.org/manual/quantum-computing.md）
- 最后更新：2026-07-14
- 原文：https://daiw.org/manual/quantum-computing/setup
- 转载与引用：请注明出处并附原文链接（https://daiw.org/about/copyright）

# 环境搭建 · 十分钟跑通第一个量子程序

学任何东西，先让它**跑起来**。这一章我们装好工具，写出第一个量子程序，看到它真实的输出——之后每一章的概念，都会是「照着敲、看着结果」。

## 装什么

我们用 **Qiskit**——IBM 开源的量子计算框架，Python 生态里最主流、文档最全的一个。装它只要一行：

```bash
pip install qiskit qiskit-aer
```

- **`qiskit`**：核心库，用来**搭量子线路**（写代码描述「对哪个 qubit 施加什么门」）。
- **`qiskit-aer`**：高性能**模拟器**。在你还没有量子计算机的时候（你现在肯定没有），用它在**普通电脑上模拟**量子程序的运行——这也是学习和调试量子算法最主要的方式。

<Callout type="info">
  **本专栏以 Qiskit 1.x / 2.x（2024 年后的版本）为准。** Qiskit 1.0 对 API 做过一次大改（比如删掉了老教程里常见的 `execute` 函数），网上很多旧代码跑不了。如果你照着别处的老代码报错，先 `pip show qiskit` 看看版本，再对照官方文档。本专栏的代码都用新 API。除了 Qiskit，同类框架还有 Google 的 **Cirq**、**PennyLane**、微软的 **Q#**——学会一个，其余触类旁通，因为它们描述的是**同一套量子计算规则**。
</Callout>

## Hello Quantum

第一个程序，我们让一个量子比特进入「既是 0 又是 1」的**叠加态**，然后测量它一千次：

```python
from qiskit import QuantumCircuit, transpile
from qiskit_aer import AerSimulator

# 1 个量子比特 + 1 个经典比特(用来存测量结果)
qc = QuantumCircuit(1, 1)
qc.h(0)             # 对 qubit 0 施加 H 门 → 进入叠加态
qc.measure(0, 0)    # 测量 qubit 0,结果存进经典比特 0

# 在模拟器上跑 1000 次
sim = AerSimulator()
result = sim.run(transpile(qc, sim), shots=1000).result()
print(result.get_counts())
```

跑一下，你会看到类似这样的输出：

```text
{'0': 508, '1': 492}
```

**大约一半 0、一半 1。** 这就是量子叠加最直观的样子：测量之前，这个 qubit 既不是确定的 0、也不是确定的 1；每次测量，它以约 50% 的概率给你一个 0 或一个 1。经典的比特绝不会这样——它要么是 0、要么是 1，测一千次结果全一样。

## 看看这条线路长什么样

Qiskit 能把线路画出来，`print(qc.draw())` 得到一张 ASCII 图：

```text
     ┌───┐┌─┐
  q: ┤ H ├┤M├
     └───┘└╥┘
c: 1/══════╩═
           0
```

从左到右就是**时间**：qubit `q` 先过一个 `H` 门，再被测量(`M`)，结果落到经典位 `c`。**量子线路(quantum circuit)就是量子程序的「源代码」**——一串作用在 qubit 上的操作，从左到右依次执行。之后我们写的每个程序，本质都是在搭这样一条线路。

## 一个量子程序的骨架

拆开上面的代码，任何量子程序都是这四步：

```mermaid
flowchart LR
  A["① 建线路<br/>QuantumCircuit(n)"] --> B["② 加量子门<br/>qc.h / qc.x / qc.cx …"]
  B --> C["③ 测量<br/>qc.measure"]
  C --> D["④ 在模拟器/真机上跑<br/>取回统计结果"]
```

1. **建线路**：声明要用几个 qubit（和存结果的经典位）。
2. **加门**：施加一系列**量子门**（下一站的主题），把 qubit 变到你要的状态。
3. **测量**：把量子状态「读」成经典的 0/1（测量很特殊，后面专门讲）。
4. **运行**：交给模拟器（或真机）跑很多次(`shots`)，因为结果是概率的，要靠**多次统计**才看得出规律。

<Callout type="info">
  注意第 4 步的 `shots=1000`——**为什么要跑一千次？** 因为量子测量的结果是随机的，跑一次只能得到一个 0 或一个 1，看不出「约五五开」这个规律。**必须重复很多次、统计频率**，才能观察到量子态的概率分布。这是量子编程和经典编程一个根本的体感差异：**你运行的不是一次确定的计算，而是一个概率实验，要靠采样去还原它。** [测量那章](https://daiw.org/manual/quantum-computing/measurement) 会把这件事讲透。
</Callout>

## 小结与下一章

工具装好了(`qiskit` + `qiskit-aer`)，第一个量子程序也跑通了：一个 H 门造出叠加，测量一千次得到约五五开。你也认识了量子程序的骨架——**建线路 → 加门 → 测量 → 采样统计**。

但我们还没真正搞懂：那个被 H 门「置于叠加」的量子比特，内部到底是个什么状态？它和经典 bit 的差别，用代码怎么**看见**？下一章，我们把 qubit 的状态直接打印出来，一探究竟。👉 [量子比特：把 qubit 的状态打印出来看](https://daiw.org/manual/quantum-computing/qubit)。

## 参考文献

- [1] Qiskit 官方文档.「Install Qiskit / Hello world.」https://docs.quantum.ibm.com/guides —— 安装与第一个程序。
- [2] Qiskit.「Migrate to Qiskit 1.0.」https://docs.quantum.ibm.com/migration-guides/qiskit-1.0 —— 新旧 API 差异（`execute` 被移除等）。
- [3] Nielsen & Chuang.《Quantum Computation and Quantum Information》—— 量子计算的经典教材（理论深入，可作长期参考）。
