Автор: Богданов А
Уровень: Сложный
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, для которых выполняются все условия:
в строке три числа повторяются ровно два раза;
эти три числа образуют стороны прямоугольного треугольника.
В ответе запишите одно число.
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
is
для сравнения строк и чисел в Python
? #tpy🔍 Для небольших чисел и коротких строк Python часто использует кэш, поэтому is может иногда возвращать True.
Но для больших чисел или длинных строк это не гарантировано - объекты могут быть разными.
a = 256
b = 256
print(a is b) # True (кэш)
x = "hello"
y = "hello"
print(x is y) # True (кэш)
a = 1000
b = 1000
print(a is b) # False (разные объекты)
==
для сравнения значений, is
- только чтобы проверить, ссылаются ли переменные на один объект!Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5❤3🔥3
Автор: Джобс Е.
Уровень: Базовый
Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [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
.env
, и зачем он нужен? #tpyЕсли вы когда-либо работали с проектами на
Python
, Node.js
или других языках, то, скорее всего, сталкивались с файлами .env
. Но что они из себя представляют?В нем хранятся важные настройки: ключи API, пароли, настройки базы данных и другие конфиденциальные данные.
🔒 Почему это удобно?
- Безопасность: секретные данные не хранятся прямо в коде, их легко исключить из системы контроля версий.
- Гибкость: можно легко менять настройки между разными окружениями - тестовым, продакшеном и локальной разработкой.
- Удобство: все важные переменные сосредоточены в одном месте, их легко найти и обновить.
.env
- это безопасный способ хранения конфиденциальной информации, если он используется локально и не попадает в публичные источники.⚠️ Ведь его публичное размещение - серьёзная уязвимость!
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤4❤🔥2🔥2
17799
#kege по информатике #ЕГЭ8Автор: В. Зарянкин
Уровень: Средний
Все четырёхбуквенные слова, в составе которых могут быть только русские буквы А, Р, Г, У, М, Е, Н, Т, записаны в алфавитном порядке и пронумерованы начиная с 1.
Вот начало списка:
1. АААА
2. АААГ
3. АААЕ
4. АААМ
5. АААН
...
Под каким номером в списке идёт последнее слово, в котором все буквы различны и все символы располагаются в алфавитном порядке?
from itertools import *
s = sorted('АРГУМЕНТ')
for n, p in enumerate(product(s, repeat=4), 1):
word = ''.join(p)
if len(word) == len(set(word)):
if list(word) == sorted(word):
print(n)
Ответ: 2424
from itertools import *
- Импорт всех функций из модуля itertools (в данном случае используется product)
s = sorted('АРГУМЕНТ')
- Создание отсортированного списка букв из слова "АРГУМЕНТ": ['А', 'Г', 'Е', 'М', 'Н', 'Р', 'Т', 'У']
for n, p in enumerate(product(s, repeat=4), 1):
- Цикл по всем возможным комбинациям букв длиной 4 (с повторами)
- product(s, repeat=4) генерирует декартово произведение списка s на себя 4 раза
- enumerate добавляет нумерацию, начиная с 1
word = ''.join(p)
- Объединение кортежа p в строку (слово из 4 букв)
if len(word) == len(set(word)):
- Проверка, что все буквы в слове уникальны (длина слова равна длине множества его букв)
if list(word) == sorted(word):
- Проверка, что буквы в слове идут в алфавитном порядке (слово равно своему отсортированному варианту)
print(n)
- Если оба условия выполнены, выводится номер текущей комбинации
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3👍2❤1
Примеры кодов для задач 9, 17, 24, 26, 27 из ЕГЭ:
for M in open('9.txt'):
M = [int(i) for i in M.split()]
print(M)
M = [int(i) for i in open('17.txt')]
print(M)
s = open('24.txt').readline()
Считываем только первую строку файла.
ans = []
for M in open('26.txt'):
M = [int(i) for i in M.split()]
ans.append(M)
Сохраняем каждую строку как список чисел, а потом собираем всё в общий список.
f = open('27.А.txt').readlines()[1:]
for M in f:
M = [float(i.replace(',','.')) for i in M.split()]
x, y = M[0], M[1]
print(x, y)
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍5❤3🔥3❤🔥2
Автор: Яндекс учебник
Уровень: Средний
Определите количество строк таблицы, содержащих числа, для которых выполнены все условия:
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
❤🔥4🔥2
📎 list - это изменяемый упорядоченный список. Можно добавлять, удалять, менять элементы. Например:
fruits = ['яблоко', 'банан', 'апельсин']📎 📎 tuple - неизменяемая последовательность. Отлично подходит, когда нужно зафиксировать набор данных:
coordinates = (10, 20)📎 📎 set - множество уникальных элементов. Быстро искать, удалять дубликаты:
unique_numbers = {1, 2, 3}📎 📎 dict - словарь, отображение ключей на значения. Очень удобно для хранения пар "ключ-значение":
person = {'имя': 'Анна', 'возраст': 25}📎 ❄️ frozenset - неизменяемое множество, его нельзя менять после создания. Используется там, где нужен "жёсткий" набор данных. frozenset([1, 2, 3, 4])➡️ frozenset({1, 2, 3, 4})🔼 🔽 deque - двусторонняя очередь из модуля collections. Быстро добавлять и удалять элементы с обоих концов:
from collections import deque⚙️ d = deque() - инициализировать элементами из любого итерируемого объекта (список, кортеж и т. д.).
Технологии телеграмма не стоят на месте, поэтому обращаю ваше внимание, что мы часто используем инструмент "цитата". Кликайте на цитату выше, чтобы открыть текст для чтения
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥3🔥2
Автор: О. Лысенков
Уровень: Средний
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится восьмеричная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если восьмеричная запись начинается на 5, то все двойки в записи меняются на единицы, а все единицы меняются на двойки после к числу приписывается 11 слева;
б) если восьмеричная запись начинается не на 5, то к записи справа приписывается 10, а первый разряд полученной записи заменяется на 2.
Укажите максимальное число N, для которого результатом работы алгоритма является наибольшее число R, меньшее 1354.
L = []
for n in range(1, 10000):
s = f'{n:o}' # s = oct(n)[2:]
if s[0] == '5':
s = s.replace('2', '*')
s = s.replace('1', '2')
s = s.replace('*', '1')
s = '11' + s
else:
s = s + '10'
s = '2' + s[1:] # а первый разряд полученной записи заменяется на 2.
r = int(s, 8)
if r < 1354:
L.append((r, n))
print(max(L))
Ответ: 61
· Создаем пустой список для хранения пар (результат, исходное число)
· Перебираем числа n от 1 до 9999
· Преобразуем число n в восьмеричную систему счисления (без префикса '0o')
· Проверяем, начинается ли восьмеричная запись с цифры 5
· Временно заменяем все цифры 2 на символ '*' (чтобы избежать конфликта при следующих заменах)
· Заменяем все цифры 1 на 2
· Заменяем временные символы '*' обратно на 1 (фактически меняем местами 1 и 2)
· Добавляем в начало строки две единицы '11'
· Если восьмеричная запись НЕ начинается с 5
· Добавляем в конец строки '10'
· Заменяем первую цифру полученной строки на 2
· Преобразуем полученную строку s обратно в десятичное число, интерпретируя ее как восьмеричную
· Проверяем, что результат r меньше 1354
· Добавляем в список пару (результат r, исходное число n)
· Находим и выводим максимальную пару в списке (сравнение происходит сначала по r, затем по n)
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥3❤3🔥1
zip()
в Python? #tpyОна берет по одному элементу из каждого итерируемого объекта и создает кортеж из них.
names = ['Анна', 'Борис']
scores = [85, 90]
result = list(zip(names, scores))
print(result)
[('Анна', 85), ('Борис', 90)]
- Можно объединять любое количество итерируемых объектов.
- Если длины объектов отличаются,
zip()
остановится на минимальной длине.- параллельной обработки списков,
- создания словарей,
- объединения данных и многого другого.
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥2 2🔥1
Автор: Основная волна 11.06.25
Уровень: Средний
Пусть М - сумма минимального и максимального простых натуральных делителей целого числа, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие 5 400 000, в порядке возрастания и ищет среди них такие, для которых М больше 60 000 и является палиндромом, т.е. одинаково читается слева направо и справа налево.
В ответе запишите в первом столбце
таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце - соответствующие им значения М.
def prime(x):
if x <= 1:
return False
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True
def d(x):
a=[]
for i in range(2, int(x**0.5)+1):
if x%i==0:
a+=[i, x//i]
return sorted(set(a))
k=0
for i in range(5400001, 10**10):
a=[j for j in d(i) if prime(j) == True]
if len(a)>0:
M=min(a)+max(a)
if M>60000:
if str(M)[::-1] == str(M):
print(i, M)
k += 1
if k==5:
break
Ответ:
5400042 900009
5400420 90009
5400866 158851
5406116 1351531
5406420 90109
· Объявление функции для проверки, является ли число простым
· Проверяем, если число меньше или равно 1
· Числа ≤ 1 не являются простыми
· Перебираем возможные делители от 2 до квадратного корня из x
· Проверяем, делится ли x на i без остатка
· Если нашли делитель, число не простое
· Если делителей не найдено, число простое
· Объявление функции для нахождения всех делителей числа x
· Создаем пустой список для делителей
· Перебираем числа от 2 до квадратного корня из x
· Проверяем, является ли i делителем x
· Добавляем в список сам делитель i и парный ему делитель x//i
· Возвращаем отсортированный список уникальных делителей
· Счетчик найденных чисел
· Бесконечный цикл начиная с 5 400 001
· Создаем список простых делителей числа i
· Проверяем, что есть хотя бы один простой делитель
· Вычисляем M как сумму минимального и максимального простого делителя
· Проверяем, что M больше 60 000
· Проверяем, является ли M палиндромом (читается одинаково в обе стороны)
· Выводим число i и значение M
· Увеличиваем счетчик найденных чисел
· Проверяем, найдено ли уже 5 чисел
· Прерываем цикл после нахождения 5 подходящих чисел
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3🔥1