Контрольная работа № 2

Синтаксис языка Python

Синтаксис

Конец строки является концом инструкции (точка с запятой не требуется).

Вложенные инструкции объединяются в блоки по величине отступов. Отступ может быть любым, главное, чтобы в пределах одного вложенного блока отступ был одинаков. И про читаемость кода не забывайте. Отступ в 1 пробел, к примеру, не лучшее решение. Используйте 4 пробела (или знак табуляции, на худой конец).

Вложенные инструкции в Python записываются в соответствии с одним и тем же шаблоном, когда основная инструкция завершается двоеточием, вслед за которым располагается вложенный блок кода, обычно с отступом под строкой основной инструкции.

Основная инструкция:

Вложенный блок инструкций

 

Несколько специальных случаев

Иногда возможно записать несколько инструкций в одной строке, разделяя их точкой с запятой:

a = 1; b = 2; print(a, b)

Но не делайте это слишком часто! Помните об удобочитаемости. А лучше вообще так не делайте.

Допустимо записывать одну инструкцию в нескольких строках. Достаточно ее заключить в пару круглых, квадратных или фигурных скобок:

if (a == 1 and b == 2 and

c == 3 and d == 4): # Не забываем про двоеточие

print('spam' * 3)

Тело составной инструкции может располагаться в той же строке, что и тело основной, если тело составной инструкции не содержит составных инструкций. Ну я думаю, вы поняли:). Давайте лучше пример приведу:

if x > y: print(x)

 

Пример программы.

Решение задачи из диагностической работы

 

Условие

По каналу связи передаётся последовательность положительных целых чисел, все числа не превышают 1000. Количество чисел равно N (N>2), но может быть очень велико. Затем передаётся контрольное значение последовательности – наибольшее число R, удовлетворяющее следующим условиям:

· R – сумма двух различных переданных элементов последовательности («различные» означает, что нельзя просто удваивать переданные числа; суммы различных, но равных по величине допускаются);

· При делении на 3 число R даёт остаток 1;

· Если такого числа R нет, то контрольное значение полагается равным 1.

В результате помех при передаче как сами числа, так и контрольное значение могут быть искажены.

Напишите эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет проверять правильность контрольного значения.

Мы не последуем их совету (не будем писать программу на Pascal), а напишем её на Python.

Вы увидите, насколько это легче и быстрее.

Решение

При делении на 3 число R даёт остаток 1. Из этого следует, что R может быть суммой или числа, дающего при делении на 3 остаток 0 с числом, дающим остаток 1, или двух чисел, дающих остаток 2.

Поэтому для вычисления R достаточно запоминать не все числа (их может быть много), а только 4: максимальное, делящееся на 3; максимальное, дающее остаток 1; и два наибольших числа, дающих остаток 2.

Решение, в общем-то, теперь очевидно. Далее я привожу программу с комментариями (без комментариев она заняла всего 25 строк).

# Язык программирования - Python 3

 

R_0 = R_1 = R_2_1 = R_2_2 = -2000

# Переменные, в которых мы будем хранить числа

 

N = int(input())

# Не будем проверять входные данные на корректность

# В ЕГЭ (но не в реальной жизни!) это не нужно

 

for i in range(N):

num = int(input())

if num % 3 == 0:

   R_0 = max(R_0, num)

   # Перезаписываем число на большее, если возможно

elif num % 3 == 1:

   R_1 = max(R_1, num)

elif num % 3 == 2:

   # Можно и else, но так более понятно

   if num > R_2_1:

       R_2_1, R_2_2 = num, R_2_1

       # Нужно хранить 2 наибольших числа, причём R_2_1 >= R_2_2

   elif num > R_2_2:

       R_2_2 = num

 

R = max(R_0 + R_1, R_2_1 + R_2_2)

# Это - вычисленное контрольное значение

if R < 0:

# Если такого числа нет, R будет отрицательно

# Так как все числа не превышают 1000

R = 1

print("Вычисленное контрольное значение: {}".format(R))

 

# Осталось проверить пришедшее число

result = int(input())

if R == result:

print("Контроль пройден")

else:

print("Контроль не пройден")

Такое решение набирает максимальный балл.

Следует прочитать PEP 8 — руководство по написанию кода на Python и Документирование кода в Python. PEP 257.

 

 


 


Контрольная работа № 3

 

Операторы Python

 

Инструкция if-elif-else, проверка истинности, трехместное выражение if/else

Условная инструкция if-elif-else (её ещё иногда называют оператором ветвления) - основной инструмент выбора в Python. Проще говоря, она выбирает, какое действие следует выполнить, в зависимости от значения переменных в момент проверки условия.

Синтаксис инструкции if

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

if test1:

state1

elif test2:

state2

else:

state3

Простой пример (напечатает 'true', так как 1 - истина):

>>> if 1:

... print('true')

... else:

... print('false')

...

true

Чуть более сложный пример (его результат будет зависеть от того, что ввёл пользователь):

a = int(input())

if a < -5:

print('Low')

elif -5 <= a <= 5:

print('Mid')

else:

print('High')

Конструкция с несколькими elif может также служить отличной заменой конструкции switch - case в других языках программирования.

Проверка истинности в Python

· Любое число, не равное 0, или непустой объект - истина.

· Числа, равные 0, пустые объекты и значение None - ложь

· Операции сравнения применяются к структурам данных рекурсивно

· Операции сравнения возвращают True или False

· Логические операторы and и or возвращают истинный или ложный объект-операнд

Логические операторы:

X and Y

Истина, если оба значения X и Y истинны.

X or Y

Истина, если хотя бы одно из значений X или Y истинно.

not X

Истина, если X ложно.

Трехместное выражение if/else

Следующая инструкция:

if X:

A = Y

else:

A = Z

довольно короткая, но, тем не менее, занимает целых 4 строки. Специально для таких случаев и было придумано выражение if/else:

A = Y if X else Z

В данной инструкции интерпретатор выполнит выражение Y, если X истинно, в противном случае выполнится выражение Z.

>>>

>>> A = 't' if 'spam' else 'f'

>>> A

't'


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: