Примеры программ Python

Примеры

Введение

В данном уроке мы приведём несколько примеров небольших программ на Python. Общая рекомендация к изучению любого языка: практикуйтесь как можно больше. Чтобы достичь хоть какого-то уровня профессионализма в программировании, не достаточно только изучать теорию. Пишите код. Желательно, каждый день, хотя бы по чуть-чуть. Это важно. Ваши руки должны привыкнуть к синтаксису, а мозги – к решению стандартных задач программирования.

Примеры простых программ

Замена значений переменных местами

На большинстве других языков эта задача была бы решена следующим образом:

var_1 = 15
var_2 = 67
print('var_1:', var_1, 'var_2:', var_2)
var_temp = var_1
var_1 = var_2
var_2 = var_temp
print('var_1:', var_1, 'var_2:', var_2)
# Вывод:
var_1: 15 var_2: 67
var_1: 67 var_2: 15


Но Пайтон творит магию:

var_1, var_2 = 15, 67
print('var_1:', var_1, 'var_2:', var_2)
var_1, var_2 = var_2, var_1
print('var_1:', var_1, 'var_2:', var_2)
# Вывод:
var_1: 15 var_2: 67
var_1: 67 var_2: 15

Написание числа в обратном порядке


var_1 = 1567
reverse = 0
while var_1 > 0:
    rest = var_1 % 10
    reverse = reverse * 10 + rest
    var_1 = var_1 // 10
print("Число в обратном порядке:", reverse)
# Вывод:
Число в обратном порядке: 7651


В Питоне, несмотря на одну из его заповедей: «должно быть только одно решение», решений, как правило много. Всегда стоит задуматься о том, какой алгоритм оптимальнее. Пример, приведённый выше, работает, но его можно оптимизировать (сократить объём кода).

var_1 = 1567
var_1 = str(var_1)[::-1]
print("Число в обратном порядке:", var_1)
# Вывод:
Число в обратном порядке: 7651

Преобразование разделённого запятыми списка в строку

favorites = ["Python", "SQL", "GO"]
print("Мои любимые языки программирования:", ", ".join(favorites))
# Вывод:
Мои любимые языки программирования: Python, SQL, GO

Найти среднее значение элементов массива


var_1 = [1, 5, 6, 7]
sum = 0
for i in var_1:
    sum += i
print(sum/len(var_1))
# Вывод:
4.75


Оптимизируем код:

var_1 = [1, 5, 6, 7]
print(eval(str(var_1).replace(', ', '+'))[0]/len(var_1))
# Вывод:
4.75


Тут следует заметить, что сокращение кода, почти всегда, ведёт к ухудшению читаемости и это следует делать с большой осторожностью. К примеру, в приведённом выше варианте, читаемость «убита» полностью, хоть код сократился всего на три строки.

Проверить, является ли слово палиндромом

Палиндром – это слово, которое читается одинаково в обоих направлениях. Для разнообразия покажем, как сокращение кода из-за выбора альтернативного алгоритма повышает читаемость кода и производительность. Вот одна из худших реализаций:

var_1 = 'level'
var_2 = list(var_1)
var_2.reverse()
var_2 = str(var_2).replace('\', \'', '').replace('[\'', '').replace('\']', '')
print(var_2)
if var_1 == var_2:
    print('Palindrom')
else:
    print('Simple word')
# Вывод:
Palindrome


Вариант получше:

var_1 = 'level'
ispalindrome = var_1 == var_1[::-1]
if ispalindrome:
    print('Palindrome')
else:
    print('Simple word')
# Вывод:
Palindrome


Вишенка на торте. Тоже самое в одну строку:

var_1 = 'level'
print('Palindrome') if var_1 == var_1[::-1] else print('Simple word')
# Вывод:
Palindrome

Есть ли число в списке

var_1 = 11
print(var_1 in [5, 6, 40, 126])
# Вывод:
False

Вывод всех чисел, кратных определенному числу, в заданном диапазоне

lower = int(input("Введите нижнюю границу диапазона: "))
upper = int(input("Введите верхнюю границу диапазона: "))
n = int(input("Введите делитель: "))
for i in range(lower, upper + 1):
    if(i % n == 0):
        print(i)
# Вывод:
Введите нижнюю границу диапазона: 5
Введите верхнюю границу диапазона: 30
Введите делитель: 5
5
10
15
20
25
30

Количества цифр в числе

var_1 = int(input("Введите число: "))
count = 0
while var_1 > 0:
    count = count + 1
    var_1 = var_1 // 10
print("Количество цифр равно:", count)
# Вывод:
Введите число: 123456789
Количество цифр равно: 9

Суммы всех цифр данного числа

