Skip to content

Instantly share code, notes, and snippets.

@jigi-33
Created May 25, 2020 14:26
Show Gist options
  • Save jigi-33/209ad40c6f9be2f8b9775d28cbc40672 to your computer and use it in GitHub Desktop.
Save jigi-33/209ad40c6f9be2f8b9775d28cbc40672 to your computer and use it in GitHub Desktop.
Простые задачки по функциональному программированию с использованием условий, циклов. Простое шифрование
"""
Простейшие арифметические операции
==================================
Написать функцию arithmetic, принимающую 3 аргумента:
первые 2 - числа,
третий - операция, которая должна быть произведена над ними.
Если третий аргумент +, сложить их; если —, то вычесть; * — умножить; / — разделить (первое на второе).
В остальных случаях вернуть строку "Неизвестная операция".
"""
def arithmetic(arg1, arg2, op):
if op == '+':
return arg1 + arg2
elif op == '-':
return arg1 - arg2
elif op == '*':
return arg1 * arg2
elif op == '/':
return arg1 / arg2
else:
return "Неизвестная операция"
"""
Високосный год
==============
Написать функцию is_year_leap, принимающую 1 аргумент — год, и возвращающую True, если год високосный, и False иначе.
"""
def is_year_leap(year):
if year % 400 == 0:
return True
if year % 4 == 0 and year % 100 != 0:
return True
return False
"""
Квадрат
=======
Написать функцию square, принимающую 1 аргумент — сторону квадрата, и возвращающую 3 значения (с помощью кортежа):
периметр квадрата, площадь квадрата и диагональ квадрата.
"""
import math
def square(a):
p = 4 * a
s = a ** 2
diag = a * math.sqrt(2) # можно diag = math.hypot(a, a)
return p, s, diag
"""
Времена года
============
Написать функцию season, принимающую 1 аргумент — номер месяца (от 1 до 12), и возвращающую время года,
которому этот месяц принадлежит (зима, весна, лето или осень).
"""
def season(month):
if month in (12, 1, 2):
return "зима"
elif month in (3, 4, 5):
return "весна"
elif month in (6, 7, 8):
return "лето"
elif month in (9, 10, 11):
return "осень"
"""
Банковский вклад
================
Пользователь делает вклад в размере a рублей сроком на years лет под 10% годовых
(каждый год размер его вклада увеличивается на 10%. Эти деньги прибавляются к сумме вклада,
и на них в следующем году тоже будут проценты). Написать функцию bank, принимающая аргументы a и years
и возвращающую сумму, которая будет на счету пользователя.
"""
def bank(a, years):
for year in range(years):
a *= 1.1
return a
"""
Простые числа
=============
Написать функцию is_prime, принимающую 1 аргумент — число от 0 до 1000 и возвращающую True,
если оно простое, и False - иначе.
"""
def is_prime(number):
if number == 1:
return False
for divisor in range(2, number):
if number % divisor == 0:
return False
return True
"""
Правильная дата
===============
Написать функцию date, принимающую 3 аргумента — день, месяц и год.
Вернуть True, если такая дата есть в нашем календаре, и False если иначе.
"""
def is_year_leap(year):
if year % 400 == 0:
return True
if year % 4 == 0 and year % 100 != 0:
return True
return False
def date(day, month, year):
day_in_month = {1: 31,
2: 29 if is_year_leap(year) else 28,
3: 31,
4: 30,
5: 31,
6: 30,
7: 31,
8: 31,
9: 30,
10: 31,
11: 30,
12: 31}
if 1 <= month <= 12 and 1 <= day <= day_in_month[month]:
return True
return False
# Или читерский вариант:
def date_cheat(day, month, year):
import datetime
try:
datetime.date(year, month, day)
except ValueError:
return False
else:
return True
"""
XOR-шифрование
==============
Написать функцию XOR_cipher, принимающая 2 аргумента: строку, которую нужно зашифровать,
и ключ шифрования, которая возвращает строку, зашифрованную путем применения функции XOR (^) над символами строки с ключом.
Написать также функцию XOR_uncipher, которая по зашифрованной строке и ключу восстанавливает исходную строку.
"""
import itertools
def XOR_cipher(string, key):
answer = []
key = itertools.cycle(key) # Повторяем ключ, чтобы зашифровать всю строку
for s, k in zip(string, key):
answer.append(chr(ord(s) ^ ord(k)))
return ''.join(answer)
# Функция для расшифровки точно такая же (XOR_uncipher = XOR_cipher)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment