Forwarded from Программирование на Python | itpy 💻
all() и any() в Python: просто о полезном #tpyВ задачах ЕГЭ (например, в номере 25) часто нужно проверять условия для всех или хотя бы одного элемента из набора. Python предлагает элегантные решения — встроенные функции
all() и any().all() — Проверка простого числаdef is_prime(x):
if x <= 1:
return False
return all(x % i != 0 for i in range(2, x))
print(is_prime(7)) # Вывод: True
(x % i != 0 for i in range(2, x)) создает последовательность логических значений: True, если x не делится на i, и False, если делится.all() возвращает True, только если все значения в последовательности — истинны.is_prime(7) вернет True, так как 7 не делится ни на одно число от 2 до 6 — то есть, это простое число.any() — Поиск хотя бы одного делителяdef has_divisor(x):
return any(x % i == 0 for i in range(2, x))
print(has_divisor(9)) # Вывод: True
any() вернет True, если хотя бы одно значение в последовательности — истина.has_divisor(9) возвращает True, потому что 9 делится на 3.💡 Кратко:
all() — возвращает True, если все элементы истинны.any() — возвращает True, если хотя бы один элемент истинен.Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9 3 2
Ответ:
В Python блок else после цикла for или while выполняется только в том случае, если цикл завершился нормально, то есть без использования break.
➡Программирование на Python | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥10👍4🔥3 2
string в Python #tpyПри работе со строками часто возникает задача: определить, к какой категории символов относится тот или иной символ — цифра ли это, буква, знак пунктуации и т.д.
✅ Помимо методов
isdigit(), isalpha(), использования Unicode (ord()) и регулярных выражений, Python предлагает более удобный способ — строковые константы встроенного модуля string.📚 Примеры полезных констант:
import string
print(string.digits)
# Цифры: 0123456789
print(string.ascii_letters)
# Все английские буквы: abc...XYZ
print(string.ascii_lowercase)
# Только строчные: abc...
print(string.ascii_uppercase)
# Только заглавные: ABC...
print(string.punctuation)
# Знаки препинания: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
🔣 Нужно фильтровать или валидировать ввод🔣 Писать генераторы случайных паролей🔣 Проверять состав строки без использования регулярных выражений
s = "Hello123!"
letters_only = [ch for ch in s if ch in string.ascii_letters]
print(letters_only) # ['H', 'e', 'l', 'l', 'o']
Кроме вышеупомянутых, модуль string содержит и другие полезные объекты, включая
string.whitespace, string.printable и даже шаблонные классы для форматирования.docs.python.org/3/library/string.html
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8 4🔥3
Это строка, содержащая числовые символы, из которых мы будем находить сумму:
s = '12345'
summa1 = 0
for x in s:
summa1 += int(x)
print(summa1) # 15
В этом варианте мы используем цикл
for, чтобы пройти по каждому символу строки s. Каждый символ преобразуем в число с помощью int(x) и добавляем его к общей сумме summa1.summa2 = 0
for i in range(0, 10):
summa2 += s.count(str(i)) * i
print(summa2) # 15
Здесь мы использовали метод
count для подсчета количества вхождений каждой цифры от 0 до 9 в строке s. Умножаем количество вхождений на само число и добавляем к summa2.summa3 = sum(map(int, s))
print(summa3) # 15
Этот способ применяет функцию map, чтобы преобразовать каждый символ строки s в число. Используя sum, мы находим сумму всех чисел. Это краткий и эффективный способ.
summa4 = sum([int(x) for x in s])
print(summa4) # 15
Здесь используется генератор списка для создания нового списка, где каждый элемент — это числовое значение символа из
s. Затем с помощью sum находим сумму элементов списка.Альтернативно, в этой версии можно добавить проверку
if, чтобы убедиться, что символы являются цифрами:summa4 = sum([int(x) for x in s if x.isdigit()])
Это делает код более безопасным на случай, если в строке
s присутствуют нечисловые символы.Please open Telegram to view this post
VIEW IN TELEGRAM
4❤🔥9 4🤯3
Срезы (slices) - это мощный инструмент в Python, позволяющий взять часть списка или строки, указав, что именно тебе нужно.
Общий вид срезов в Python:
A[начало:конец:шаг]
начало — индекс, С КОТОРОГО начинаем (включается).конец — индекс, ДО КОТОРОГО берём (не включается).шаг — через сколько берём элементы (по умолчанию 1).s = "информатика"
print(s[0:5]) # 'инфор' (с 0 по 4 индекс)
print(s[::-1]) # 'акитамрофни' (разворот строки)
print(s[2:7]) # 'форма' (с 2 по 6 индекс)
print(s[:4]) # 'инфо' (с начала до 3 индекса)
print(s[-4:]) # 'тика' (последние 4 буквы)
print(s[::2]) # 'ифрмата' (каждая вторая буква)
nums = [4, 8, 15, 16, 23, 42]
print(nums[1:4]) # [8, 15, 16] (с 1 по 3 индекс)
print(nums[-3:]) # [16, 23, 42] (последние 3 элемента)
print(nums[:3]) # [4, 8, 15] (первые 3 элемента)
print(nums[::-1]) # [42, 23, 16, 15, 8, 4] (разворот списка)
print(nums[::2]) # [4, 15, 23] (каждый второй элемент)
а также 13, 14, 17 и других номерах
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤🔥5🔥4 2❤1
float в Python? #tpyОтвет:
Почему так происходит:
Число 0.1 в двоичном виде - бесконечная дробь. В памяти оно хранится как ближайшее представимое значение, а не как точная десятичная дробь.
При выполнении операций (+, -, *, /) эти малые погрешности складываются.
Оператор == проверяет полное совпадение битов результата, поэтому даже «крошечная» разница даст False.
import math
# Два выражения, которые математически равны
a = 0.1 + 0.2
b = 0.3
# Прямое сравнение
print("a =", a) # a = 0.30000000000000004
print("b =", b) # b = 0.3
print("a == b ->", a == b) # False!
# Сравнение с учётом допуска погрешности
# По умолчанию rel_tol=1e-09, abs_tol=0.0
print("math.isclose(a, b) ->", math.isclose(a, b)) # True
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5🔥3😁1
Если раньше для подстановки переменных в строку мы писали:
"Привет, {}!".format(name)то теперь с f-строками можно проще:
name = "Андрей"
print(f"Привет, {name}!") # Привет, Андрей!
a = 5
b = 3
print(f"{a} + {b} = {a + b}") # 5 + 3 = 8
user = "Андрей"
action = "покупка"
log = f"Пользователь {user} зашел на сайт и выполнил действие: {action}"
print(log) # Пользователь Андрей зашел на сайт и выполнил действие: покупка
Чтобы использовать
f-строку, ставь f перед кавычками и указывай переменные в {}.Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤9
eval() в Python #tpy📓 Многие сталкиваются с задачами, где нужно вычислить выражение, заданное в виде строки, например:
"2+3*4" или " (10 - 3) ** 2".eval()Она "преобразует" строку в код и выполняет его, возвращая результат.
expression = "2+3*4"
result = eval(expression)
print(result) # Выведет 14
expression = " (10 - 3) ** 2"
result = eval(expression)
print(result) # Выведет 49
expression = "( 2+3*4 ) * 3"
result = eval(expression)
print(result) # Выведет 42
⚠️ Важно помнить: eval() — мощный инструмент, но его использование опасно, если строка содержит неподтвержденный или вредоносный код.
На экзамене обычно не проблема, а в реальной разработке лучше избегать eval() без необходимости.✔️ В контексте ЕГЭ eval() помогает быстро выполнять вычисления из строковых выражений, что удобно при решении задачи под номером 24.
eval() — ваш быстрый помощник, но применять его нужно с осторожностью!Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥16🔥13👍5
itertools.chain #tpyКогда у тебя есть несколько списков, кортежей или других итерируемых объектов, и нужно пройти по ним, будто это один большой список —
itertools.chain делает это просто и эффективно, без создания дополнительных промежуточных структур.itertools.chain позволяет объединять итерируемые объекты "на лету", экономя память и ускоряя обработку больших наборов данных. Особенно полезно, когда работаешь с объемными файлами или потоками данных.
import itertools
list1 = [1, 2, 3]
list2 = ('a', 'b', 'c')
list3 = range(10, 13)
# Объединяем без создания новых списков
for item in itertools.chain(list1, list2, list3):
print(item, end=' ')
1 2 3 a b c 10 11 12
Теперь ты можешь обходить все эти коллекции как один поток, не тратя лишнюю память
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍11❤🔥2🔥2