Created
May 25, 2020 14:26
-
-
Save jigi-33/209ad40c6f9be2f8b9775d28cbc40672 to your computer and use it in GitHub Desktop.
Простые задачки по функциональному программированию с использованием условий, циклов. Простое шифрование
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
Простейшие арифметические операции | |
================================== | |
Написать функцию 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