From f74b813bacc6fe16503a291b864630aaf30beb34 Mon Sep 17 00:00:00 2001 From: Shamil Salakhetdinov Date: Fri, 1 Mar 2019 12:37:49 +0300 Subject: [PATCH 1/3] hw02 easy task solution --- hw02_easy.py | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 hw02_easy.py diff --git a/hw02_easy.py b/hw02_easy.py new file mode 100644 index 0000000..5e259b3 --- /dev/null +++ b/hw02_easy.py @@ -0,0 +1,61 @@ +# https://github.com/GeekBrainsTutorial/Python_lessons_basic/pull/580 + +# Задача-1: +# Дан список фруктов. +# Напишите программу, выводящую фрукты в виде нумерованного списка, +# выровненного по правой стороне. + +# Пример: +# Дано: ["яблоко", "банан", "киви", "арбуз"] +# Вывод: +# 1. яблоко +# 2. банан +# 3. киви +# 4. арбуз + +# Подсказка: воспользоваться методом .format() +# https://pyformat.info/ +def EnumerateFruits(fruits): + maxlen = 0 + for fruit in fruits: + if len(fruit) > maxlen: maxlen = len(fruit) + formatStr = '{}. {:>' + str(maxlen) + '}' + i = 1 + for fruit in fruits: + print (formatStr.format(i, fruit)) + i = i+1 + +#test +EnumerateFruits(["яблоко", "банан", "киви", "арбуз", "watermelon"]) + +# Задача-2: +# Даны два произвольные списка. +# Удалите из первого списка элементы, присутствующие во втором списке. +def SubstractList(list1, list2): + return set(list1) - set(list2) + +#test +print( \ + SubstractList ( \ + ["яблоко", "банан", "киви", "арбуз", "watermelon"], \ + ["яблоко", "киви", "watermelon", "orange"] \ + )\ +) + + +# Задача-3: +# Дан произвольный список из целых чисел. +# Получите НОВЫЙ список из элементов исходного, выполнив следующие условия: +# если элемент кратен двум, то разделить его на 4, если не кратен, то умножить на два. +def ProcessList(list1): + list2 = [] + for x in list1: + if x % 2 == 0: + list2.append(x / 4) + else: + list2.append(x * 2) + return list2 + +list1 = [2, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41] +list2 = ProcessList(list1) +print(list2) From 889abebc47c6528ee88d328239e4bdb7c748bd7e Mon Sep 17 00:00:00 2001 From: Shamil Salakhetdinov Date: Fri, 1 Mar 2019 12:38:27 +0300 Subject: [PATCH 2/3] hw02 normal task solution --- hw02_normal.py | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 hw02_normal.py diff --git a/hw02_normal.py b/hw02_normal.py new file mode 100644 index 0000000..133d644 --- /dev/null +++ b/hw02_normal.py @@ -0,0 +1,79 @@ +# Задача-1: +# Дан список, заполненный произвольными целыми числами, получите новый список, +# элементами которого будут квадратные корни элементов исходного списка, +# но только если результаты извлечения корня не имеют десятичной части и +# если такой корень вообще можно извлечь +# Пример: Дано: [2, -5, 8, 9, -25, 25, 4] Результат: [3, 5, 2] +import math + +def CalcSQRTs(list): + resultList = [] + for x in list: + if x < 0: continue + if int(math.sqrt(x)) != math.sqrt(x): continue + resultList.append(int(math.sqrt(x))) + return resultList + +#test +print(CalcSQRTs([2, -5, 8, 9, -25, 25, 4] )) + +# Задача-2: Дана дата в формате dd.mm.yyyy, например: 02.11.2013. +# Ваша задача вывести дату в текстовом виде, например: второе ноября 2013 года. +# Склонением пренебречь (2000 года, 2010 года) +def PrinFulltDate(date): + onesAndTeens = \ + ["первое","второе","третье","четвертое","пятое","шестое","седьмое","восьмое","девятое", \ + "десятое", "одиннадцатое","двенадцатое","тринадцатое","четырнадцатое", \ + "пятнадцатое","шестнадцатое","семнадцатое","восемнадцатое","девятнадцатое"] + tens = ["двадцать","тридцать"] + months = ["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"] + dateParts = date.split('.') + dayInWords = 0 + if int(dateParts[0]) < 20: + dayInWords = onesAndTeens[int(dateParts[0])-1] + else: + dayInWords = tens[int(dateParts[0][0])-2] + ' ' + onesAndTeens[int(dateParts[0][1])-1] + + print (f'{dayInWords} {months[int(dateParts[1])-1]} {dateParts[2]} года') + +PrinFulltDate("02.11.2013") +PrinFulltDate("12.03.2017") +PrinFulltDate("25.10.2014") +PrinFulltDate("31.05.2018") + +# Задача-3: Напишите алгоритм, заполняющий список произвольными целыми числами +# в диапазоне от -100 до 100. В списке должно быть n - элементов. +# Подсказка: +# для получения случайного числа используйте функцию randint() модуля random +import random +def randomNumbersList(n): + randomNumbers = [] + for x in range(n): + randomNumbers.append(random.randrange(-100, 100, 1)) + return randomNumbers + +#tests +print(randomNumbersList(10)) +print(randomNumbersList(15)) +print(randomNumbersList(20)) + +# Задача-4: Дан список, заполненный произвольными целыми числами. +# Получите новый список, элементами которого будут: +# а) неповторяющиеся элементы исходного списка: +# например, lst = [1, 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 2, 4, 5, 6] +def GetUniqueNumbersSetFromList(list): + return set(list) + +#test +print(GetUniqueNumbersSetFromList([1, 2, 4, 5, 6, 2, 5, 2])) + +# б) элементы исходного списка, которые не имеют повторений: +# например, lst = [1 , 2, 4, 5, 6, 2, 5, 2], нужно получить lst2 = [1, 4, 6] +def GetNotRepeatableUniqueNumbersSetFromList(list): + resultSet = set() + for x in set(list): + if list.count(x) == 1 : resultSet.add(x) + return resultSet + +#test +print(GetNotRepeatableUniqueNumbersSetFromList([1, 2, 4, 5, 6, 2, 5, 2])) From b6c615e917e2584057f60967cd792e9d607c4809 Mon Sep 17 00:00:00 2001 From: Shamil Salakhetdinov Date: Fri, 1 Mar 2019 12:40:52 +0300 Subject: [PATCH 3/3] hw02 hard task solution --- hw02_hard.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 hw02_hard.py diff --git a/hw02_hard.py b/hw02_hard.py new file mode 100644 index 0000000..e35cc2b --- /dev/null +++ b/hw02_hard.py @@ -0,0 +1,63 @@ +# Hard +# +# Задача-1: Пользователь вводит текст, необходимо разбить его по словам и +# выдать статистику по тексту +# +# 1. Сколько слов в тексте? +# 2. Сколько букв английского алфавита в тексте? +# +import re +text = 'The, quick- Быстрая brown бурая : fox лиса ? jumps! over перепрыгивает the lazy? ленивую dog собаку.' +text = input("Введите текст: ") or text +print(f'Введенный текст: {text}') +words = re.findall('\w+', text) +print(f'Кол-во слов в тексте = {len(words)} - {words}') + +englishChars = re.findall('[A-Za-z]', text) +print(f'Кол-во английских букв в тексте = {len(englishChars)} - {englishChars}') + +# Задача-2 Пользователь вводит два текста, необходимо найти все слова, которые есть в обоих текстах. Без учета регистра +text1 = 'The, quick- Быстрая brown бурая : fox лиса ? jumps! over перепрыгивает the lazy? ленивую dog собаку.'.lower() +text2 = 'Brown fox and a lazy dog.'.lower() +text1 = input("Введите текст №1:" ) or text1 +text2 = input("Введите текст №2:" ) or text2 + +print(f'Введенный текст №1: {text1}') +print(f'Введенный текст №2: {text2}') + +wordsSet1 = set(re.findall('\w+', text1)) +wordsSet2 = set(re.findall('\w+', text2)) +commonWords = wordsSet1.intersection(wordsSet2) +print(f'Общие слова: {commonWords}') + +# EXTRA +# Есть два словаря. Один это рецепт блюда, второй это список продуктов, которые есть в холодильнике. +# +# Ключ это название продукта, значение - это количество. +# +# Нужно сравнить два словаря и дать словарь, в котором будет список покупок +# Если для рецепта всё есть, то сказать что ничего не нужно +# Разницей по измерению гр, мл, шт. Пренебречь + +def MakeShoppingList(recepy, fridgeContents): + shoppingList = dict() + for item in recepy: + if item in fridgeContents: + if recepy[item] > fridgeContents[item]: + shoppingList[item] = recepy[item] - fridgeContents[item] + else: + shoppingList[item] = recepy[item] + + if len(shoppingList) == 0: + print('Для приготовления блюда все есть'); + else: + print('Список покупок:') + print(shoppingList) + +#tests +recepy = {"meat": 500, "onion": 200, "carrot":250, "rice":150, "olive oil":50, "garlic":4 } +fridgeContents = {"meat": 500, "carrot":100, "rice":150, "garlic":4 } +MakeShoppingList(recepy, fridgeContents) + +fridgeContents = {"meat": 500, "onion": 200, "carrot":250, "rice":150, "olive oil":50, "garlic":4 } +MakeShoppingList(recepy, fridgeContents)