Проверить программы онлайн · файлы остаются в браузере

Типы и числа — практикум

10 класс, углублённый уровень. Занятие третье: четыре типа данных, целые и вещественные числа, случайные числа и то, где каждый из них подводит.

План на пару. Сначала тренажёр: двенадцать коротких программ, ответ — что напечатает Python. Потом три своих программы: делители числа, зарплата курьера и серия бросков кубика. Проверяет их оболочка Проверка.bat из общей папки: она запускает программу на семи наборах данных. Интернет не нужен.

Часть 1. Тренажёр: что напечатает Python

Шесть типов задач, по две на каждый. Считать в уме или на бумаге: запустив программу, вы узнаете ответ, но не научитесь. Ответ — ровно то, что появится на экране: 2.0 и 2 — разные ответы, потому что это разные типы. Если программа упадёт с ошибкой, так и пиши: ошибка.

0 верно из 12

Часть 2. Четыре типа и четыре ловушки

ТипЧто хранитКак получитьЛовушка
intцелые, любого размера int("7"), a // b, round(x) у отрицательных // округляет вниз: -17 // 5 — это -4, а остаток 3
floatвещественные, ~16 верных знаков float("3.5"), a / b, round(x, 2) 0.1 + 0.2 не равно 0.3; на равенство не сравнивать
strстроки, в том числе из одного символа input(), str(5), кавычки "5" + "3" — это "53", а "5" + 3 — ошибка
boolTrue или False любое сравнение, bool(x) True + True — это 2; bool("0") — True

Переменная — это ярлык

В C++, Java и C# тип объявляют заранее: int x = 5; — и строку в x уже не положить. Это статическая типизация: ошибки типов ловятся до запуска. В Python тип принадлежит значению, а переменная — просто имя, привязанное к нему: после x = 5 можно написать x = "пять". Это динамическая типизация. Узнать тип значения — type(x).

Целые: деление с остатком

фрагмент программы — набери его сам

