No history yet

Введение в Python

Основы Python для квантовых вычислений

Python — это мощный и в то же время простой язык программирования. Благодаря своей читабельности и огромному количеству библиотек для научных вычислений он стал стандартом в области квантового программирования. Прежде чем мы погрузимся в мир кубитов и квантовых схем, нам нужно освоить базовые инструменты, которые предоставляет Python.

Lesson image

Переменные и типы данных

Представьте переменные как маркированные контейнеры для хранения информации. Вы даете контейнеру имя и кладете в него какие-то данные. В Python создать переменную очень просто: достаточно дать ей имя и присвоить значение с помощью знака равенства =.

Переменная

noun

Именованная область памяти для хранения данных, к которой можно обращаться по имени.

Данные бывают разных типов. Python автоматически определяет тип данных, которые вы помещаете в переменную. Вот основные из них:

Тип данныхОписаниеПример
intЦелые числаqubit_count = 5
floatЧисла с плавающей точкойprobability = 0.75
strТекстовые строкиstate = "entangled"
boolЛогические значения (Истина/Ложь)is_measured = True

Вы можете проверить тип любой переменной с помощью встроенной функции type().

# Создание переменных разных типов
qubit_count = 4
probability = 0.42
gate_name = "Hadamard"
is_superposition = True

# Вывод значений и их типов
print(qubit_count, type(qubit_count))
print(probability, type(probability))
print(gate_name, type(gate_name))
print(is_superposition, type(is_superposition))

Операторы и управляющие конструкции

Операторы — это символы, которые выполняют операции над переменными и значениями. Наиболее распространены арифметические операторы (+, -, *, /) и операторы сравнения (==, !=, <, >).

Часто в программах нужно принимать решения в зависимости от определенных условий. Для этого используются условные конструкции if, elif (сокращение от «else if») и else.

Конструкция if-elif-else позволяет вашему коду выполнять разные действия в зависимости от того, истинно ли определенное условие.

measurement = 1

if measurement == 1:
    print("Результат измерения: 1. Кубит в состоянии |1>.")
else:
    print("Результат измерения: 0. Кубит в состоянии |0>.")

Для повторения одного и того же блока кода несколько раз используются циклы. Самые популярные — for и while.

Цикл for отлично подходит для перебора элементов в последовательности (например, в списке), а while продолжает выполняться до тех пор, пока его условие истинно.

# Цикл for для применения операции к каждому кубиту
qubits = [0, 1, 2, 3]
for qubit in qubits:
    print(f"Применяем вентиль к кубиту {qubit}")

# Цикл while для ожидания завершения вычислений
shots_completed = 0
total_shots = 100
while shots_completed < total_shots:
    # какой-то код для выполнения вычисления
    shots_completed += 10
    print(f"Выполнено {shots_completed} из {total_shots} запусков.")

Функции

Функции — это именованные, многократно используемые блоки кода, которые выполняют определенную задачу. Они помогают сделать код более организованным, читаемым и эффективным. Вы можете передавать данные в функцию (в качестве аргументов) и получать результат обратно (через оператор return).

Для определения функции используется ключевое слово def.

# Определяем функцию для создания квантовой схемы
def create_bell_state(qc, q0, q1):
    """Создает состояние Белла на двух кубитах."""
    # qc - квантовая схема, q0, q1 - кубиты
    qc.h(q0)  # Применяем вентиль Адамара к первому кубиту
    qc.cx(q0, q1) # Применяем вентиль CNOT
    return qc

# Использование функции (пока псевдокод)
# my_circuit = QuantumCircuit(2)
# my_circuit = create_bell_state(my_circuit, 0, 1)
# print("Состояние Белла успешно создано.")

NumPy и Matplotlib: Инструменты для науки

В квантовых вычислениях мы постоянно работаем с векторами и матрицами. Библиотека NumPy (сокращение от Numerical Python) — это фундаментальный инструмент для научных вычислений в Python. Она предоставляет мощный объект для работы с многомерными массивами (матрицами) и набор функций для операций с ними.

Состояния кубитов, операторы и результаты измерений удобно представлять в виде массивов NumPy.

# Установка библиотеки: pip install numpy
import numpy as np

# Вектор состояния для одного кубита |0>
state_vector_0 = np.array([1, 0])

# Вектор состояния для одного кубита |1>
state_vector_1 = np.array([0, 1])

# Матрица оператора Паули-X (NOT gate)
pauli_x = np.array([
    [0, 1],
    [1, 0]
])

# Применение вентиля NOT к состоянию |0>
# Результатом будет состояние |1>
result_state = np.dot(pauli_x, state_vector_0)

print("Начальное состояние:", state_vector_0)
print("Матрица оператора X:", pauli_x)
print("Результат применения оператора:", result_state)

Когда мы получаем результаты квантовых вычислений, часто это вероятности или наборы данных, которые нужно как-то осмыслить. Matplotlib — это библиотека для создания статических, анимированных и интерактивных визуализаций.

С ее помощью можно строить гистограммы для отображения результатов измерений, графики функций и многое другое.

# Установка библиотеки: pip install matplotlib
import matplotlib.pyplot as plt
import numpy as np

# Результаты измерений (например, 1024 запуска схемы)
# Допустим, мы получили состояние '00' 500 раз и '11' 524 раза
states = ['00', '11']
counts = [500, 524]

# Создаем гистограмму
plt.bar(states, counts)
plt.xlabel('Состояния')
plt.ylabel('Количество измерений')
plt.title('Результаты измерения состояния Белла')
plt.show()

Освоив эти основы, вы готовы к тому, чтобы начать писать свои первые квантовые программы. Эти инструменты — переменные, циклы, функции и библиотеки — станут вашими надежными помощниками в путешествии по миру квантовых вычислений.

Quiz Questions 1/6

Какая из следующих строк кода создаст переменную типа float в Python?

Quiz Questions 2/6

Для какой задачи лучше всего подходит цикл for?