diff --git a/lesson01/home_work/hw01_easy.py b/lesson01/home_work/hw01_easy.py index f927b0b06..1c7321173 100644 --- a/lesson01/home_work/hw01_easy.py +++ b/lesson01/home_work/hw01_easy.py @@ -1,24 +1,31 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Денис Кобышев' -# Задача-1: Дано произвольное целое число (число заранее неизвестно). -# Вывести поочередно цифры исходного числа (порядок вывода цифр неважен). -# Подсказки: -# * постарайтесь решить задачу с применением арифметики и цикла while; -# * при желании решите задачу с применением цикла for. +# Задача-1: поработайте с переменными, создайте несколько, +# выведите на экран, запросите от пользователя и сохраните в переменную, выведите на экран -# код пишем тут... +a = 2 +b = 3.4 +c = input('Введитие строку ',) +d = [a, b, c] +e = (b, c, d) +print(d) +print(e) +# Задача-2: Запросите от пользователя число, сохраните в переменную, +# прибавьте к числу 2 и выведите результат на экран. +# Если возникла ошибка, прочитайте ее, вспомните урок и постарайтесь устранить ошибку. -# Задача-2: Исходные значения двух переменных запросить у пользователя. -# Поменять значения переменных местами. Вывести новые значения на экран. -# Подсказка: -# * постарайтесь сделать решение через дополнительную переменную -# или через арифметические действия -# Не нужно решать задачу так: -# print("a = ", b, "b = ", a) - это неправильное решение! +user_num = int(input('Введитие целое число ', )) +print(user_num + 2) # Задача-3: Запросите у пользователя его возраст. # Если ему есть 18 лет, выведите: "Доступ разрешен", # иначе "Извините, пользование данным ресурсом только с 18 лет" + +user_age = int(input('Введитие свой возраст ', )) +if user_age>=18: + print('Доступ разрешен') +else: + print('Извините, пользование данным ресурсом только с 18 лет') \ No newline at end of file diff --git a/lesson01/home_work/hw01_hard.py b/lesson01/home_work/hw01_hard.py index 7df268664..5fc5a662e 100644 --- a/lesson01/home_work/hw01_hard.py +++ b/lesson01/home_work/hw01_hard.py @@ -1,16 +1,15 @@ -__author__ = 'Ваши Ф.И.О.' - -# Задание-1: -# Ваня набрал несколько операций в интерпретаторе и получал результаты: -# Код: a == a**2 -# Результат: True -# Код: a == a*2 -# Результат: True -# Код: a > 999999 -# Результат: True - -# Вопрос: Чему была равна переменная a, -# если точно известно, что её значение не изменялось? - -# Подсказка: это значение точно есть ;) +__author__ = 'Денис Кобышев' + +# Создайте программу медицинская анкета, где вы запросите у пользователя такие данные, как имя, фамилию, возраст, и вес. +# И выведите результат согласно которому пациент в хорошем состоянии, если ему до 30 лет и вес от 50 и до 120 кг, +# Пациенту требуется начать вести правильный образ жизни, если ему более 30 и вес меньше 50 или больше 120 кг +# Пациенту требуется врачебный осмотр, если ему более 40 и вес менее 50 или больше 120 кг. +# Все остальные варианты вы можете обработать на ваш вкус и полет фантазии =) +# Формула не отражает реальной действительности и здесь используется только ради примера. + +# Пример: Вася Пупкин, 29 год, вес 90 - хорошее состояние +# Пример: Вася Пупкин, 31 год, вес 121 - следует заняться собой +# Пример: Вася Пупкин, 31 год, вес 49 - следует заняться собой +# Пример: Вася Пупкин, 41 год, вес 121 - следует обратится к врачу! +# Пример: Вася Пупкин, 41 год, вес 49 - следует обратится к врачу! diff --git a/lesson01/home_work/hw01_normal.py b/lesson01/home_work/hw01_normal.py index 991724e9a..3fd4d9f08 100644 --- a/lesson01/home_work/hw01_normal.py +++ b/lesson01/home_work/hw01_normal.py @@ -1,14 +1,20 @@ -__author__ = 'Ваши Ф.И.О.' +__author__ = 'Денис Кобышев' + +# Задача: используя цикл запрашивайте у пользователя число пока оно не станет больше 0, но меньше 10. +# После того, как пользователь введет корректное число, возведите его в степерь 2 и выведите на экран. +# Например, пользователь вводит число 123, вы сообщаете ему, что число не верное, +# и сообщаете об диапазоне допустимых. И просите ввести заного. +# Допустим пользователь ввел 2, оно подходит, возводим в степень 2, и выводим 4 + +while True: + user_num = int(input('Введите число ')) + if user_num == 0 or user_num >= 10: + print('Число должно быть больше 0 но меньше 10 попробуйте еще раз') + else: + break +print('Результат равен: ', user_num ** 2) -# Задача-1: Дано произвольное целое число, вывести самую большую цифру этого числа. -# Например, дается x = 58375. -# Нужно вывести максимальную цифру в данном числе, т.е. 8. -# Подразумевается, что мы не знаем это число заранее. -# Число приходит в виде целого беззнакового. -# Подсказки: -# * постарайтесь решить задачу с применением арифметики и цикла while; -# * при желании и понимании решите задачу с применением цикла for. # Задача-2: Исходные значения двух переменных запросить у пользователя. @@ -16,12 +22,13 @@ # Решите задачу, используя только две переменные. # Подсказки: # * постарайтесь сделать решение через действия над числами; -# * при желании и понимании воспользуйтесь синтаксисом кортежей Python. + +a = int(input('введите переменную a ', )) +b = int(input('введите переменную b ', )) +a = a + b +b = a - b +a = a - b +print("a= ",a) +print("b= ",b) -# Задача-3: Напишите программу, вычисляющую корни квадратного уравнения вида -# ax² + bx + c = 0. -# Коэффициенты уравнения вводятся пользователем. -# Для вычисления квадратного корня воспользуйтесь функцией sqrt() модуля math: -# import math -# math.sqrt(4) - вычисляет корень числа 4 diff --git a/lesson02/home_work/hw02_easy.py b/lesson02/home_work/hw02_easy.py index ed4447e50..b286c126d 100644 --- a/lesson02/home_work/hw02_easy.py +++ b/lesson02/home_work/hw02_easy.py @@ -1,4 +1,4 @@ -# Задача-1: + # Задача-1: # Дан список фруктов. # Напишите программу, выводящую фрукты в виде нумерованного списка, # выровненного по правой стороне. @@ -12,14 +12,50 @@ # 4. арбуз # Подсказка: воспользоваться методом .format() +fruits = ('яблоко', 'банан', 'киви', 'арбуз') +id = 1 +for fruit in fruits: + print("{0}. {1:>6}".format(id, fruit)) + id += 1 - +print('-'*25) # Задача-2: # Даны два произвольные списка. # Удалите из первого списка элементы, присутствующие во втором списке. +list1 = ['a', 'c', 'd', 5, "мышь"] +list2 = ['c', 'a', 5,] +for i in range(len(list1) - 1, -1, -1): + if list1[i] in list2: + del list1[i] +print(list1) + +# list1 = ['a', 'b', 'c', 'd', 5, "мышь"] +# list2 = ['b', 'c', 'a'] +# list3 = [item for item in list1 if item not in list2] +# print(list3) +# + +print('-'*25) + # Задача-3: # Дан произвольный список из целых чисел. # Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: # если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. + +list5 = [] +list6 = [] +for x in range(16): + list5.append(x) +for y in list5: + if y % 2 == 0: + list6.append(y / 4) + else: + list6.append(y * 2) +print(list6) + + +# list5 = [x for x in range(15)] +# list6 = [x1**2 if x1 % 2 == 0 else x1 * 2 for x1 in list5 ] +# print (list6) diff --git a/lesson02/home_work/hw02_normal.py b/lesson02/home_work/hw02_normal.py index 3acfaabb6..5b92b9dfe 100644 --- a/lesson02/home_work/hw02_normal.py +++ b/lesson02/home_work/hw02_normal.py @@ -1,3 +1,7 @@ +from datetime import datetime +import random +import math + # Задача-1: # Дан список, заполненный произвольными целыми числами, получите новый список, # элементами которого будут квадратные корни элементов исходного списка, @@ -5,11 +9,49 @@ # если такой корень вообще можно извлечь # Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +list1 = [] +for x in range(15): + list1.append(random.randint(-100, 100)) +print(list1) +list2 = [] +for y in list1: + if y >= 0 and math.sqrt(y).is_integer(): + list2.append(y ** 0.5) +print(list2) + + +# list1 = [random.randint(-100, 100) for x in range(15)] +# +# print(list1) +# +# list2 = [int(y ** 0.5) for y in list1 if y >= 0 and math.sqrt(y).is_integer()] +# +# print(list2) + +print('-'*25) + # Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. # Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. # Склонением пренебречь (2000 года, 2010 года) +curr_date = datetime.now() + +mlist = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'] + +mnth_idx = curr_date.month - 1 + +day = curr_date.day + +month = mlist[mnth_idx] + +year = curr_date.year + +result = f"{day} {month} {year} года." + +print(result) + +print('-'*25) # Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами # в диапазоне от -100 до 100. В списке должно быть n - элементов. @@ -17,9 +59,32 @@ # для получения случайного числа используйте функцию randint() модуля random +qty = int(input('Введите количество элементов в списке = ',)) + +print([random.randint(-100, 100) for x in range(qty)]) + +print('-'*25) + # Задача-4: Дан список, заполненный произвольными целыми числами. -# Получите новый список, элементами которого будут: +# Получите новый список, элементами которого будут: # а) неповторяющиеся элементы исходного списка: # например, lst = [1, 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 2, 4, 5, 6] # б) элементы исходного списка, которые не имеют повторений: # например, lst = [1 , 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 4, 6] + + +rptdlst = [1, 2, 4, 5, 6, 2, 5, 2] + +nrptdlst = list(set(rptdlst)) + +print(nrptdlst) + +rptdlst1 = [1, 2, 4, 5, 6, 2, 5, 2] + +nrptdlst1 = [x for x in rptdlst1 if rptdlst1.count(x) == 1] + +print(nrptdlst1) + + + + diff --git a/lesson03/home_work/hw03_easy.py b/lesson03/home_work/hw03_easy.py index 63d13f646..d0d400d80 100644 --- a/lesson03/home_work/hw03_easy.py +++ b/lesson03/home_work/hw03_easy.py @@ -1,28 +1,52 @@ -# Задание-1: -# Напишите функцию, округляющую полученное произвольное десятичное число -# до кол-ва знаков (кол-во знаков передается вторым аргументом). -# Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0). -# Для решения задачи не используйте встроенные функции и функции из модуля math. - -def my_round(number, ndigits): - pass - - -print(my_round(2.1234567, 5)) -print(my_round(2.1999967, 5)) -print(my_round(2.9999967, 5)) - - -# Задание-2: -# Дан шестизначный номер билета. Определить, является ли билет счастливым. -# Решение реализовать в виде функции. -# Билет считается счастливым, если сумма его первых и последних цифр равны. -# !!!P.S.: функция не должна НИЧЕГО print'ить - -def lucky_ticket(ticket_number): - pass - - -print(lucky_ticket(123006)) -print(lucky_ticket(12321)) -print(lucky_ticket(436751)) +# Постарайтесь использовать то, что мы прошли на уроке при решении этого ДЗ, +# вспомните про zip(), map(), lambda, посмотрите где лучше с ними, а где они излишни! + +# Задание - 1 +# Создайте функцию, принимающую на вход Имя, возраст и город проживания человека +# Функция должна возвращать строку вида "Василий, 21 год(а), проживает в городе Москва" +# +# def cred_output(name, age, city): +# agm = 'год' +# if 20 >= int(age) > 4: +# agm = 'лет' +# elif int(age[-1]) == 0 or int(age[-1]) > 4: +# agm = 'лет' +# elif int(age[-1]) > 1: +# agm = 'года' +# +# print(f'{name}, {age} {agm}, проживает в городе {city}.') +# +# name = input('Введите имя ',) +# age = input('Введите возраст ',) +# city = input('Введите город проживания ',) +# +# cred_output(name, age, city) + +# Задание - 2 +# Создайте функцию, принимающую на вход 3 числа, и возвращающую наибольшее из них + +# def mymax(numbers): +# numbersint = list(map(int, numbers.split(","))) +# mmax = 0 +# for i in numbersint: +# if i > mmax: +# mmax = i +# return mmax +# +# +# numb = input('Введите 3 числа через запятую: ') +# print(f'Наибольшим числом из {numb} является {mymax(numb)}') + + +# Задание - 3 +# Создайте функцию, принимающую неограниченное количество строковых аргументов, +# верните самую длинную строку из полученных аргументов +# +def longest_str(*args): + ret = '' + for i in args: + if len(i) > len(ret): + ret = i + return ret + +print(longest_str('True', 'FX', 'Entertainment', 'OneLongWordForTest')) diff --git a/lesson03/home_work/hw03_hard.py b/lesson03/home_work/hw03_hard.py index a8c7f668a..8fd229bbc 100644 --- a/lesson03/home_work/hw03_hard.py +++ b/lesson03/home_work/hw03_hard.py @@ -1,33 +1,24 @@ -# Задание-1: -# Написать программу, выполняющую операции (сложение и вычитание) с простыми дробями. -# Дроби вводятся и выводятся в формате: -# n x/y ,где n - целая часть, x - числитель, у - знаменатель. -# Дроби могут быть отрицательные и не иметь целой части, или иметь только целую часть. -# Примеры: -# Ввод: 5/6 + 4/7 (всё выражение вводится целиком в виде строки) -# Вывод: 1 17/42 (результат обязательно упростить и выделить целую часть) -# Ввод: -2/3 - -2 -# Вывод: 1 1/3 +# Задание - 1 +# Давайте опишем пару сущностей player и enemy через словарь, +# который будет иметь ключи и значения: +# name - строка полученная от пользователя, +# health - 100, +# damage - 50. +# Поэксперементируйте с значениями урона и жизней по желанию. +# Теперь надо создать функцию attack(person1, person2), аргументы можете указать свои, +# функция в качестве аргумента будет принимать атакующего и атакуемого, +# функция должна получить параметр damage атакующего и отнять это количество +# health от атакуемого. Функция должна сама работать с словарями и изменять их значения. -# Задание-2: -# Дана ведомость расчета заработной платы (файл "data/workers"). -# Рассчитайте зарплату всех работников, зная что они получат полный оклад, -# если отработают норму часов. Если же они отработали меньше нормы, -# то их ЗП уменьшается пропорционально, а за заждый час переработки -# они получают удвоенную ЗП, пропорциональную норме. -# Кол-во часов, которые были отработаны, указаны в файле "data/hours_of" +# Задание - 2 +# Давайте усложним предыдущее задание, измените сущности, добавив новый параметр - armor = 1.2 +# Теперь надо добавить функцию, которая будет вычислять и возвращать полученный урон по формуле damage / armor +# Следовательно у вас должно быть 2 функции, одна наносит урон, вторая вычисляет урон по отношению к броне. - -# Задание-3: -# Дан файл ("data/fruits") со списком фруктов. -# Записать в новые файлы все фрукты, начинающиеся с определенной буквы. -# Т.е. в одном файле будут все фрукты на букву “А”, во втором на “Б” и т.д. -# Файлы назвать соответственно. -# Пример имен файлов: fruits_А, fruits_Б, fruits_В …. -# Важно! Обратите внимание, что нет фруктов, начинающихся с некоторых букв. -# Напишите универсальный код, который будет работать с любым списком фруктов -# и распределять по файлам в зависимости от первых букв, имеющихся в списке фруктов. -# Подсказка: -# Чтобы получить список больших букв русского алфавита: -# print(list(map(chr, range(ord('А'), ord('Я')+1)))) +# Сохраните эти сущности, полностью, каждую в свой файл, +# в качестве названия для файла использовать name, расширение .txt +# Напишите функцию, которая будет считывать файл игрока и его врага, получать оттуда данные, и записывать их в словари, +# после чего происходит запуск игровой сессии, где сущностям поочередно наносится урон, +# пока у одного из них health не станет меньше или равен 0. +# После чего на экран должно быть выведено имя победителя, и количество оставшихся единиц здоровья. diff --git a/lesson03/home_work/hw03_normal.py b/lesson03/home_work/hw03_normal.py index 38ac1fcc1..ab94afa1c 100644 --- a/lesson03/home_work/hw03_normal.py +++ b/lesson03/home_work/hw03_normal.py @@ -1,27 +1,32 @@ -# Задание-1: -# Напишите функцию, возвращающую ряд Фибоначчи с n-элемента до m-элемента. -# Первыми элементами ряда считать цифры 1 1 - -def fibonacci(n, m): - pass - -# Задача-2: -# Напишите функцию, сортирующую принимаемый список по возрастанию. -# Для сортировки используйте любой алгоритм (например пузырьковый). -# Для решения данной задачи нельзя использовать встроенную функцию и метод sort() - - -def sort_to_max(origin_list): - pass - -sort_to_max([2, 10, -12, 2.5, 20, -11, 4, 4, 0]) - -# Задача-3: -# Напишите собственную реализацию стандартной функции filter. -# Разумеется, внутри нельзя использовать саму функцию filter. - - -# Задача-4: -# Даны четыре точки А1(х1, у1), А2(x2 ,у2), А3(x3 , у3), А4(х4, у4). -# Определить, будут ли они вершинами параллелограмма. - +# Задание - 1 +# Вам даны 2 списка одинаковой длины, в первом списке имена людей, во втором зарплаты, +# вам необходимо получить на выходе словарь, где ключ - имя, значение - зарплата. +# Запишите результаты в файл salary.txt так, чтобы на каждой строке было 2 столбца, +# столбцы разделяются пробелом, тире, пробелом. в первом имя, во втором зарплата, например: Vasya - 5000 +# После чего прочитайте файл, выведите построчно имя и зарплату минус 13% (налоги ведь), +# Есть условие, не отображать людей получающих более зарплату 500000, как именно +# выполнить условие решать вам, можете не писать в файл +# можете не выводить, подумайте какой способ будет наиболее правильным и оптимальным, +# если скажем эти файлы потом придется передавать. +# Так же при выводе имя должно быть полностью в верхнем регистре! +# Подумайте вспоминая урок, как это можно сделать максимально кратко, используя возможности языка Python. +people = ['Ivan', 'Dmitriy', 'Denis', 'Anton', 'Irina', 'Olga', 'Mark'] +money = [5000, 10000, 400000, 15000, 50000, 3000, 30000] + +max_salary = 50000 +tax_share = 13 + +list1 = dict(zip(people, money)) + +with open('salary.txt', 'w+', encoding='utf-8') as file: + for key, value in list1.items(): + if value < max_salary: + file.write(f'{key} - {value}\n') + file.seek(0) + +with open('salary.txt', 'r+', encoding='utf-8') as file: + for line in file: + person, salary = line.split(' - ') + tax = int(salary)*(tax_share/100) + net_salary = int(salary) - int(tax) + print(f'{person} получил(а) зарплату в размере {net_salary}р., налог составил {tax}р.') \ No newline at end of file diff --git a/lesson03/home_work/salary.txt b/lesson03/home_work/salary.txt new file mode 100644 index 000000000..0d217d182 --- /dev/null +++ b/lesson03/home_work/salary.txt @@ -0,0 +1,5 @@ +Ivan - 5000 +Dmitriy - 10000 +Anton - 15000 +Olga - 3000 +Mark - 30000 diff --git a/lesson04/home_work/hw04_easy.py b/lesson04/home_work/hw04_easy.py index 85035ea8b..f0f202055 100644 --- a/lesson04/home_work/hw04_easy.py +++ b/lesson04/home_work/hw04_easy.py @@ -1,18 +1,37 @@ # Все задачи текущего блока решите с помощью генераторов списков! # Задание-1: -# Дан список, заполненный произвольными целыми числами. +# Дан список, заполненный произвольными целыми числами. # Получить новый список, элементы которого будут # квадратами элементов исходного списка # [1, 2, 4, 0] --> [1, 4, 16, 0] +list1 = [1, 2, 4, 0] +list2 = [x ** 2 for x in list1] +print(list2) + + + # Задание-2: # Даны два списка фруктов. # Получить список фруктов, присутствующих в обоих исходных списках. +fr1 = ['Apple', 'Lime', 'Mango', 'Pineapple', 'Fig', 'Strawberry'] +fr2 = ['Jostaberry', 'Jujube', 'Mangosteen', 'Mango', 'Strawberry'] +fr3 = [y for y in fr1 if y in fr2] +print(fr3) + + + # Задание-3: # Дан список, заполненный произвольными числами. # Получить список из элементов исходного, удовлетворяющих следующим условиям: # + Элемент кратен 3 # + Элемент положительный # + Элемент не кратен 4 + +import random +list3 = [random.randint(-100, 100) for x in range(40)] +print(list3) +list2 = [z for z in list3 if (z % 3 == 0) and z > 0 and (z % 4 !=0)] +print(list2) \ No newline at end of file diff --git a/lesson04/home_work/hw04_hard.py b/lesson04/home_work/hw04_hard.py index 3b12dc315..43c1e45e2 100644 --- a/lesson04/home_work/hw04_hard.py +++ b/lesson04/home_work/hw04_hard.py @@ -1,49 +1,70 @@ -# Задание-1: -# Матрицы в питоне реализуются в виде вложенных списков: -# Пример. Дано: -matrix = [[1, 0, 8], - [3, 4, 1], - [0, 4, 2]] - -# Выполнить поворот (транспонирование) матрицы -# Пример. Результат: -# matrix_rotate = [[1, 3, 0], -# [0, 4, 4], -# [8, 1, 2]] - -# Суть сложности hard: Решите задачу в одну строку - -# Задание-2: -# Найдите наибольшее произведение пяти последовательных цифр в 1000-значном числе. -# Выведите произведение и индекс смещения первого числа последовательных 5-ти цифр. -# Пример 1000-значного числа: -number = """ -73167176531330624919225119674426574742355349194934 -96983520312774506326239578318016984801869478851843 -85861560789112949495459501737958331952853208805511 -12540698747158523863050715693290963295227443043557 -66896648950445244523161731856403098711121722383113 -62229893423380308135336276614282806444486645238749 -30358907296290491560440772390713810515859307960866 -70172427121883998797908792274921901699720888093776 -65727333001053367881220235421809751254540594752243 -52584907711670556013604839586446706324415722155397 -53697817977846174064955149290862569321978468622482 -83972241375657056057490261407972968652414535100474 -82166370484403199890008895243450658541227588666881 -16427171479924442928230863465674813919123162824586 -17866458359124566529476545682848912883142607690042 -24219022671055626321111109370544217506941658960408 -07198403850962455444362981230987879927244284909188 -84580156166097919133875499200524063689912560717606 -05886116467109405077541002256983155200055935729725 -71636269561882670428252483600823257530420752963450""" - - -# Задание-3 (Ферзи): -# Известно, что на доске 8×8 можно расставить 8 ферзей так, чтобы они не били -# друг друга. Вам дана расстановка 8 ферзей на доске. -# Определите, есть ли среди них пара бьющих друг друга. -# Программа получает на вход восемь пар чисел, -# каждое число от 1 до 8 — координаты 8 ферзей. -# Если ферзи не бьют друг друга, выведите слово NO, иначе выведите YES. +# Задание: +# Эта программа являет собой упрощенный симулятор банкомата, пользователь вводит номер карты и пин код, +# в случае успеха программа предлагает меню для выбора действий, где он может проверить счет, или снять деньги. +# +# Эта задача не так похожа на другие, но она, как никогда прежде приближена к реалиям разработки общего проекта. +# +# Ваша задача исправить ошибки логики, и выполнить проверки данных, которые вводит пользователь. +# Обязательно убедитесь, что вы выполнили все проверки, попробуйте сами сломать свою программу вводя неверные данные! + +person1 = {'card': 4276123465440000, 'pin': 9090, 'money': 100.90} +person2 = {'card': 4276123465440001, 'pin': 9091, 'money': 200.90} +person3 = {'card': 4276123465440002, 'pin': 9092, 'money': 300.90} + +bank = [person1, person2, person3] + + +def get_person_by_card(card_number): + for person in bank: + if person['card'] == card_number: + return person + + +def is_pin_valid(person, pin_code): + if person['pin'] == pin_code: + return True + return False + + +def check_account(person): + return round(person['money'], 2) + + +def withdraw_money(person, money): + if person['money'] - money == 0: + person['money'] -= money + return 'Вы сняли {} рублей.'.format(money) + else: + return 'На вашем счету недостаточно средств!' + + +def process_user_choice(choice, person): + if choice == '1': + print(check_account(person)) + elif choice == '2': + count = float(input('Сумма к снятию:')) + print(withdraw_money(person, count)) + + +def start(): + card_number, pin_code = input('Введите номер карты и пин код через пробел:').split() + + card_number = int(card_number) + pin_code = int(pin_code) + person = get_person_by_card(card_number) + if person and is_pin_valid(person, pin_code): + while True: + choice = int(input('Выберите пункт:\n' + '1. Проверить баланс\n' + '2. Снять деньги\n' + '3. Выход\n' + '---------------------\n' + 'Ваш выбор:')) + if choice == 3: + break + process_user_choice(choice, person) + else: + print('Номер карты или пин код введены не верно!') + + +start() \ No newline at end of file diff --git a/lesson04/home_work/hw04_normal.py b/lesson04/home_work/hw04_normal.py index 739dd33f8..609a485bd 100644 --- a/lesson04/home_work/hw04_normal.py +++ b/lesson04/home_work/hw04_normal.py @@ -1,53 +1,82 @@ -# Задание-1: -# Вывести символы в нижнем регистре, которые находятся вокруг -# 1 или более символов в верхнем регистре. -# Т.е. из строки "mtMmEZUOmcq" нужно получить ['mt', 'm', 'mcq'] -# Решить задачу двумя способами: с помощью re и без. - -line = 'mtMmEZUOmcqWiryMQhhTxqKdSTKCYEJlEZCsGAMkgAYEOmHBSQsSUHKvSfbmxULaysmNO'\ - 'GIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLeclMwAoktKlfUBJHPsnawvjPhfgewVzK'\ - 'TUfSYtBydXaVIpxWjNKgXANvIoumesCSSvjEGRJosUfuhRRDUuTQwLlJJJDdkVjfSAHqn'\ - 'LxooisBDWuxIhyjJaXDYwdoVPnsllMngNlmkpYOlqXEFIxPqqqgAWdJsOvqppOfyIVjXa'\ - 'pzGOrfinzzsNMtBIOclwbfRzytmDgEFUzxvZGkdOaQYLVBfsGSAfJMchgBWAsGnBnWete'\ - 'kUTVuPluKRMQsdelzBgLzuwiimqkFKpyQRzOUyHkXRkdyIEBvTjdByCfkVIAQaAbfCvzQ'\ - 'WrMMsYpLtdqRltXPqcSMXJIvlBzKoQnSwPFkapxGqnZCVFfKRLUIGBLOwhchWCdJbRuXb'\ - 'JrwTRNyAxDctszKjSnndaFkcBZmJZWjUeYMdevHhBJMBSShDqbjAuDGTTrSXZywYkmjCC'\ - 'EUZShGofaFpuespaZWLFNIsOqsIRLexWqTXsOaScgnsUKsJxiihwsCdBViEQBHQaOnLfB'\ - 'tQQShTYHFqrvpVFiiEFMcIFTrTkIBpGUflwTvAzMUtmSQQZGHlmQKJndiAXbIzVkGSeuT'\ - 'SkyjIGsiWLALHUCsnQtiOtrbQOQunurZgHFiZjWtZCEXZCnZjLeMiFlxnPkqfJFbCfKCu'\ - 'UJmGYJZPpRBFNLkqigxFkrRAppYRXeSCBxbGvqHmlsSZMWSVQyzenWoGxyGPvbnhWHuXB'\ - 'qHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQNJFa'\ - 'XiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQoiQ'\ - 'zTYwZAiRwycdlHfyHNGmkNqSwXUrxGc' - - -# Задание-2: -# Вывести символы в верхнем регистре, слева от которых находятся -# два символа в нижнем регистре, а справа - два символа в верхнем регистре. -# Т.е. из строки -# "GAMkgAYEOmHBSQsSUHKvSfbmxULaysmNOGIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLec" -# нужно получить список строк: ['AY', 'NOGI', 'P'] -# Решить задачу двумя способами: с помощью re и без. - -line_2 = 'mtMmEZUOmcqWiryMQhhTxqKdSTKCYEJlEZCsGAMkgAYEOmHBSQsSUHKvSfbmxULaysm'\ - 'NOGIPHpEMujalpPLNzRWXfwHQqwksrFeipEUlTLeclMwAoktKlfUBJHPsnawvjPhfgewV'\ - 'fzKTUfSYtBydXaVIpxWjNKgXANvIoumesCSSvjEGRJosUfuhRRDUuTQwLlJJJDdkVjfSA'\ - 'HqnLxooisBDWuxIhyjJaXDYwdoVPnsllMngNlmkpYOlqXEFIxPqqqgAWdJsOvqppOfyIV'\ - 'jXapzGOrfinzzsNMtBIOclwbfRzytmDgEFUzxvZGkdOaQYLVBfsGSAfJMchgBWAsGnBnW'\ - 'etekUTVuPluKRMQsdelzBgLzuwiimqkFKpyQRzOUyHkXRkdyIEBvTjdByCfkVIAQaAbfC'\ - 'vzQWrMMsYpLtdqRltXPqcSMXJIvlBzKoQnSwPFkapxGqnZCVFfKRLUIGBLOwhchWCdJbR'\ - 'uXbJrwTRNyAxDctszKjSnndaFkcBZmJZWjUeYMdevHhBJMBSShDqbjAuDGTTrSXZywYkm'\ - 'jCCEUZShGofaFpuespaZWLFNIsOqsIRLexWqTXsOaScgnsUKsJxiihwsCdBViEQBHQaOn'\ - 'LfBtQQShTYHFqrvpVFiiEFMcIFTrTkIBpGUflwTvAzMUtmSQQZGHlmQKJndiAXbIzVkGS'\ - 'euTSkyjIGsiWLALHUCsnQtiOtrbQOQunurZgHFiZjWtZCEXZCnZjLeMiFlxnPkqfJFbCf'\ - 'KCuUJmGYJZPpRBFNLkqigxFkrRAppYRXeSCBxbGvqHmlsSZMWSVQyzenWoGxyGPvbnhWH'\ - 'uXBqHFjvihuNGEEFsfnMXTfptvIOlhKhyYwxLnqOsBdGvnuyEZIheApQGOXWeXoLWiDQN'\ - 'JFaXiUWgsKQrDOeZoNlZNRvHnLgCmysUeKnVJXPFIzvdDyleXylnKBfLCjLHntltignbQ'\ - 'oiQzTYwZAiRwycdlHfyHNGmkNqSwXUrxGC' - -# Задание-3: -# Напишите скрипт, заполняющий указанный файл (самостоятельно задайте имя файла) -# произвольными целыми цифрами, в результате в файле должно быть -# 2500-значное произвольное число. -# Найдите и выведите самую длинную последовательность одинаковых цифр -# в вышезаполненном файле. +# Эти задачи необходимо решить используя регулярные выражения! + +# Задача - 1 +# Запросите у пользователя имя, фамилию, email. Теперь необходимо совершить проверки, имя и фамилия должны иметь заглавные первые буквы. +# email - не должен иметь заглавных букв и должен быть в формате: текст в нижнем регистре, допускается нижнее подчеркивание и цифры, потом @, потом текст, допускаются цифры, точка, ru или org или com. +# Например: +# Пупкин василий - неверно указано имя, te$T@test.net - неверно указан email (спецсимвол, заглавная буква, .net), te_4_st@test.com - верно указан. + +import re + +pattern_names = '^[А-ЯЁ][а-яё]+$' +pattern_email = '^[a-z_0-9]+@[a-z_0-9]+\.com|ru|org$' + +while True: + name = input('Введите Имя ', ) + if re.search(pattern_names, name): + break + print('Имя введено неверно, пожалуйста ознакомьтесь с инструкцией заполнения формы') + +while True: + family_name = input('Введите фамилию ', ) + if re.search(pattern_names, family_name): + break + print('Фамилия введена неверно, пожалуйста ознакомьтесь с инструкцией заполнения формы') + +while True: + email = input('Введите адрес электронной почты ', ) + if re.search(pattern_email, email): + break + print('Адрес введен неверно, пожалуйста ознакомьтесь с инструкцией заполнения формы') + +person = {'first_name': name, 'surname': family_name, 'el_address': email} +print(person) + + + +# Задача - 2: +# Вам дан текст: + +some_str = ''' +Мороз и солнце; день чудесный! +Еще ты дремлешь, друг прелестный — +Пора, красавица, проснись: +Открой сомкнуты негой взоры +Навстречу северной Авроры, +Звездою севера явись! +Вечор, ты помнишь, вьюга злилась, +На мутном небе мгла носилась; +Луна, как бледное пятно, +Сквозь тучи мрачные желтела, +И ты печальная сидела — +А нынче... погляди в окно: +Под голубыми небесами +Великолепными коврами, +Блестя на солнце, снег лежит; +Прозрачный лес один чернеет, +И ель сквозь иней зеленеет, +И речка подо льдом блестит. +Вся комната янтарным блеском +Озарена. Веселым треском +Трещит затопленная печь. +Приятно думать у лежанки. +Но знаешь: не велеть ли в санки +Кобылку бурую запречь? +Скользя по утреннему снегу, +Друг милый, предадимся бегу +Нетерпеливого коня +И навестим поля пустые, +Леса, недавно столь густые, +И берег, милый для меня.''' + +t_pattern = '\.{2,}' + +if re.search(t_pattern, some_str): + print('В тексте найдено более одной точки подряд.') +else: + print('В тексте не найдено более одной точки подряд.') + + + +# Необходимо с помощью регулярных выражений определить есть ли в тексте подряд +# более одной точки, при любом исходе сообщите результат пользователю! \ No newline at end of file