Внимание! Чтобы развернуть статью целиком жмите по ссылке Далее внизу поста.
Если нужен ролик, то пишите в Сферум, а пока выкладываю текстовое объяснение.
У вас на экзамене будет редактор Geany. Его особенность в том, что программу не запустить, пока не сохранишь. Но сохранять нужно, добавляя в конец имени файла .py (например, задача.py)
Любое задание этого типа состоит из трех частей:
- ввод чисел;
- фильтрация чисел;
- ответ на вопрос.
1. Ввод чисел (два случая)
В первом, сначала вводится количество чисел, а потом сами числа. Например, в этой задаче.
Напишите программу, которая в последовательности натуральных чисел определяет максимальное число, кратное 5. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, кратное 5. Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число — максимальное число, кратное 5.
В этом случае, используется цикл for:
n = int(input())
for i in range(n):
a = int(input())
В первой строчке в переменную n вводится количество чисел. Во второй, запускается цикл, который повторяется n раз. В третьей (которая внутри цикла), в переменную a последовательно вводятся числа из последовательности.
Во втором случае, сначала вводится последовательность чисел, пока пользователь не введет команду остановки ввода (чаще всего, 0). Например.
Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход натуральные числа, количество введенных чисел неизвестно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся на 4.
В этом случае используется цикл while:
a = int(input())
while a != 0:
a = int(input())
В первой строчке в переменную a вводится первое число последовательности. Во второй, запускается цикл, который повторяется неопределенное количество раз, пока в переменной а не запишут число 0. В третьей строчке (внутри цикла) в переменную a последовательно вводятся оставшиеся числа из последовательности.
2. Фильтрация чисел
В том же цикле, что написали в первом пункте, нужно отбросить все числа, которые ненужны для ответа на вопрос задачи. Это делается с помощью условия if. Все нужные числа записываем в заранее созданный список. Например, для первой задачи.
Напишите программу, которая в последовательности натуральных чисел определяет максимальное число, кратное 5. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, кратное 5. Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число — максимальное число, кратное 5.
Все добавленные строчки окрашены в красный.
s = []
n = int(input())
for i in range(n):
a = int(input())
if a % 5 == 0:
s.append(a)
В первой строчке создан пустой список s. Внутри цикла добавлено условие, которое выполняется, если остаток от деления на 5 числа в переменной а равняется нулю (иными словами, число кратно 5). Если условие выполнилось, то число из переменной а добавляется в список s.
Рассмотрим вторую задачу.
Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход натуральные числа, количество введенных чисел неизвестно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся на 4.
Все добавленные строчки окрашены в красный.
s = []
a = int(input())
while a != 0:
if a % 6 == 0 and a % 10 == 4:
s.append(a)
a = int(input())
В первой строчке создан пустой список s. Внутри цикла добавлено условие, которое выполняется, если остаток от деления на 6 числа в переменной а равняется нулю (иными словами, число кратно 6) и остаток деления числа на 10 равняется 4 (оканчивается на 4). Связка and означает, что условия должны выполняться одновременно. Если условие выполнилось, то число из переменной а добавляется в список s.
Обратите внимание, что в цикле while сначала отсеивается ранее введенное число и только потом запрашивается следующее, а в for сразу вводится число и проходит отсев в одном витке цикла.
В результате получается список заполненный только нужными числами.
Часто встречающиеся условия:
- a % 7 == 0 - число кратно 7 (если a % 2 == 0 - число четное)
- a % 10 == 7 - число оканчивается на 7 (a % 100 == 47 - число оканчивается на 47)
- a > 0 - положительное число (a >= 0 - неотрицательное число)
- 9 < a < 100 - двузначное число (99 < a < 1000 - трехзначное число)
3. Ответ на вопрос
Ответ выводится с помощью одной из функций списка через print.
Напишите программу, которая в последовательности натуральных чисел определяет максимальное число, кратное 5. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется число, кратное 5. Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число — максимальное число, кратное 5.
s = []
n = int(input())
for i in range(n):
a = int(input())
if a % 5 == 0:
s.append(a)
print(max(s))
Напишите программу, которая в последовательности натуральных чисел определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает на вход натуральные числа, количество введенных чисел неизвестно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введенные числа не превышают 30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся на 4.
s = []
a = int(input())
while a != 0:
if a % 6 == 0 and a % 10 == 4:
s.append(a)
a = int(input())
print(sum(s))
Часто используемые для ответа функции списка:
- len(s) - количество элементов списка
- sum(s) - сумма элементов списка
- min(s) - минимальный элемент списка
- max(s) - максимальный элемент списка
Особые случаи
Иногда попадаются задачи, в которых нужно выполнить чуть больше этапов. Рассмотрим парочку таких примеров.
Напишите программу для решения следующей задачи. Камера наблюдения регистрирует в автоматическом режиме скорость проезжающих мимо нее автомобилей, округляя значения скорости до целых чисел. Необходимо определить максимальную зарегистрированную скорость автомобиля. Если скорость хотя бы одного автомобиля была меньше 30 км/ч, выведите «YES», иначе выведите «N0».
Программа получает на вход число проехавших автомобилей N (1 < N < 30), затем указываются их скорости. Значение скорости не может быть меньше 1 и больше 300.Программа должна сначала вывести максимальную скорость, затем YES или NO.
В этой задаче нет фильтрации (в список записываем все числа), но зато числа нужно округлять и ответить на дополнительный вопрос.
s = []В четвертой строке используется float() вместо int() потому что int() отбрасывает дробную часть у чисел и нам не получится правильно их округлить. Так же, в этой строчке есть функция round(), она округляет так, как нас учили на математике, до целых чисел.
n = int(input())
for i in range(n):
a = round(float(input())):
s.append(a)
print(sum(s))
if min(s) < 30:
print('YES')
else:
print('NO')
В конце программы if, для ответа на дополнительный вопрос. Так как нам нужно узнать, есть ли среди скоростей меньше 30, то логично сравнить с 30 минимальную скорость в списке.
Напишите программу, которая в последовательности целых чисел определяет сумму двух наибольших и сумму двух наименьших. Программа должна вывести две этих суммы в указанном порядке. Программа получает на вход целые числа, количество введенных чисел не известно, последовательность чисел заканчивается числом 0 (0 — признак окончания ввода, не входит в последовательность). Количество чисел не превышает 1000. Введенные числа по модулю не превышают 30 000.
В последовательности не менее двух чисел.
В этой задаче тоже нет необходимости отсеивать числа, зато нужно найти ДВА минимальных и ДВА максимальных элемента. Тут min() и max() не помогут. Воспользуемся функцией sorted() Она сортирует элементы списка по возрастанию, тогда два первых элемента будут минимальными, а два последних максимальными.
s = []
a = int(input())
while a != 0:
s.append(a)
a = int(input())
sorted(s)
print(s[-1] + s[-2])
print(s[0] + s[1])
Напомню, что у каждого элемента есть свой номер и нумерация начинается с 0. Так же, можно нумеровать элементы с конца, тогда у последнего будет номер -1, у предпоследнего -2 и так далее.
Если остались вопросы, то пишите в сферум и/или освежите свою память по спискам вот тут.
Комментариев нет:
Отправить комментарий