Тождество, которое держит всё: a == (a // b) * b + a % b. Отсюда цифры числа (n % 10 и n // 10) и проверка делимости: n % d == 0.

Вещественные: точность и округление

фрагмент программы — набери его сам

Дроби вроде 0.1 в двоичной системе бесконечны, как 1/3 в десятичной, и хранятся с округлением. Поэтому вещественные числа сравнивают через допуск: abs(a - b) < 0.000001, либо округляют до нужного знака: round(a, 2) == round(b, 2).

Случайные числа

Подключаем модуль так, чтобы звать функции по имени, без приставки: from random import *. После этого своим переменным нельзя давать имена функций — переменная seed затрёт функцию seed().

ВызовЧто даёт
randint(a, b)целое от a до b, оба конца включаются
randrange(a, b)целое от a до b−1, как range
random()вещественное от 0 включительно до 1 не включая
randrange(a, b, s)от a до b−1 с шагом s: 0, 5, 10, …
seed(число)задаёт начало: дальше числа при каждом запуске одни и те же

Случайности внутри компьютера нет: следующее число вычисляется из предыдущего по формуле, поэтому числа псевдослучайные. Начальное значение обычно берётся от часов, и запуски различаются. seed закрепляет начало — так повторяют тест, розыгрыш или ошибку.

Часть 3. Три программы

Задание 1 Делители

Заказ из код одинаковых коробок надо выложить прямоугольником — рядами по одинаковому числу коробок. Сколько коробок может быть в ряду? Столько, на сколько код делится нацело. Программа читает натуральное число код (не больше 10 000) и печатает все его делители по возрастанию через пробел, а второй строкой — сколько их.

Вход

12

Вывод

1 2 3 4 6 12
Делителей: 6

Проверяется: код в цикле, границы код. Это первый шаг к заданию 25 ЕГЭ — там перебирают делители точно так же.

Если застрял

Перебери все код от 1 до код и проверь каждое: код. Печатать в одну строку помогает код, а после цикла — пустой код, чтобы перейти на новую строку.

Проверь на бумаге края: у числа 1 один делитель, у 36 — девять (шестёрка считается один раз), у простого 97 — два. Если у тебя у 12 вышло пять делителей — посмотри, входит ли правая граница в код.

Задание 2 Зарплата курьера

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

Вход

35.5
10.0
3
4.2
3.5
2.3

Вывод

Пробег: 10.00 км
Заработок: 355.00 руб.
План выполнен

Проверяется: код, накопление суммы, формат код — и сравнение вещественных.

Если застрял

Сумму копи в цикле: код. Два знака после точки даёт только формат: код; код напечатает код, а не код.

Ловушка, ради которой это задание. Поездки 0.7 и 0.1, план 0.8. По арифметике план выполнен ровно. Но код в компьютере — это код, и код скажет «не выполнен». Оболочка подаст именно такие данные. Сравнивай с точностью до сотых: код, — либо с допуском: код.

Задание 3 Кубик

Программа читает два целых числа: начальное число код и количество бросков код. Перед бросками вызывается код — чтобы серию можно было повторить и проверить. Дальше кубик бросается код раз. Печатай три строки: сами броски через пробел, их сумму и сколько раз выпала шестёрка.

Вход

7
5

Вывод

Броски: 3 6 1 6 2   # числа у всех свои
Сумма: 18
Шестёрок: 2

Проверяется: код, код, границы диапазона, накопление суммы и счётчик. Правильного ответа у задания нет — оболочка проверяет, что бросков ровно код и все от 1 до 6, что сумма и число шестёрок сходятся с напечатанными бросками, что при одном начальном числе серия повторяется, а при другом — нет.

Если застрял

Бросок — это код. Печатать в одну строку помогает код, а после цикла пустой код — ровно как в первом задании с делителями. Сумму и счётчик шестёрок копи в переменных прямо в цикле:

фрагмент программы — набери его сам

Переменную с начальным числом не называй код: после код это имя функции, и код её затрёт — код упадёт с ошибкой.

Ловушка, ради которой это задание. Следи за границей: код шестёрку включает, а код — нет, она даёт только от 1 до 5. Оболочка подаст серию из сотни с лишним бросков: в ней обязаны встретиться все шесть граней, и кубик без шестёрки сразу виден.

Часть 4. Сдача

  1. Файлы zadanie1.py … zadanie3.py лежат в твоей папке, отладочные print из них убраны.
  2. В общей папке двойной щелчок по Проверка.bat.
  3. «Найти мои файлы» → «Проверить всё».
  4. Покажи учителю два экрана: тренажёр наверху этой страницы и итог оболочки.
Если вместо окна открылся текст программы — файл открылся в IDLE как код. Нажми F5, окно появится.

Оболочка показывает, на каких данных программа ошиблась и что должна была вывести. Это подсказка: исправляй и проверяй снова, попыток сколько угодно.

Подсказка: типы данных, числа и случайность

Четыре типа

типчто храниткак получитьловушка
intцелые любого размераint("7"), a // b, round(x) -17 // 5 = -4, -17 % 5 = 3: вниз, остаток от 0 до b−1
floatвещественные, ~16 знаковfloat("3.5"), a / b 0.1 + 0.2 ≠ 0.3; на равенство не сравнивать
strстроки; символ — строка длины 1input(), str(5) "5" + "3" = "53"; "5" + 3 — ошибка
boolTrue / Falseсравнения, bool(x) True + True = 2; bool("0") = True

В C++, Java, C# тип у переменной и объявляется заранее (статическая типизация). В Python тип у значения, переменная — ярлык: после x = 5 можно x = "пять" (динамическая). Узнать тип: type(x). Целые в Python не ограничены размером; в C++ int — 32 бита, около 2 миллиардов.

Целые

a == (a // b) * b + a % b — всегда, и для отрицательных. divmod(17, 5) даёт (3, 2). Цифры числа: n % 10 — последняя, n // 10 — отрезать её. Делимость: n % d == 0 — так перебирают делители (задание 25 ЕГЭ).

Вещественные

0.1 в двоичной системе — бесконечная дробь, хранится с округлением: 0.1 + 0.2 = 0.30000000000000004, 0.7 + 0.1 < 0.8. Сравнивать через допуск abs(a − b) < 1e-6 или округлять: round(a, 2). «/» всегда даёт float (6 / 3 = 2.0), «//» с вещественным — тоже float (7 // 2.0 = 3.0). round(x) → int, половина к чётному: round(2.5) = 2, round(3.5) = 4. int(x) отбрасывает дробную часть: int(-3.9) = -3. Формат f"{x:.2f}" меняет вид, а не число: 2.5 → "2.50".

Строки и логика

input() всегда строка: "5" * 3 = "555", "9" > "10" (сравнение посимвольно). int("5.0") — ошибка, сначала float(). True хранится как 1, False как 0; bool от нуля и пустой строки — False, от всего остального — True. 3 == 3.0 → True, "3" == 3 → False. Цепочка 1 < x < 10 — это 1 < x and x < 10.

Случайные числа

Подключение: from random import * — функции зовутся по имени. Своим переменным имена функций не давать: seed = … затрёт seed().

вызовчто даёт
randint(a, b)целое от a до b, оба конца включаются
randrange(a, b)от a до b−1, как range
random()вещественное от 0 включительно до 1 не включая
randrange(a, b, s)от a до b−1 с шагом s
seed(число)начало последовательности: запуски совпадают

Числа псевдослучайные: следующее считается из предыдущего по формуле. Без seed начало берётся от часов. seed нужен, чтобы повторить тест, розыгрыш или ошибку.

Материалы подготовлены с использованием технологий искусственного интеллекта.