PostgreSQL
1. Запрос, выводящий названия товаров в зависимости от стоимости и количества
2. Выводит информацию о клиенте в одну ячейку с применением маски для телефона
3. Выводит месяц, в котором был сделан самый последний заказ
4. Выводит имена клиентов в верхнем регистре с чётным id
5. Выводит в каких номерах телефонов есть три или более цифры 4 подряд
6. Выводит в каком заказе максимальное количество товаров (№ заказа, число)
7. Запрос, выводящий названия всех товаров, которые были в самом последнем (по дате) заказе
Python
1. Код для вывода суммы цифр каждого числа в заданном списке
def nsum(n):
p = 0
while n > 0:
p += n % 10
n //= 10
return p
n = [105, 423, 32, 14, 78, 5253, 28]
print(list(map(nsum, n)))
print([sum(map(int, str(i))) for i in n]) # другой вариант
# [6, 9, 5, 5, 15, 15, 10]
2. Перемножение цифр каждого числа в списке, с использованием библиотеки Math
import math
n = [105, 423, 32, 14, 78, 0, 5253, 28]
p = []
for i in n:
p.append(math.prod(map(int, str(i))))
print(p)
print([math.prod(map(int, str(i))) for i in n]) # другой вариант
# [0, 24, 6, 4, 56, 0, 150, 16]
3. Посчитать максимальную сумму вклада, с выводом депозитов в каждом банке
from decimal import Decimal
per_cent = {'ТКБ': 5.6, 'СКБ': 5.9, 'ВТБ': 4.28, 'СБЕР': 4.0}
money = int(input("Введите сумму вклада в рублях:"))
def num_format(num_x): # числовой формат:
n = Decimal(str(num_x))
number = n.quantize(Decimal("1.00"))
formi = '{0:,}'.format(number).replace(',', ' ')
return formi
for i in per_cent:
p = per_cent[i] / 100 * money
for j in per_cent:
if j == i:
print(f'Доход {num_format(p)} по ставке {round(per_cent.get(i), 2)}% \
в банке: {j}')
maxi = max(per_cent.values()) / 100 * money
bank = max(per_cent, key=per_cent.get)
print(f'<<Лучшее предложение>> в банке {bank} с доходом: {num_format(maxi)}')
4. Угадать число, с использованием библиотеки Random
import random
num = random.randint(1, 100)
print("Угадайте число от 1 до 100 :)")
count = 0
while True:
guess = int(input(f"{count + 1} попытка: "))
if guess == num:
print(f"Верно! C {count + 1} попытки!")
if (count + 1) <= 3:
print("Великолепный результат!!! Хорошая интуиция! :)")
break
elif guess > num and guess <= 100:
print(f"Загаданное число < {guess}")
elif guess < num and guess <= 100:
print(f"Загаданное число > {guess}")
else:
print("УПС! Возможно Вы ввели не то...")
count += 1
5. Посчитать стоимость билетов с учётом скидки за количество
ticket = int(input('Укажите кол-во билетов (макс 5 шт): '))
if 0 < ticket <= 5: # ограничение ввода по количеству
price = 0
count = 0
for i in range(ticket):
while True:
try:
count += 1
age = int(input(f'Возраст {count}-го посетителя: '))
# Если вводится не число, будет вызвано исключение:
except ValueError:
# Цикл будет повторяться до правильного ввода:
print("Нужно ввести число! Попробуйте снова...")
else:
if age < 18:
price += 0
elif 18 <= age < 25:
price += 990
else:
price += 1390
break
if ticket > 3:
discount = 0.9
else:
discount = 1
print('Стоимость билетов на', ticket, 'чел:', round(discount * price), 'руб.')
else:
print('Один может купить не более 5 билетов!')
6. Программа, которая получает от пользователя имя файла, открывает этот файл в текущем каталоге, читает его и выводит два слова, наиболее часто встречающееся из тех, что имеют размер более трёх символов, и наиболее длинное слово на английском языке.
import operator
import re
filename = input('Укажите имя файла: ')
ftype = input('Укажите тип файла (расширение): ')
xfile = filename + '.' + ftype
# Функция для поиска самого длинного англ. слова:
def longWord(text):
r = re.compile("([a-zA-Z]+)") # применяем регулярные выражения
long_word = []
for english in filter(r.match, text):
long_word.append(english)
return long_word
# открываем файл, читаем, чистим текст:
with open(xfile, encoding="utf8") as f:
lst = f.read().lower().translate(
str.maketrans('', '', '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~—')
).split()
y = 3 # параметр для слов длиною > y
res = {x:lst.count(x) for x in lst if len(x) > y}
# Модуль operator.itemgetter() возвращает значение словаря с ключом, который = 1
# сортируем по возрастанию....
sorted_res = dict(sorted(res.items(), key=operator.itemgetter(1)))
print(f'Слова, длинною более {y}-х символов:')
print(f'1-ое слово: "{max(sorted_res, key=(sorted_res.get))}" - {max(sorted_res.values())} шт')
sorted_res.pop(max(sorted_res, key=(sorted_res.get))) # Исключаем первый максимум...
print(f'2-ое слово: "{max(sorted_res, key=(sorted_res.get))}" - {max(sorted_res.values())} шт')
print(f'Самое длинное англ. слово: "{max(longWord(lst), key=len)}"')
print(f'Самое длинное русское: "{", ".join([word for word in lst if len(word) == \
len(sorted(lst, key=len)[-1])]).lower()}"')
7. Расчёт площади фигур через Классы
import math
class Rectangle:
def __init__(self, a, b):
self.a = a
self.b = b
def get_area(self):
return self.a * self.b
class Square:
def __init__(self, a):
if a <= 0:
raise NonPositiveDigitException('Неверно указана сторона квадрата!')
else:
self.a = a
def get_area_square(self):
return self.a ** 2
class Circle:
def __init__(self, r):
self.r = r
def get_circle_square(self):
p = math.pi
return round(p * self.r ** 2, 2)
p = math.pi # для вывода числа Pi через класс Circle.p
class NonPositiveDigitException(ValueError):
pass
rect_1 = Rectangle(3, 4)
rect_2 = Rectangle(12, 5)
square_1 = Square(5)
square_2 = Square(10)
circle_1 = Circle(7)
figures = [rect_1, rect_2, square_1, square_2, circle_1]
for figure in figures:
if isinstance(figure, Square):
print(figure.get_area_square())
elif isinstance(figure, Circle):
print(f'Площадь круга (Pi x r^2) = {figure.get_circle_square()}, \
где Pi = {round(Circle.p, 3)}')
else:
print(figure.get_area())
8. Поиск индекса, предшествующего введённому числу.
"""
1.Преобразовать введённую последовательность в список
2.Отсортировать список по возрастанию элементов в нём (через функцию)
3.Найти номер позиции элемента, который на 1 меньше введённого пользователем числа.
4.Добавить обработку возможных исключений.
"""
while True:
try:
a = list(map(int, input('Укажите произвольный набор чисел через запятую: ').split(',')))
# Если ошибка, будет вызвано исключение:
except Exception:
# Цикл будет повторяться до правильного ввода:
print("<<Ошибка!>> Пример ввода чисел: 22,5,85,14,6,40")
else:
break
while True:
try:
b = list(map(int, input(f'Введите число от {min(list(a))} \
до {max(list(a))}: ').split(',')))
if min(list(b)) < min(list(a)) or min(list(b)) > max(list(a)):
raise ValueError
# Если ошибка, будет вызвано исключение:
except ValueError:
# Цикл будет повторяться до правильного ввода:
print(f"Нужно ввести число от {min(list(a))} до {max(list(a))}!")
else:
break
# Преобразование введённой последовательности в список:
array, num = list(map(int, a)), list(map(int, b))
array.extend(num) # вставляем значение в конец списка
print("Список чисел:", array)
# Сортировка:
def sortArray(array):
for i in range(1, len(array)):
x = array[i]
p = i
while p > 0 and array[p - 1] > x:
array[p] = array[p - 1]
p -= 1
array[p] = x
return array
sortA = sortArray(array)
print("Сортировка:", sortA)
# Поиск индекса введённого числа:
def double_search(sortA, element, left, right):
if left > right: # если левая граница превысила правую,
return False # значит элемент отсутствует
middle = (right + left) // 2 # находим середину
if element == sortA[middle]: # если элемент в середине,
return middle # возвращаем этот индекс
elif element < sortA[middle]: # если элемент меньше элемента в середине
# рекурсивно ищем в левой половине
return double_search(sortA, element, left, middle - 1)
else: # иначе в правой
return double_search(sortA, element, middle + 1, right)
element = min(b) # переводим в формат числа
idx = double_search(sortA, element, 0, len(sortA))
# Обработка исключения при вводе значения = мин или макс в списке:
if element == max(sortA):
Pidx = idx
elif element == min(sortA):
Pidx = "- не определён, так как введённое число минимальное"
else:
Pidx = idx - 1 # Индекс предыдущего числа
print(f"Последний индекс в списке: {len(sortA)-1}")
print(f"Предшествующий числу {element} индекс:", Pidx)
9. Генератор случайного пароля.
import random
import string
def randomPassword() -> str: # -> это типизация. Указываем, что возвращать будем string
randomSource = string.ascii_letters + string.digits + string.punctuation
# ascii_letters - прописные и строчные буквы
password = random.sample(randomSource, 6)
password += random.sample(string.ascii_uppercase, 2) # только прописные
password += random.sample(string.digits, 3) # только цифры
password += random.sample(string.punctuation, 1) # только символы
pass_list = list(password)
random.SystemRandom().shuffle((pass_list))
password = ''.join(pass_list)
return password
print(randomPassword())
10. Тест на проверку сторон треугольника с помощью параметризации.
import pytest
# Создаём функцию:
def triangle(x, y, z):
a, b, c = x, y, z
side = a, b, c
if a + b < c or a + c < b or b + c < a or min(side) <= 0 or sum(side) / 2 == max(side):
return False
else:
return True
# Сам тест:
@pytest.mark.parametrize("x", [3, -1, 6], ids=["3", "[-1]", "6"])
@pytest.mark.parametrize("y", [4, 0, 5], ids=["4", "0", "5"])
@pytest.mark.parametrize("z", [5, 3, 9], ids=["5", "3", "9"])
def test_triangle(x, y, z):
print("\nx: {0}, y: {1}, z: {2}".format(x, y, z))
assert True == triangle(x, y, z)
11. Создание и тестирование Telegram-бота.
– Мой проект Telegram-бота на GitHub;
– Тестирование стороннего Telegram-бота;
– Оценка работы ментором.
12. REST API Requests and PyTest on GitHub.


