Метод
.append()
используется для добавления элемента в конец списка. Пример: my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # Вывод: [1, 2, 3, 4]
Можно реализовать через конкатенацию (склеивание) списков:
my_list = [1, 2, 3]
my_list += [4]
print(my_list) # Вывод: [1, 2, 3, 4]
Метод
.reverse()
изменяет порядок элементов в списке на обратный. Пример: my_list = [1, 2, 3, 4]
my_list.reverse()
print(my_list) # Вывод: [4, 3, 2, 1]
Можно записать по другому через срез:
my_list = [1, 2, 3, 4]
my_list = my_list[::-1]
print(my_list) # Вывод: [4, 3, 2, 1]
Метод
.count()
возвращает количество вхождений заданного элемента в список. Пример:my_list = [1, 2, 2, 3, 4, 2]
count_of_twos = my_list.count(2)
print(count_of_twos) # Вывод: 3
Метод .
remove()
удаляет первое вхождение указанного элемента из списка. Пример:my_list = [1, 2, 3, 2, 4]
my_list.remove(2) # первая найденная двойка
print(my_list) # Вывод: [1, 3, 2, 4]
Можно удалить элемент через его индекс используя
del
:my_list = [1, 2, 3, 2, 4]
del my_list[1] # индекс удаляемого элемента
print(my_list) # Вывод: [1, 3, 2, 4]
Метод
.index()
возвращает индекс первого вхождения заданного элемента в списке. Пример:my_list = [1, 2, 3, 2, 4]
index_of_two = my_list.index(2)
print(index_of_two) # Вывод: 1
Метод
.sort()
сортирует элементы списка по возрастанию (по умолчанию) или в обратном порядке, если передан аргумент reverse=True
. Пример:my_list = [4, 1, 3, 2]
my_list.sort()
print(my_list) # Вывод: [1, 2, 3, 4]
my_list.sort(reverse=True)
print(my_list) # Вывод: [4, 3, 2, 1]
Скажу честно я не любитель этого метода, считаю, что удобнее будет использовать функцию
sorted()
:my_list = [4, 1, 3, 2]
my_list = sorted(my_list)
print(my_list) # Вывод: [1, 2, 3, 4]
my_list = sorted(my_list, reverse=True)
print(my_list) # Вывод: [4, 3, 2, 1]
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
#kege #yandex
#reshu #statgrad
#polyakov
#ЕГЭ1 #ЕГЭ10 #ЕГЭ19
#ЕГЭ2 #ЕГЭ11 #ЕГЭ20
#ЕГЭ3 #ЕГЭ12 #ЕГЭ21
#ЕГЭ4 #ЕГЭ13 #ЕГЭ22
#ЕГЭ5 #ЕГЭ14 #ЕГЭ23
#ЕГЭ6 #ЕГЭ15 #ЕГЭ24
#ЕГЭ7 #ЕГЭ16 #ЕГЭ25
#ЕГЭ8 #ЕГЭ17 #ЕГЭ26
#ЕГЭ9 #ЕГЭ18 #ЕГЭ27
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
down()
опускает перо черепахи, позволяя ей рисовать на экране.import turtle as t
t.down()
t.forward(100)
t.done()
up()
поднимает перо черепахи, останавливая рисование.import turtle as t
t.down()
t.forward(100)
t.up()
t.forward(50)
t.done()
dot(size, color)
рисует точку заданного размера (size) и цвета (color) в текущей позиции черепахи.import turtle as t
t.dot(10, "red")
t.done()
screensize(width, height)
устанавливает размеры экрана в пикселях. Это определяет размер доступной области для рисования.import turtle as t
t.screensize(800, 600)
t.done()
tracer(n, delay)
управляет скоростью отрисовки черепахи. n задает количество шагов отрисовки, а delay - задержку между шагами.import turtle as t
t.tracer(3, 100)
t.done()
done()
ожидает закрытия окна черепахи перед окончанием программы.import turtle as t
t.done()
Эти функции помогают управлять рисованием и настройками экрана при работе с библиотекой Turtle в Python.
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
👏8 8 6
Пару слов об авторе канала, давайте знакомиться!
#kege #yandex
#reshu #statgrad
#polyakov
Информатика ЕГЭ | itpy
Программирование на Python | itpy
Информатика ОГЭ | itpy
Hey Student!
Please open Telegram to view this post
VIEW IN TELEGRAM
4 5 5 4❤2
Автор: Калинин А.
Уровень: Средний
Определите количество строк таблицы, для которых одновременно выполняются следующие условия:
1. Удвоенный квадрат минимального из чисел, содержащихся в строке, больше, чем произведение двух других чисел, ни одно из которых не равно максимальному числу
2. В строке содержится хотя бы два одинаковых числа
Особенное внимание уделите условию: "ни одно из которых не равно максимальному числу"
cnt = 0
for s in open('files/9.csv'):
M = sorted([int(x) for x in s.split(',')])
if len(set(M)) < 4:
if (2 * M[0] ** 2) > (M[1] * M[2]):
if M[1] != max(M) and M[2] != max(M):
print(M)
cnt += 1
print(cnt)
# Ответ: 43
cnt = 0
Инициализируем счётчик cnt, который будет хранить количество подходящих списков чисел.
for s in open('files/9.csv'):
Открываем файл '9.csv' для чтения и начинаем цикл по каждой строке файла.
M = sorted([int(x) for x in s.split(',')])
Разделяем строку s по запятым, преобразуем каждую часть в целое число и сортируем полученный список в M.
if len(set(M)) < 4:
Проверяем, содержит ли множество уникальных элементов списка M меньше 4 значений.
if (2 * M[0] ** 2) > (M[1] * M[2]):
Проверяем, выполняется ли неравенство: двойной квадрат первого элемента больше произведения второго и третьего элементов.
if M[1] != max(M) and M[2] != max(M):
Проверяем, не является ли максимальный элемент списка среди второго или третьего элементов.
print(M)
Если все условия выполнены, выводим список M.
cnt += 1
Увеличиваем счётчик cnt на 1, так как мы нашли подходящий список.
print(cnt)
По завершении цикла выводим общее количество подходящих списков, хранящихся в cnt.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7 3❤🔥2 1
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Кабанов А
Уровень: Средний
Автомат обрабатывает натуральное число N (1≤N≤255) по следующему алгоритму:
1. Строится восьмибитная двоичная запись числа N.
2. Удаляются средние четыре цифры.
3. Полученное число переводится в десятичную запись и выводится на экран.
Каково наименьшее число, большее 130, которое после обработки автоматом даёт результат 10?
Интересная задачка из-за своего "прикольного" среза, ну и метод .zfill(8) не оставит равнодушными!)
for n in range(130+1, 255+1):
s = f'{n:b}'.zfill(8)
s = s[:2] + s[-2:]
r = int(s, 2)
if r == 10:
print(n)
break
# Ответ: 134
for n in range(130+1, 255+1):
- Начинаем цикл с числами от 131 до 255 (включительно).
s = f'{n:b}'.zfill(8)
- Преобразуем число n в двоичную строку и дополняем её нулями слева до 8 символов.
s = s[:2] + s[-2:]
- Извлекаем первые две и последние две цифры двоичной строки и объединяем их.
r = int(s, 2)
- Преобразуем получившуюся строку обратно в десятичное число.
if r == 10:
- Проверяем, равен ли результат 10.
print(n)
- Если условие выполнено, выводим значение n.
break
- Завершаем выполнение цикла после нахождения первого подходящего числа.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5 4 1
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Яндекс учебник
Уровень: Простая
Артём составляет пятибуквенные слова из букв своего имени. Он ввёл два правила: не повторять буквы в одном слове и не ставить гласные первыми и последними одновременно.
Сколько таких слов может составить Артём?
Обратите внимание на этот if, интересная штука и не самая очевидная.
from itertools import *
cnt = 0
for p in permutations('Артём'.upper()):
word = ''.join(p)
if not(word[0] in 'АЁ' and word[-1] in 'АЁ'):
cnt += 1
print(cnt)
# Ответ: 108
from itertools import *
- Импортируются все функции и классы из модуля itertools, который предоставляет инструменты для создания итераторов.
cnt = 0
- Инициализируется переменная cnt, которая будет использоваться для подсчета количества подходящих перестановок.
for p in permutations('Артём'.upper()):
- Запускается цикл for, который проходит по всем возможным перестановкам заглавных букв слова "Артём".
word = ''.join(p)
- Перестановка p преобразуется в строку и сохраняется в переменной word.
if not(word[0] in 'АЁ' and word[-1] in 'АЁ'):
- Проверяется, начинается ли слово с буквы из множества 'АЁ' и заканчивается ли также на букву из того же множества; если это не так, выполняется следующий шаг.
cnt += 1
- Увеличивается счетчик cnt на 1, если условие в предыдущей строке истинно.
print(cnt)
- Выводится общее количество перестановок, удовлетворяющих заданному условию.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9🔥4 3🤔1
Автор: Джобс Е.
Уровень: Средний
Катя составляет 5-буквенные слова из букв слова АПРЕЛЬ и упорядочивает их в обратном алфавитном порядке.
Вот начало списка:
1. ЬЬЬЬЬ
2. ЬЬЬЬР
3. ЬЬЬЬП
4. ЬЬЬЬЛ
5. ЬЬЬЬЕ
6. ЬЬЬЬА
7. ЬЬЬРЬ
Сколько слов, оканчивающихся на Ь, запишет Катя, если заполнит список до 387 позиции?
from itertools import *
n = 0
cnt = 0
for p in product(sorted('АПРЕЛЬ', reverse=True), repeat=5):
word = ''.join(p)
n += 1
if word[-1] == 'Ь':
cnt += 1
print(word)
if n >= 387:
break
print(cnt)
# Ответ: 65
from itertools import *
- Импортируются все функции и классы из модуля itertools, который предоставляет инструменты для создания итераторов.
n = 0
- Инициализируется переменная n для подсчета количества сгенерированных комбинаций.
cnt = 0
- Инициализируется переменная cnt для подсчета слов, заканчивающихся на букву 'Ь'.
for p in product(sorted('АПРЕЛЬ', reverse=True), repeat=5):
- Запускается цикл for, который создает все возможные кортежи длиной 5 из букв слова 'АПРЕЛЬ', отсортированных в обратном порядке.
word = ''.join(p)
- Кортеж p преобразуется в строку word.
n += 1
- Увеличивается счетчик n на 1, чтобы отслеживать количество проверенных слов.
if word[-1] == 'Ь':
- Проверяется, заканчивается ли слово word на букву 'Ь'.
cnt += 1
- Увеличивается счетчик cnt, если слово заканчивается на 'Ь'.
print(word)
- Выводится слово, если оно заканчивается на 'Ь'.
if n >= 387:
- Проверяется, достигло ли количество проверенных слов значения 387.
break
- Завершается цикл, если количество проверенных слов достигает 387.
print(cnt)
- Выводится общее число слов, заканчивающихся на 'Ь'.
Наша Stepik подборкой задач
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9🔥3❤1🫡1 1
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Яндекс Учебник
Уровень: Средний
Определите количество пятизначных чисел в 14-ричной системе счисления, в записи которых цифры из набора ABCD не стоят рядом с нечётными цифрами из набора: 13579.
Обратите внимание! Что условия, которые требуют замены элементов строки через num = num.replace(x, 'A') необходимо ставить в самом конце программы! Чтобы не повредить все предыдущие условия задач подобного типа.
from itertools import *
cnt = 0
for p in product('0123456789ABCD', repeat=5):
num = ''.join(p)
if num[0] != '0':
for x in 'ABCD':
num = num.replace(x, 'A')
for x in '13579':
num = num.replace(x, '1')
if '1A' not in num and 'A1' not in num:
cnt += 1
print(cnt)
# Ответ: 217888
from itertools import *
Импортируем все функции из модуля itertools, который предоставляет различные функции для работы с итераторами.
cnt = 0
Инициализируем переменную cnt для подсчета количества допустимых комбинаций.
for p in product('0123456789ABCD', repeat=5):
Используем функцию product для генерации всех возможных комбинаций длиной 5 из символов '0123456789ABCD'.
num = ''.join(p)
Объединяем текущую комбинацию p в строку num.
if num[0] != '0':
Проверяем, чтобы первая цифра num не была '0', чтобы избежать некорректных чисел.
for x in 'ABCD':
Запускаем цикл, чтобы заменить все символы 'A', 'B', 'C' и 'D' на 'A'.
num = num.replace(x, 'A')
Заменяем текущий символ x на 'A' в строке num.
for x in '13579':
Запускаем цикл, чтобы заменить все нечетные цифры '1', '3', '5', '7' и '9' на '1'.
num = num.replace(x, '1')
Заменяем текущий символ x на '1' в строке num.
if '1A' not in num and 'A1' not in num:
Проверяем, чтобы строка num не содержала подстроки '1A' или 'A1'.
cnt += 1
Если предыдущая проверка прошла успешно, увеличиваем счетчик cnt на 1.
print(cnt)
Выводим значение cnt, что соответствует количеству допустимых комбинаций.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8👍3🔥3
Автор: Яндекс Учебник
Уровень: Средний
Определите количество пар элементов последовательности, сумма которых превосходит каждую из сумм соседних пар, при этом все три суммы являются положительными.
В ответе запишите количество найденных пар чисел, затем минимальное из произведений элементов таких пар.
В данной задаче под парой подразумевается два идущих подряд элемента последовательности. Под соседними парами подразумеваются четыре идущих подряд элемента последовательности.
Интересный пример, так как нам приходится рассматривать не только пару/тройку символов, как в основных задачах, но сразу 6-ку символов!
M = [int(s) for s in open('files/17.txt')]
R = []
for i in range(len(M)-5):
x, y, z, w, r, t = M[i:i+6]
if (z + w) > (x + y) and (z + w) > (r + t):
if z + w > 0 and x + y > 0 and r + t > 0:
R.append(z * w)
print(len(R), min(R))
# Ответ: 610 -123157359
M = [int(s) for s in open('files/17.txt')]
- Открывает файл 'files/17.txt', читает его и преобразует каждую строку в целое число, создавая список M.
R = []
- Создает пустой список R для хранения результатов, которые удовлетворяют условиям.
for i in range(len(M)-5):
- Запускает цикл по элементам списка M, при этом гарантируется, что для каждой итерации хватит шести элементов.
x, y, z, w, r, t = M[i:i+6]
- Извлекает шесть подряд идущих элементов из списка M, начиная с позиции i, и присваивает их переменным x, y, z, w, r и t.
if (z + w) > (x + y) and (z + w) > (r + t):
- Проверяет, что сумма z и w больше суммы x и y, а также больше суммы r и t.
if z + w > 0 and x + y > 0 and r + t > 0:
- Дополнительно проверяет, что каждая из сумм z + w, x + y и r + t больше нуля.
R.append(z * w)
- Если условия выполнены, добавляет произведение z и w в список R.
print(len(R), min(R))
- Выводит количество элементов в списке R и минимальное значение из этого списка.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8👍5🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Шастин Л
Уровень: Средний
Текстовый файл состоит из символов A, C, D, F и O.
Определите максимальное количество идущих подряд символов, среди которых не более 5 пар вида согласная + гласная в прилагаемом файле.
Чуть более сложная версия прошлой задачи.
s = open('0. files/24.txt').readline()
s = s.replace('C', 'D').replace('F', 'D')
s = s.replace('O', 'A')
s = s.split('DA')
maxi = 0
for i in range(len(s)-5):
r = 'A' + 'DA'.join(s[i:i+6]) + 'D'
maxi = max(maxi, len(r))
print(maxi)
Ответ: 27
s = open('24.txt').readline()
Открываем файл '0. files/24.txt' и читаем первую строку.
s = s.replace('C', 'D').replace('F', 'D')
Заменяем символы 'C' и 'F' на 'D' во всей строке.
s = s.replace('O', 'A')
Заменяем символ 'O' на 'A' во всей строке.
s = s.split('DA')
Разделяем строку на подстроки по разделителю 'DA' и сохраняем результат в список.
maxi = 0
Инициализируем переменную maxi для хранения максимальной длины найденной строки.
for i in range(len(s)-5):
Запускаем цикл по индексам списка s от 0 до длины списка минус 5.
r = 'A' + 'DA'.join(si:i+6) + 'D'
Формируем новую строку r, соединяя элементы списка s от текущего индекса i до i+5 с добавлением 'A' в начале и 'D' в конце.
maxi = max(maxi, len(r))
Обновляем значение maxi, если длина текущей строки r больше предыдущего значения maxi.
print(maxi)
Выводим максимальную длину строки, соответствующую условиям задачи.
Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥9 5 4 1
Автор: Рогов.А
Уровень: Сложный
В файле электронной таблицы в каждой строке содержатся шесть натуральных чисел. Определите количество строк таблицы, для которых выполнены оба условия:
в строке хотя бы одно число повторяется дважды (ровно 2 раза);
каждое из повторяющихся дважды (ровно 2 раза) чисел превышает каждое неповторяющееся.
Опасная задача потому что автор учитывает ситуацию, когда список uncopied пустой, что может вызывать ошибку при использовании функции max().
cnt = 0
for s in open('0. files/9.csv'):
M = sorted([int(x) for x in s.split(',')])
copied = [x for x in M if M.count(x) == 2]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied) > 0:
if len(uncopied) == 0:
maxi = 0
else:
maxi = max(uncopied)
if min(copied) > maxi:
cnt += 1
print(cnt)
Ответ: 665
cnt = 0
- Создаём переменную-счётчик cnt и инициализируем её нулём.
- Будет хранить количество строк, удовлетворяющих условию.
for s in open('0. files/9.csv'):
- Открываем файл '0. files/9.csv' для чтения.
- Циклом for перебираем каждую строку s из файла.
M = sorted([int(x) for x in s.split(',')])
- Разбиваем строку s по запятым с помощью s.split(',').
- Каждый элемент преобразуем в целое число int(x).
- Полученный список чисел сортируем по возрастанию sorted().
- Результат сохраняем в переменную M.
copied = [x for x in M if M.count(x) == 2]
- Создаём список copied с помощью генератора списка.
- Включаем в него элементы x из M, которые встречаются ровно 2 раза (M.count(x) == 2).
- Это будут числа-дубликаты в текущей строке.
uncopied = [x for x in M if M.count(x) == 1]
- Аналогично создаём список uncopied.
- Включаем элементы, которые встречаются только 1 раз (M.count(x) == 1).
- Это уникальные числа в текущей строке.
if len(copied) > 0:
- Проверяем, есть ли в строке дубликаты (длина списка copied больше 0).
- Если нет, то пропускаем дальнейшие проверки для этой строки.
if len(uncopied) == 0:
- Проверяем, есть ли в строке уникальные числа.
- Если уникальных чисел нет (uncopied пуст):
maxi = 0
- Устанавливаем maxi (максимальное уникальное число) в 0,
- так как сравнивать будем с минимальным дубликатом.
else:
- Если в строке есть уникальные числа:
maxi = max(uncopied)
- Находим максимальное число среди уникальных и сохраняем в maxi.
if min(copied) > maxi:
- Проверяем условие: минимальное число из дубликатов больше maxi.
- Если условие выполняется:
cnt += 1
- Увеличиваем счётчик подходящих строк на 1.
print(cnt)
- После обработки всех строк выводим итоговое значение счётчика cnt.
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥7❤🔥4 4❤2
Автор: ФИПИ
Уровень: Средний
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:
в строке только одно число повторяется трижды, остальные числа различны;
утроенный квадрат повторяющегося числа строки больше суммы квадратов её неповторяющихся чисел.
cnt = 0
for s in open('0. files/9.csv'):
M = [int(x) for x in s.split(';')]
copied = [x for x in M if M.count(x) == 3]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied) == 3 and len(uncopied) == 3:
if (copied[0] ** 2) * 3 > (sum([x**2 for x in uncopied])):
cnt += 1
print(cnt)
Ответ: 245
cnt = 0
# Инициализируем счетчик, который будет подсчитывать количество строк с нужными условиями
for s in open('0. files/9.csv'):
# Открываем файл и построчно считываем его содержимое в переменную s
M = [int(x) for x in s.split(';')]
# Разделяем строку по символу ';', преобразуем элементы в целые числа и создаем список M
copied = [x for x in M if M.count(x) == 3]
# Создаем список copied из элементов, которые встречаются в M ровно 3 раза (повторяющиеся элементы)
uncopied = [x for x in M if M.count(x) == 1]
# Создаем список uncopied из элементов, которые встречаются в M ровно 1 раз (уникальные элементы)
if len(copied) == 3 and len(uncopied) == 3:
# Проверяем, что у нас ровно 3 повторяющихся элемента и 3 уникальных элемента
if (copied[0] ** 2) * 3 > (sum([x**2 for x in uncopied])):
# Проверяем условие: квадрат первого повторяющегося элемента, умноженный на 3, больше суммы квадратов всех уникальных элементов
cnt += 1
# Если оба условия выполняются, увеличиваем счетчик на 1
print(cnt)
# Выводим итоговое значение счетчика
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥3👍2
Автор: Yandex учебник
Уровень: Базовый
Определите количество строк таблицы, для чисел которых выполнены оба условия:
- в строке есть ровно одно число, которое повторяется дважды, а остальные числа различны;
- максимальное число строки повторяется столько же раз, сколько и минимальное.
cnt = 0
for s in open('0. files/9.csv'):
M = [int(x) for x in s.split(';')]
copied2 = [x for x in M if M.count(x) == 2]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied2) == 2 and len(uncopied) == 5:
if M.count(max(M)) == M.count(min(M)):
cnt += 1
print(cnt)
Ответ: 349
cnt = 0
Инициализируем счётчик, который будет считать строки, удовлетворяющие условиям задачи.
for s in open('0. files/9.csv'):
Построчно читаем файл '0. files/9.csv'; каждая строка — это строка s.
M = [int(x) for x in s.split(';')]
Преобразуем строку в список целых чисел, разделяя элементы по символу ';'.
copied2 = [x for x in M if M.count(x) == 2]
Создаём список чисел, которые встречаются ровно дважды.
uncopied = [x for x in M if M.count(x) == 1]
Создаём список чисел, которые встречаются только один раз.
if len(copied2) == 2 and len(uncopied) == 5:
Проверяем, что два различных числа встречаются по два раза, а пять других — по одному разу.
if M.count(max(M)) == M.count(min(M)):
Проверяем, что максимальное и минимальное значения в строке встречаются одинаковое количество раз.
cnt += 1
Если оба условия выполнены, увеличиваем счётчик подходящих строк на 1.
print(cnt)
Выводим количество строк, удовлетворяющих условиям задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6🔥4❤1
Автор: Джобс Е.
Уровень: Простой
Сколько существует 4-разрядных четверичных чисел, в которых хотя бы одна цифра встречается не менее двух раз?
from itertools import *
cnt = 0
for p in product('0123', repeat=4):
num = ''.join(p)
if num[0] != '0':
if any(num.count(x) >= 2 for x in num):
cnt += 1
print(cnt)
Ответ: 174
from itertools import *
- Импорт всех функций из модуля itertools (используется функция product)
cnt = 0
- Инициализация счетчика для подсчета подходящих комбинаций
for p in product('0123', repeat=4):
- Цикл по всем возможным 4-значным комбинациям из цифр 0,1,2,3 (с повторами)
- Например: ('0','0','0','0'), ('0','0','0','1'), ..., ('3','3','3','3')
num = ''.join(p)
- Объединение кортежа символов в строку (например, ('1','2','3','0') → '1230')
if num[0] != '0':
- Проверка, что число не начинается с 0 (исключаем 4-значные числа с ведущим нулем)
if any(num.count(x) >= 2 for x in num):
- Проверка, что в числе есть хотя бы одна цифра, которая повторяется 2 или более раз
- any() возвращает True, если хотя бы один элемент удовлетворяет условию
cnt += 1
- Если оба условия выполнены (не начинается с 0 и есть повторяющиеся цифры), увеличиваем счетчик
print(cnt)
- Вывод общего количества подходящих комбинаций
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥14 8🫡5
Автор: Яндекс Учебник
Уровень: Базовый
В файле содержится последовательность целых чисел, каждое из которых находится в диапазоне от -20000 до
20 000. Определите количество пар элементов последовательности, сумма которых превосходит каждую из сумм соседних пар, при этом все три суммы являются положительными.
В ответе запишите количество найденных пар чисел, затем минимальное из произведений элементов таких пар.
В данной задаче под парой подразумевается два идущих подряд элемента последовательности. Под соседними парами подразумеваются четыре идущих подряд элемента последовательности.
Например, в последовательности 1 2 3 4 5 6 у пары (3, 4) соседние пары (1, 2) и (5, 6).
M = [int(s) for s in open('17.txt')]
R = []
for i in range(len(M)-5):
x, y, z, w, r, t = M[i:i+6]
if (z + w) > (x + y) and (z + w) > (r + t):
if z + w > 0 and x + y > 0 and r + t > 0:
R.append(z * w)
print(len(R), min(R))
Ответ: 610 -123157359
M = [int(s) for s in open('17.txt')]
- Читаем файл 17.txt, преобразуем каждую строку в целое число и сохраняем в список M.
R = []
- Создаем пустой список R для хранения результатов.
for i in range(len(M)-5):
- Цикл по индексам списка M с шагом 1, останавливаясь за 5 элементов до конца (чтобы хватило элементов для среза).
x, y, z, w, r, t = M[i:i+6]
- Берем срез из 6 последовательных элементов и распаковываем их в переменные x, y, z, w, r, t.
if (z + w) > (x + y) and (z + w) > (r + t):
- Проверяем, что сумма третьего и четвертого элементов (`z + w`) больше суммы:
- первых двух элементов (`x + y`)
- последних двух элементов (`r + t`)
if z + w > 0 and x + y > 0 and r + t > 0:
- Дополнительная проверка, что все три суммы положительные.
R.append(z * w)
- Если оба условия выполнены, добавляем произведение z * w в список R.
print(len(R), min(R))
- Выводим количество найденных подходящих комбинаций и минимальное значение среди произведений z * w.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3👍2🔥2
Автор: Яндекс Учебник
Уровень: Простой
ПОКА нашлось (44) ИЛИ нашлось (9299) ИЛИ нашлось (49)
заменить (49, 944)
заменить (44, 2)
заменить (9299, 4)
На вход приведённой выше программе поступает строка, которая начинается с цифры «4», а затем содержит n цифр «9» (3<n<1 000).
Определите, сколько различных строк может получиться в результате её работы.
my_set = set()
for n in range(4, 1000):
s = '4' + '9' * n
while '44' in s or '9299' in s or '49' in s:
s = s.replace('49', '944', 1)
s = s.replace('44', '2', 1)
s = s.replace('9299', '4', 1)
my_set.add(s)
print(len(my_set))
Ответ: 3
my_set = set()
- Создание пустого множества my_set для хранения уникальных строк
for n in range(4, 1000):
- Цикл по значениям n от 4 до 999 включительно
s = '4' + '9' * n
- Создание строки, состоящей из цифры '4' и n цифр '9' (например, при n=4: '49999')
while '44' in s or '9299' in s or '49' in s:
- Цикл выполняется, пока в строке есть хотя бы одна из подстрок: '44', '9299' или '49'
s = s.replace('49', '944', 1)
- Замена первой найденной подстроки '49' на '944'
s = s.replace('44', '2', 1)
- Замена первой найденной подстроки '44' на '2'
s = s.replace('9299', '4', 1)
- Замена первой найденной подстроки '9299' на '4'
my_set.add(s)
- Добавление полученной строки в множество (автоматически исключает дубликаты)
print(len(my_set))
- Вывод количества уникальных строк в множестве
Please open Telegram to view this post
VIEW IN TELEGRAM
2 6❤🔥5🔥3
Автор: Богданов А
Уровень: Сложный
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, для которых выполняются все условия:
в строке три числа повторяются ровно два раза;
эти три числа образуют стороны прямоугольного треугольника.
В ответе запишите одно число.
cnt = 0
for s in open('9.csv'):
M = [int(x) for x in s.split(',')]
copied_2 = [x for x in M if M.count(x) == 2]
if len(copied_2) == 6:
a, b, c = sorted(set(copied_2))
if a**2 + b**2 == c**2:
cnt += 1
print(cnt)
Ответ: 148
cnt = 0
- Создаем счетчик cnt и инициализируем его нулем. Он будет считать количество строк, удовлетворяющих условиям.
for s in open('9.csv'):
- Открываем файл 9.csv и построчно читаем его. Каждая строка сохраняется в переменную s.
M = [int(x) for x in s.split(',')]
- Разбиваем строку s по запятым, преобразуем каждый элемент в целое число и сохраняем в список M.
copied_2 = [x for x in M if M.count(x) == 2]
- Создаем список copied_2, содержащий элементы из M, которые встречаются ровно 2 раза.
if len(copied_2) == 6:
- Проверяем, что в списке copied_2 ровно 6 элементов (то есть 3 пары одинаковых чисел).
a, b, c = sorted(set(copied_2))
- Удаляем дубликаты из copied_2 (оставляем уникальные значения), сортируем их и присваиваем переменным a, b, c.
if a**2 + b**2 == c**2:
- Проверяем, выполняется ли теорема Пифагора для полученных чисел (являются ли они пифагоровой тройкой).
cnt += 1
- Если все условия выполнены, увеличиваем счетчик cnt на 1.
print(cnt)
- После обработки всех строк выводим значение счетчика cnt.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6❤5🔥4
Автор: Джобс Е.
Уровень: Базовый
Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [106732567; 152673836] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе само число и его наибольший нетривиальный делитель. Найденные числа расположите в порядке возрастания.
Например, для числа 2018 имеем следующие делители 2 и 1009. Поэтому результатом (не принимая во внимание количества делителей) будет пара чисел 2018 1009.
def divisors(x):
div = []
for j in range(2, int(x**0.5)+1):
if x % j == 0:
div.append(j)
div.append(x // j)
return sorted(set(div))
for x in range(106732567, 152673836+1):
if (x**0.5).is_integer():
d = divisors(x)
if len(d) == 3:
print(x, max(d))
Ответ:
112550881 1092727
131079601 1225043
141158161 1295029
def divisors(x):
- Объявление функции divisors, которая принимает число x и возвращает его делители.
div = []
- Создание пустого списка div для хранения делителей.
for j in range(2, int(x**0.5)+1):
- Цикл по возможным делителям от 2 до квадратного корня из x (включительно).
if x % j == 0:
- Проверка, делится ли x на j без остатка.
div.append(j)
- Если j - делитель, добавляем его в список.
div.append(x // j)
- Добавляем парный делитель (x разделить на j).
return sorted(set(div))
- Возвращаем отсортированный список уникальных делителей.
for x in range(106732567, 152673836+1):
- Основной цикл по числам от 106732567 до 152673836 включительно.
if (x**0.5).is_integer():
- Проверка, является ли x полным квадратом (квадратный корень - целое число).
d = divisors(x)
- Если x - полный квадрат, находим все его делители.
if len(d) == 3:
- Проверяем, что у числа ровно 3 делителя (не считая 1 и само число).
print(x, max(d))
- Если условие выполняется, выводим число и его наибольший делитель.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥2🔥1
Автор: Яндекс учебник
Уровень: Средний
Определите количество строк таблицы, содержащих числа, для которых выполнены все условия:
1. Четыре числа строки можно разбить на две пары чисел с равными суммами
2. Максимальное число строки меньше суммы трёх оставшихся чисел сумма чисел в строке чётна
from itertools import permutations
cnt = 0
for s in open('0. files/9.csv'):
M = [int(x) for x in s.split(';')]
if sum(M) % 2 == 0:
if max(M) < sum(M) - max(M):
if any(p[0] + p[1] == p[2] + p[3] for p in permutations(M)):
cnt += 1
print(cnt)
Ответ: 139
· Импортируем функцию permutations для генерации всех перестановок
· Создаем счетчик и инициализируем его нулем
· Открываем файл '9.csv' и построчно читаем его
· Разбиваем строку по символу ';' и преобразуем каждый элемент в целое число
· Проверяем, что сумма всех чисел в строке четная
· Проверяем, что максимальное число меньше суммы всех остальных чисел
· Проверяем, существует ли такая перестановка 4 чисел, где сумма первых двух равна сумме последних двух
· Если все три условия выполнены, увеличиваем счетчик на 1
· Выводим итоговое количество строк, удовлетворяющих всем условиям
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥2🔥1