var_1 = int(input("Введите число: "))
total = 0
while var_1 > 0:
    rest = var_1 % 10
    total = total + rest
    var_1 = var_1//10
print("Сумма цифр равна:", total)
# Вывод:
Введите число: 123456789
Сумма цифр равна: 45

Сумма цифр от 1 до n

var_1 = int(input("Введите число: "))
agregator = []
for i in range(1, var_1+1):
    print(i, sep=" ", end=" ")
    if i < var_1:
        print("+", sep=" ", end=" ")
    agregator.append(i)
print("=", sum(agregator))
# Вывод:
Введите число: 18
1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 = 171

Играемся со звёздочками

Вывести n рядов, заполненных знаком ‘*’

var_1 = int(input("Введите количество рядов: "))
for i in range(var_1, 0, -1):
    print((var_1-i) * ' ' + i * '*')
# Вывод:
Введите количество рядов: 5
*****
 ****
  ***
   **
    *

Получаем гласные

def get_vowels(word):
    return [each for each in word if each in "aeiouy"]
print(get_vowels("animal"))
print(get_vowels("sky"))
print(get_vowels("football"))
# Вывод:
['a', 'i', 'a']
['y']
['o', 'o', 'a']

Чуть сложнее

Все перестановки трех чисел

Программа принимает три числа и выводит все возможные перестановки этих чисел.

var_1 = int(input("Введите первое число: "))
var_2 = int(input("Введите второе число: "))
var_3 = int(input("Введите третье число: "))
agregator = []
agregator.append(var_1)
agregator.append(var_2)
agregator.append(var_3)
for i in range(0, 3):
    for j in range(0, 3):
        for k in range(0, 3):
            if(i != j & j != k & k != i):
                print(agregator[i], agregator[j], agregator[k])
# Вывод:
Введите первое число: 10
Введите второе число: 20
Введите третье число: 30
10 20 30
10 30 20
20 10 30
20 30 10
30 10 20
30 20 10

Декартово произведение

Необходимо объединить два списка таким образом, чтоб получить список из всех возможных пар элементов.

print([(var_1, var_2) for var_1 in ['dfa', '\eb'] for var_2 in [154, 248, 873]])
# Вывод:
[('dfa', 154), ('dfa', 248), ('dfa', 873), ('\\eb', 154), ('\\eb', 248), ('\\eb', 873)]

Генератор чисел Фибоначчи

def fibonacci(limit):        # генератор (а не функция, т.к. оператор return заменён на yield)
    var_1, var_2 = 0, 1
    while var_1 < limit:
        yield var_1            # return a, + запоминаем место рестарта для следующего вызова
        var_1, var_2 = var_2, var_1 + var_2    # параллельное присваивание, которое выполняется одновременно и параллельно

for n in fibonacci(1000):   # используем генератор fibonacci() как итератор
    print(n, end=' ')               # печатаем все числа Фибоначчи меньшие 1000 через пробел
# Вывод:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

Объединяем два словаря

def merge(dic_1, dic_2):
    dic_3 = dic1.copy()
    dic_3.update(dic_2)
    return dic_3


dic1 = {1: "Hello", 2: "pythoninfo,"}
dic2 = {3: "Python", 4: "is awesome",}
print(merge(dic1, dic2))
# Вывод:
{1: 'Hello', 2: 'pythoninfo,', 3: 'Python', 4: 'is awesome'}

Проверка дубликатов

def check_duplicate(lst):
    return len(lst) != len(set(lst))


print(check_duplicate([51, 37, 3, 45, 5, 49, 77]))
print(check_duplicate([1, 3, 3]))
print(check_duplicate([11, 2, 88, 4, 16]))
# Вывод:
False
True
False

Вычисляем время выполнения

Очень полезный пример. Приведённый код – самый простой способ проводить профилирование Вашего кода. Позволяет понять какой блок тормозит работу программы. Здесь мы записываем текущее время перед запуском функции и после запуска. Затем сравниваем их и выводим, сколько времени заняло выполнение функции.

import time


def fun(i):
    res = lambda i: i ** i
    return res(i)


start_time = time.time()
fun(fun(5))
end_time = time.time()
timetaken = end_time - start_time
print("Время выполнения: ", timetaken)
# Вывод:
Время выполнения:  0.0009870529174804688

Разбиение на фрагменты

def chunk(ishod_list, size):
    return [ishod_list[i:i + size] for i in range(0, len(ishod_list), size)]

ishod_list = ['q', 'w', 'e', 'r', 't', 'y']
print(chunk(ishod_list, 2))
# Вывод:
[['q', 'w'], ['e', 'r'], ['t', 'y']]

Оцените статью
О Python на русском языке
Добавить комментарий

Adblock
detector