📦 Репозиторий занятия 12

Урок 12. Цикл while

Как работать с репозиторием

Каждая карточка говорит, о чём файл, что он выводит и что в нём искать. Код виден прямо здесь: его можно скопировать одной кнопкой, скачать файл или открыть его целиком.

Маршрут изучения

  1. Прочитайте описание: по нему уже понятно, о чём файл и что он выведет.
  2. Предскажите вывод: сравните своё предположение со строкой «Что выводит».
  3. Запустите: скачайте файл или скопируйте код кнопкой и выполните его у себя.
  4. Измените: поменяйте одно условие или значение и объясните новый результат.

Файлы: рекомендуемый порядок

1
MarkdownРазбор концепции194 строк

Цикл while: break, continue, else и управляемый бесконечный цикл

less_07__while_else_break_continue__random/theory_01__while_else_break_continue.md

Начинает с базового синтаксиса while и разбора break/continue на парных примерах, включая антипример — continue перед i += 1, который зацикливает программу. Центральная и самая нетривиальная часть — блок else при while: выполняется только при естественном завершении цикла (без break), с двумя «вопросами на засыпку» без готового ответа, требующими проследить условие вручную. В конце — while True как управляемый бесконечный цикл с двумя практическими примерами выхода по вводу пользователя.

  • while условие: — базовый синтаксис и пример счётчика
  • break — прерывает цикл, continue — пропускает итерацию
  • Антипример: continue перед i += 1 — бесконечный цикл
  • else при while — выполняется только без break
  • Два «вопроса на засыпку» про else без готового ответа
  • while True: с break — управляемый бесконечный цикл, ввод числа или 'exit'/'stop'
Показать начало файла (194 строк всего)
## 1. Определение и базовый синтаксис цикла `while`

Цикл `while` выполняет блок кода до тех пор, пока условие остаётся истинным (`True`).  
Базовый синтаксис:

```
while условие:
    # блок кода
```

Пример:

```python
i = 1
while i <= 5:
    print(i, end=' ')
    i += 1


# 1 2 3 4 5
```

---

## 2. Операторы `break` и `continue`

* `break` — прерывает цикл полностью.
* `continue` — пропускает текущую итерацию и переходит к следующей.

### Пример с `break`

```python
i = 1
while i <= 5:
    if i == 3:
        break
    print(i, end=" ")
    i += 1

# 1 2
```

### Пример с `continue`

```python
i = 0
while i < 5:
    i += 1
    if i == 3:
        continue
    print(i, end=" ")

# 1 2 4 5
```

Число 3 пропущено!


### "Плохой" пример (анти-пример) с `continue`

…
Проверьте себя: В примере 3.4 (i = 10, while i < 0) выполнится ли блок else — и почему это не то же самое, что «цикл не сработал вообще»?
2
MarkdownРазбор концепции73 строк

Модуль random: генерация случайных чисел и seed для повторяемости

less_07__while_else_break_continue__random/theory_02__random.md

Таблица основных методов random (random(), randint(), randrange(), choice(), shuffle(), seed()) с примером и типичным выводом для каждого. Ключевая идея файла — псевдослучайность и фиксация через random.seed(n): показано, что один и тот же seed даёт один и тот же порядок чисел при каждом запуске, а разные seed — разные, но тоже воспроизводимые последовательности; перечислены практические случаи, когда нужна такая повторяемость.

  • random.random(), randint(a, b), randrange(start, stop, step)
  • random.choice(seq), random.shuffle(seq) — выбор и перемешивание
  • random.seed(n) — фиксация псевдослучайной последовательности
  • random.seed(42) в цикле while True — всегда одинаковый вывод
  • Смена seed на 45 — другая, но тоже повторяемая последовательность
  • Зачем нужна фиксированная случайность: отладка, эксперименты, обучение
Показать начало файла (73 строк всего)
# Модуль `random`

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

### Таблица популярных методов модуля `random`

| Метод                            | Описание                                                     | Пример кода                                    | Пример вывода |
|----------------------------------|--------------------------------------------------------------| ---------------------------------------------- | ------------- |
| `random()`                       | Случайное число от `0.0` (вкл) до `1.0` (не вкл)             | `import random; print(random.random())`        | `0.3744`      |
| `randint(a, b)`                  | Случайное целое от `a` до `b` (включая оба конца)            | `print(random.randint(1, 10))`                 | `3`           |
| `randrange(start, stop[, step])` | Случайное целое от `start`(вкл) до `stop`(не вкл) \[с шагом] | `print(random.randrange(0, 10, 2))`            | `6`           |
| `choice(seq)`                    | Случайный элемент из последовательности                      | `print(random.choice(['a','b','c']))`          | `'b'`         |
| `shuffle(seq)`                   | Перемешивание последовательности (на месте)                  | `lst=[1,2,3]; random.shuffle(lst); print(lst)` | `[3, 1, 2]`   |
| `seed(n)`                        | Установка зерна для повторяемости случайностей               | `random.seed(10); print(random.random())`      | `0.5714`      |

---

**Фиксированная случайность** — это способ сделать так,  
чтобы "случайные" результаты в программе ПОВТОРЯЛИСЬ(!) при каждом новом запуске программы.

В Python (и большинстве языков) генератор случайных чисел на самом деле является ПСЕВДОслучайным.

### Пример `random.randrange()`

#### `random.randrange(0, 9)`

Возможные варианты: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

#### `random.randrange(0, 9, 2)`

Возможные варианты: 0, 2, 4, 6, 8

### Пример `random.seed()`:

```python
import random

random.seed(42)          # Устанавливаем зерно = 42

while True:
    x = random.randint(1, 10)
    print(x, end=" ")
    if x == 10:
        break

# 2 1 5 4 4 3 2 9 2 10
```

Вывод ВСЕГДА будет одинаковым.

Если заменить "номер зерна", то при каждом запуске будет повторяться уже другой набор чисел.
```python
random.seed(45) 

# 5 7 8 5 2 5 6 1 2 8 1 2 5 2 5 1 10 
…
Проверьте себя: Если убрать random.seed(42) из примера с циклом, но оставить всё остальное — почему вывод перестанет повторяться при повторных запусках?