How to Write Your First Quantum Circuit in Python: A Beginner's Step-by-Step Guide

TL;DR · AI 摘要
用Python和Qiskit库可在普通笔记本上构建量子电路,无需量子计算机或物理学位。文章详解量子比特原理、贝尔态实验及代码实现步骤。
核心要点
- Qiskit库允许在普通Python环境中模拟量子电路
- 量子比特可同时处于0和1的叠加态(类似旋转的硬币)
- 贝尔态实验演示量子纠缠现象,是量子计算核心实验
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 量子电路Python实现
- 基础概念
- 量子比特叠加态
- 贝尔态与纠缠
- 实现步骤
- Qiskit安装
- 电路构建
- 模拟运行
- 应用领域
- 量子加密
- 药物发现
金句 / Highlights
值得收藏与分享的关键句。
量子比特像旋转的硬币,同时呈现正反面状态(叠加态)
Qiskit库提供模拟器,可在普通笔记本上运行量子算法
贝尔态实验验证量子纠缠,是量子计算核心原理之一
如何用 Python 编写你的第一个量子电路:初学者的分步指南
2026年6月30日
/
#量子计算
Casmir Onyekani
想象一下,你打开笔记本电脑,编写遵循量子物理定律的代码。听起来像科幻小说,对吧?
第一次听说量子计算时,我的想法也是一样的。我曾以为量子计算机是藏在秘密实验室里的机器。我想象着穿着白大褂的研究人员在价值数百万美元的设备上工作。
后来我发现了令人惊讶的事情:你可以在普通笔记本电脑上使用 Python 编写并运行第一个量子程序。
无需量子计算机。无需物理学位。无需高等数学。
只需要 Python。
在本教程中,你将学习如何使用 Python 和 Qiskit 构建第一个量子电路。
到教程结束时,你将理解什么是量子电路,量子比特如何工作,并学会创建量子计算中最著名的实验之一——贝尔态。
让我们开始吧。
目录
- 什么是量子计算?为什么 Python 开发者应该关注量子计算?
- 什么是量子电路?
- 以 Python 开发者视角解释量子门 X 门:量子版的电灯开关 经典示例 量子示例 H 门:旋转硬币的技巧示例 CX 门:让两个量子比特协同工作 如何设置你的 Python 环境
- 构建你的第一个量子电路 创建叠加态 用 CNOT 门创建纠缠态 测量量子比特 在量子模拟器上运行电路 你的完整贝尔态程序 Windows 用户常见 Qiskit Aer 错误 入门者常见错误
- 用直方图可视化结果
- 理解刚刚发生的一切
- 什么是贝尔态?为什么贝尔态重要
- 量子纠缠的实际应用 量子密码学 量子网络 药物发现 金融建模
- 初学者可尝试的实验 实验1:移除哈达玛门 实验2:增加测量次数 实验3:添加 X 门 实验4:创建三个量子比特
- 接下来你应该学习什么?构建更复杂的电路 探索真实量子硬件 学习量子算法
- 最后思考
什么是量子计算?
大多数软件开发者使用普通计算机进行开发,就像你手中的笔记本电脑、智能手机或游戏主机。
这些设备中的每一个都使用比特处理信息。一个比特一次只能有一个值:0 或 1,二者不可兼得。
量子计算机使用的是不同的东西。它们使用量子比特(qubit)。在被测量之前,量子比特可以同时表现为 0 和 1。
如果这听起来很奇怪,不用担心。第一次听到这个概念时,每个人都会觉得奇怪。
想象一枚硬币。当硬币平躺在桌子上时,它是正面或反面。这正是普通计算机比特的工作方式。现在,想象一下让硬币旋转。当它旋转时,会同时呈现出正反两面的模糊影像。这就是量子比特的工作原理。
这个解释并不完美,但对初学者来说非常有用。
这种特性使量子计算机能够以与普通计算机不同的方式解决某些类型的问题。
事实上,量子计算仍处于早期阶段,但几年前人工智能也是如此。早期学习的开发者往往能获得优势。
Python 已成为量子编程最受欢迎的语言之一,因为它简单且易于入门。许多主流量子平台都提供 Python 库,包括:
- IBM Qiskit
- Google Cirq
- Amazon Braket
在这些选项中,Qiskit 是最容易上手的平台之一。这也是本教程将使用的工具。
如果你已经了解变量、函数和基础 Python 语法,那么你已经可以开始学习了。
什么是量子电路?
如果你曾经构建过 Web 应用程序,可能对工作流很熟悉。
例如:
用户点击按钮
↓
验证数据
↓
发送请求
↓
返回响应量子电路的工作方式类似。它不是处理用户输入,而是处理量子比特(qubits)。
量子电路本质上是一系列作用于量子比特的指令。
简化来看:
创建量子比特
↓
应用量子门
↓
测量结果
↓
显示输出核心来看,量子电路只是涉及初始化量子比特、执行操作以及测量结果。
以 Python 开发者视角解释量子门
如果你曾经编写过 Python 代码,可能经常需要改变变量值。
light = False
light = not light
print(light)输出:
Truenot 运算符改变了值。它将 False 转换为 True。
量子计算机也需要改变值的方法。但它们不使用 not 这样的运算符,而是使用称为 量子门 的结构。
可以将量子门视为告诉量子比特该做什么的特殊指令。
就像 Python 有:
not+-*
量子计算有:
- X 门
- H 门
- CX 门
让我们逐一理解它们。
X 门:量子版的电灯开关
想象你房间里的电灯开关。
当开关关闭时:OFF。按下开关后变为:ON。再次按下又变为:OFF。
开关在两个状态之间不断切换,这正是 X 门的作用。
经典示例
0 → 1
1 → 0量子示例
qc.x(0)这意味着:对量子比特 0 应用 X 门。
如果量子比特 0 之前表现得像 0,现在会表现得像 1。
如果之前表现得像 1,现在会变成 0。
可以将 X 门视为量子版的电灯开关或 Python 的 not 运算符。
H 门:旋转硬币的魔法
现在事情变得有趣了。想象我把一枚硬币放在桌子上,它只能是正面(Heads)或反面(Tails),对吗?
这就是普通计算机的工作方式。比特只能是 0 或 1。
现在想象我旋转这枚硬币。在旋转过程中,你能否确定在某一刻它是正面?
不能。
能否确定它是反面?
还没落地。它处于一个特殊状态,两种结果都有可能。
这就是理解 H 门(或哈达玛门)作用的最简单方式。
示例
qc.h(0)这告诉 Qiskit 将量子比特 0 置于叠加态。
用初学者语言来说,量子比特不再局限于 0 或 1。当测量时,它现在有概率成为 0 或 1。想象它像一枚正在旋转等待落地的硬币。
#### 应用 H 门前:
0#### 应用 H 门后:
0 和 1 都有可能这个概念是量子计算机如此强大的原因之一。
与其一次只探索一种可能性,他们可以同时处理多种可能性。
CX门:让两个量子位协同工作
CX门(也称为CNOT门,受控非门)与X门和H门不同,因为它操作两个量子位而不是一个。
为了理解它的运作方式,让我们用一个简单的现实例子来说明。
想象你和朋友在玩一个游戏。游戏开始前,你们达成一个规则。
如果你举手,你的朋友必须立即改变当前的动作。如果他站着,就坐下;如果坐着,就站起来。
但如果你保持手放下,你的朋友则保持原状,不做任何动作。
请注意一个重要点:你的朋友的行为完全取决于你的动作,他们不会自行决定。
这与CX门的工作方式非常相似。
在Qiskit中使用方式如下:
qc.cx(0, 1)这行代码告诉Qiskit:"使用量子位0来控制量子位1的行为。"
在这种情况下:
量子位0 → 控制量子位
量子位1 → 目标量子位控制量子位做出决策,目标量子位做出响应。
#### 以下是背后的运作机制:
- 如果控制量子位为0,不会发生任何变化。目标量子位保持原状。
- 如果控制量子位为1,目标量子位会发生翻转:0变为1。
可以把控制量子位想象成给员工下达指令的经理。员工不会随机行动,只有在收到经理的信号时才会改变行为。
单独使用时,CX门已经很有用。
但当我们将其与Hadamard门结合时,会发生令人惊叹的事情。两个量子位会以一种称为"纠缠"的特殊方式连接起来。你将在本教程的后续部分学习相关内容。现在,是时候用Python实践所学知识了。
如何设置Python环境
现在进入有趣的部分。让我们准备你的机器。在继续之前,请确保本地计算机已安装Python。本教程建议使用Python 3.12.8或3.13.8版本,这些版本与你将安装的所有依赖项兼容良好。
3.12.8#### 步骤1:创建新项目文件夹
创建一个名为quantum-python的文件夹,然后在VS Code中打开它。
#### 步骤2:创建虚拟环境
在终端中(这里使用Git Bash),运行:
python -m venv .venv然后激活它。在Windows系统使用Git Bash时,运行:
source .venv/Scripts/activate在MacOS/Linux系统中运行:
source .venv/bin/activate#### 步骤3:安装Qiskit
运行:
pip install qiskit qiskit-aer matplotlib这将安装:
- Qiskit
- 量子模拟器
- 图表可视化工具
#### 步骤4:验证安装
创建一个名为test.py的文件,添加以下内容:
import qiskit
print(qiskit.__version__)运行:
python test.py如果看到版本号,说明安装成功。
恭喜!你已正式进入量子编程的世界。
构建你的第一个量子电路
创建一个名为bell_state.py的新文件。这个文件将包含你的第一个量子程序。
现在需要导入Qiskit。添加以下代码:
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2)这导入了QuantumCircuit类。
这意味着什么?QuantumCircuit(2, 2)创建了2个量子位和2个经典位。
经典位将在测量后存储最终结果。
让我们打印电路:
print(qc)输出结果为:
q_0:
q_1:
c:现在,什么都没有发生。电路是空的。你即将改变这一现状。
创建叠加态
让我们添加第一个量子门:qc.h(0) 。
这将对量子比特 0 应用一个哈达玛门(Hadamard Gate)。
你的代码变为:
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2)
qc.h(0)
print(qc)───
q_0: ┤ H ├
───
q_1: ─────
c: 2/═════H 门将量子比特 0 置入叠加态。这是量子行为的起点。
你已正式创建了第一个量子态。
使用 CNOT 门创建纠缠
到目前为止,我们只处理了一个量子比特。现在让我们做些更有趣的事情。
你可以让两个量子比特协同工作。这种现象被称为纠缠。
如果你在科技 Twitter 上花费过时间,或看过 YouTube 上的科普视频,可能听说过人们将纠缠称为“远距离幽灵作用”。
不要纠结于这个花哨的名称,只需专注于代码。
在你的哈达玛门下方添加这一行:qc.cx(0, 1) 。
你的程序现在应该如下所示:
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
print(qc)───
q_0: ┤ H ├─■──
─── ─┴─
q_1: ────┤ X ├
───
c: 2/══════════但究竟发生了什么?
当我们应用 H 门时,第一个量子比特进入叠加态。随后 CNOT 门将第二个量子比特与第一个关联起来。现在这两个量子比特表现为一个连接系统,而非两个独立的信息片段。它们共享一个量子态。
想象两枚完美同步的骰子。每次掷出时,它们总能显示相同的数字。
听起来不可能,对吧?因为在经典计算中这确实不可能实现。
但量子力学遵循不同的规则。
测量量子比特
目前我们的量子比特处于量子态,但计算机无法直接显示量子态。
我们需要进行测量。测量将量子信息转换为经典信息。
添加以下行:qc.measure([0, 1], [0, 1]) 。
你的代码现在变为:
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
print(qc)这一行代码意味着:
- 测量量子比特 0
- 将结果存储在经典比特 0 中
以及:
- 测量量子比特 1
- 将结果存储在经典比特 1 中
此时我们的电路已经完成。现在需要执行它。
在量子模拟器上运行电路
这里是最酷的部分。你不需要量子计算机。你的笔记本电脑可以模拟一个。
在你的电路下方创建一个新部分:
from qiskit_aer import AerSimulator
simulator = AerSimulator()
result = simulator.run(
qc,
shots=1024
).result()
counts = result.get_counts()
print(counts)让我们逐步解释。
#### 你安装的 AerSimulator 是什么?
AerSimulator 是 Qiskit 的本地量子模拟器。
它不需要将你的程序发送到真实量子设备,而是在你的计算机上运行所有内容。
这对于学习和实验非常理想,而且完全免费。
#### 什么是 Shots?
注意这一行:shots=1024 。
一个 Shot 是量子电路的一次执行。量子结果是概率性的,这意味着单次执行不足以说明问题。
运行 1024 次执行让我们能够观察整体模式。
把它想象成抛硬币。一次抛掷无法告诉你任何信息,但一千次抛掷会揭示概率分布。
此时,你的文件应如下所示:
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])
simulator = AerSimulator()
result = simulator.run(
qc,
shots=1024
).result()
counts = result.get_counts()
print(counts)保存文件。
运行:python bell_state.py .
你应该看到类似以下内容:
{
'00': 504,
'11': 520
}你的数字会略有不同,这是正常现象。重要的是你看到:00 和 11 。
你永远不应该看到:01 或 10
这就是证明纠缠正在起作用的线索。
Windows 用户常见错误:Qiskit Aer 导入失败
如果你使用 Windows,导入 AerSimulator 时可能会遇到以下错误:
ImportError: DLL load failed while importing controller_wrappers:
The specified module could not be found.这通常不是代码的问题。这是因为你的系统未安装 Microsoft Visual C++ Redistributable 2015–2022 (x64)。
解决方法:
- 从微软官网下载并安装 Microsoft Visual C++ Redistributable 2015–2022 (x64)。
- 重启电脑。
- 重新打开终端并运行程序。
安装运行时后,AerSimulator 应该可以成功导入,你可以继续教程的其余部分。
初学者常见错误
如果代码立即无法运行,请不要惊慌。每个人都会遇到错误。
常见问题包括:
#### 模块未找到
ModuleNotFoundError解决方案:pip install qiskit .
#### 虚拟环境错误
确保运行脚本前已激活虚拟环境。
#### 仿真器缺失
安装:pip install qiskit-aer .
#### 缩进错误
记住 Python 对空格敏感。仔细检查你的缩进。
用直方图可视化结果
开发者喜欢可视化反馈。图表能让量子行为更易于理解。你可以创建一个:
from qiskit.visualization import plot_histogram
import matplotlib.pyplot as plt
plot_histogram(counts)
plt.show()你的 bell_state.py 文件现在应如下所示:
# 导入依赖
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram
import matplotlib.pyplot as plt
# 创建包含 2 个量子比特和 2 个经典比特的量子电路
qc = QuantumCircuit(2, 2)
# 使用 Hadamard 门和 CNOT 门创建 Bell 态(纠缠)
qc.h(0)
qc.cx(0, 1)
# 将所有量子比特测量到对应的经典比特中
qc.measure([0, 1], [0, 1])
# 初始化 Aer 仿真器并执行 1024 次测量
simulator = AerSimulator()
result = simulator.run(
qc,
shots=1024
).result()
# 获取测量结果
counts = result.get_counts()
# 打印原始文本结果并绘制直方图
print(counts)
plot_histogram(counts)
plt.show()再次运行程序,应该会出现直方图。
它看起来会像这样:
完整项目文件夹可以从 GitHub 获取。
理解刚刚发生的事情
让我们暂停一下,因为刚刚发生了一件不可思议的事情。
- 你无需拥有量子计算机,仅用笔记本电脑上的 Python 就创建了纠缠。
- 第一个量子比特进入叠加态。
- 第二个量子比特与它建立了关联。
当测量发生时,两个量子比特要么同时变为0,要么同时变为1。结果是随机的,但它们总是保持一致。这就是关键的观察点。
什么是贝尔态?
贝尔态是量子计算中最著名的例子之一。它通常是初学者学习的第一个实验。
为什么?因为它展示了两个重要的量子概念:
- 叠加
- 纠缠
没有贝尔态,许多量子算法将无法存在,因为:
- 量子通信系统依赖它们。
- 量子密码学依赖它们。
- 未来的量子网络依赖它们。
贝尔态基本上是量子计算的“Hello World”。每个量子开发者迟早都会遇到它。
为什么贝尔态很重要
乍看之下,这个实验似乎很简单:两个量子比特、两个门和几行Python代码。但背后的原理却意义重大。
贝尔态的作用远不止展示纠缠。研究人员将其作为基准实验,用于验证量子硬件是否能可靠地创建和测量纠缠态。
例如,贝尔态电路通常在超导量子处理器上执行,以评估硬件在运行更复杂的量子算法之前准备纠缠态的准确性。
贝尔态在量子通信中也扮演着重要角色,并作为更大量子算法的构建模块。
可以将它们比作编程中的函数。单个函数可能看起来很小,但复杂的应用程序是由成千上万个函数构建而成。
同样的原理也适用于这里。大型量子系统是由更小的量子操作构建而成的。
量子纠缠的实际应用
初学者经常会问:“我什么时候才能真正用到这些?”
这是一个合理的问题。
以下是一些实际例子。
量子密码学
传统加密依赖数学难题,而量子密码学则依赖物理定律,确保任何试图拦截数据的行为都会改变量子态,从而使窃听行为立即被发现。
量子网络
开发量子互联网技术的研究人员正在大量利用量子纠缠,以实现跨越长距离的量子设备连接。
药物研发
量子计算机最终可能比经典计算机更精确地模拟分子。这将帮助研究人员发现新药、改进材料并理解化学反应。
金融建模
大型金融机构正在探索量子算法用于:
- 投资组合优化
- 风险分析
- 市场模拟
该领域仍在发展中,但其潜力巨大。
初学者可以尝试的实验
学习量子计算的最佳方式,与开发者学习编程的方式完全相同:
- 打破规则
- 进行实验
- 修改代码
- 观察结果
让我们尝试几个简单的实验。
实验1:移除哈达玛门
删除:qc.h(0),然后重新运行电路。发生了什么变化?
观察输出结果。你认为为什么会这样?
实验2:增加测量次数
将:shots=1024 改为 shots=100000。
再次运行模拟。注意结果如何变得更加均衡。这是概率在起作用。
实验3:添加X门
在CNOT门之前插入:qc.x(1)。
运行电路。
在研究新的输出分布时,尝试在运行代码前预测结果。
实验4:创建三个量子比特
更改:将 QuantumCircuit(2, 2) 改为 QuantumCircuit(3, 3)。
你能构建更大的纠缠系统吗?进行实验,亲自看看。
接下来你应该学习什么?
你现在已经构建了第一个量子电路。这是一个重要的里程碑。
通过 IBM 量子平台,你可以探索以下精彩的学习方向:
- Y 门
- Z 门
- S 门
- T 门
构建更大的电路
尝试:
- GHZ 态
- 量子隐形传态
- Deutsch 算法
探索真实量子硬件
IBM 允许开发者在实际的量子计算机上运行电路。这是现代编程中最令人兴奋的体验之一。
学习量子算法
熟悉电路后,可以探索:
- Grover 算法
- Shor 算法
- 量子傅里叶变换
最后想法
几年前,量子计算似乎遥不可及,似乎只属于物理学家和研究人员。
如今,这种状况已经改变。如果你会 Python,你已经拥有了进入量子开发的路径。
在本教程中,你学习了:
- 什么是量子计算
- 量子比特与经典比特的区别
- 量子门的作用
- 如何安装 Qiskit
- 如何创建贝尔态
- 如何模拟量子电路
- 如何可视化结果
- 为什么纠缠如此重要
最重要的是,你编写了第一个量子程序。这就是每个量子开发者起步的方式。
一个电路。一次实验。一个由好奇心驱动的问题。
现在打开你的编辑器,修改代码。打破现有结构。尝试新的门操作。开始亲自探索量子世界。
我是一名热爱教学与写作的软件开发者。
如果你读到这里,请感谢作者以表达你的支持。说声谢谢。
免费学习编程。freeCodeCamp 的开源课程已帮助超过 40,000 人成为开发者。立即开始
ADVERTISEMENT