Модуль 21. Задача 8. Список списков 2

Модуль 21. Задача 8. Список списков 2

Мы уже работали с многомерными списками и решали задачи, где с помощью list comprehensions “выпрямляли” его в один. Однако, такой фокус не пройдёт, если у элементов разные уровни вложенности и этих списков неограниченное количество.

Дан вот такой список:

nice_list = [1, 2, [3, 4], [[5, 6, 7], [8, 9, 10]], 
             [[11, 12, 13], [14, 15], [16, 17, 18]]]

Напишите рекурсивную функцию, которая “раскрывает” все вложенные списки, то есть оставляет только внешний список.

Ответ:

Ответ: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

Подсказка: можно возвращать списки и срезы списков

ЧИТАТЬ ДАЛЕЕ …
Модуль 21. Задача 7. Продвинутая функция sum

Модуль 21. Задача 7. Продвинутая функция sum

Как мы знаем, в Питоне есть полезная функция sum, которая умеет находить сумму элементов списков. Однако, для работы иногда базовых возможностей функций не хватает и приходится их усовершенствовать.

Напишите свою функцию sum, которая должна быть более гибкой, чем стандартная функция sum. Вот что она должна уметь делать:

  • Складывать числа из списка списков
  • Складывать из набора параметров

Основной код оставьте пустым или закомментированным (используйте его только для тестирования).

Примеры вызовов функции:

sum([[1, 2, [3]], [1], 3])
Ответ: 10

sum(1, 2, 3, 4, 5)
Ответ: 15
ЧИТАТЬ ДАЛЕЕ …
Lazydocker: Революция в управлении Docker! Полный гайд от установки до про-использования

Delphi — TFieldType — Поля, описания и их размерность.

Типы и описание полей в модуле DB.pas

ЗначениеОписаниеПределы
1ftUnknownНеизвестный или неопределенный
2ftStringПоле символов или строк
3ftSmallint16-битное целочисленное поле0 .. 65 535
-32 768 .. 32 767
4ftInteger32-битное целочисленное поле0 .. 4 294 967 295
-2 147 483 648 .. 2 147 483 647
5ftWord16-битное целое число без знака0 .. 65 535
6ftBooleanБулево полеFalse / True
7ftFloatЧисловое поле с плавающей запятой
8ftCurrencyДенежное поле
9ftBCDДвоичное кодированное десятичное поле, которое может быть преобразовано в тип валюты без потери точности
10ftDateПоле даты
11ftTimeПоле времени
12ftDateTimeПоле даты и времени
13ftBytesФиксированное количество байтов (двоичное хранилище)
14ftVarBytesПеременное количество байтов (двоичное хранилище)
15ftAutoIncАвтоматическое инкрементное 32-битное целое поле счетчика0 .. 4 294 967 295
16ftBlobПоле Binary Large OBject
17ftMemoТекстовое поле
18ftGraphicПоле изображения
19ftFmtMemoОтформатированное текстовое поле Memo
20ftParadoxOleПоле Paradox OLE
21ftDBaseOleПоле dBASE OLE
22ftTypedBinaryТипизированное двоичное поле
23ftCursorВыведите курсор из хранимой процедуры Oracle (только TParam)
24ftFixedCharФиксированное поле символов
25ftWideStringПоле длинной строки
26ftLargeintInt64 большое целое поле0 .. 18 446 744 073 709 551 616
-9 223 372 036 854 775 808 .. 9 223 372 036 854 775 807
27ftADTПоле абстрактных данных (Abstract Data Type)
28ftArrayПоле массива
29ftReferenceПоле REF
30ftDataSetПоле DataSet
31ftOraBlobПоля BLOB в таблицах Oracle 8
32ftOraClobПоля CLOB в таблицах Oracle 8
33ftVariantДанные неизвестного или неопределенного типа
34ftInterfaceСсылки на интерфейсы (IUnknown)
35ftIDispatchСсылки на интерфейсы IDispatch
36ftGuidЗначения глобального идентификатора (GUID)
37ftTimeStampПоле даты и времени, доступное через dbExpress
38ftFMTBcdДвоичное кодированное десятичное поле, которое слишком велико для ftBCD.
39*ftParamsТип поля для TParams
40*ftStreamТип поля для параметра TStream
41*ftTimeStampOffsetПоле метки времени с информацией о часовом поясе
42*ftObjectТип поля для параметра TObject; только для DataSnap
43*ftSingleЧисло с плавающей запятой с одиночной точностью

Номера полей соответствуют порядку в Delphi 2010. Номера со звездочкой в Delphi 2010 отсутствуют.

Источник данных Embarcadero

Модуль 21. Задача 6. Глубокое копирование

Модуль 21. Задача 6. Глубокое копирование

Вы сделали структуру сайта для заказчика для продажи телефонов

site = {
    'html': {
        'head': {
            'title': 'Куплю/продам телефон недорого'
        },
        'body': {
            'h2': 'У нас самая низкая цена на iphone',
            'div': 'Купить',
            'p': 'продать'
        }
    }
}

Заказчик рассказал своим коллегам на рынке и они тоже захотели такой сайт, только для своих товаров. Вы посчитали, что это легкая задача и быстро принялись за работу.

Напишите программу, которая запрашивает у клиента сколько будет сайтов, а затем запрашивает название продукта и после каждого запроса выводит на экран активные сайты.
Условия структуру сайта нужно описать один раз, копипасту никто не любит.

Подсказка: используйте рекурсию

ЧИТАТЬ ДАЛЕЕ …
Модуль 21. Задача 5. Ускоряем работу функции

Модуль 21. Задача 5. Ускоряем работу функции

У нас есть функция, которая делает определённые действия с входными данными:

  1. Берёт факториал от числа
  2. Результат делит на куб входного числа
  3. И получившиеся число возводит в 10 степень
def calculating_math_func(data):
    result = 1
    for index in range(1, data + 1):
        result *= index
    result /= data ** 3
    result = result ** 10
    return result

Однако каждый раз нам приходится делать сложные вычисления, хотя входные и выходные данные одни и те же. И тут наши знания тонкостей python должны нам помочь.

Оптимизируйте функцию так, чтобы высчитывать факториал для одного и того же числа только один раз.

Подсказка: вспомните что происходит с изменяемыми данными, если их выставить по умолчанию в параметрах функции.

ЧИТАТЬ ДАЛЕЕ …
Модуль 21. Задача 4. Поиск элемента 2

Модуль 21. Задача 4. Поиск элемента 2

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

site = {
    'html': {
        'head': {
            'title': 'Мой сайт'
        },
        'body': {
            'h2': 'Здесь будет мой заголовок',
            'div': 'Тут, наверное, какой-то блок',
            'p': 'А вот здесь новый абзац'
        }
    }
}

Пример 1:

Введите искомый ключ: head
Хотите ввести максимальную глубину? Y/N: n
Значение ключа: {'title': 'Мой сайт'}
ЧИТАТЬ ДАЛЕЕ …
Модуль 21.  Задача 3. Ряд Фибоначчи

Модуль 21. Задача 3. Ряд Фибоначчи

Числа Фибоначчи – это ряд чисел, в котором каждое следующее число равно сумме двух предыдущих: 1, 1, 2, 3, 5, 8, 13, …

Пользователь вводит num_pos. Напишите функцию, которая выводит число, которое стоит на позиции num_pos в ряде Фибоначчи

Числа Фибоначчи

Пример 1:

Введите позицию числа в ряде Фибоначчи: 6

Число: 8
ЧИТАТЬ ДАЛЕЕ …
Модуль 21. Задача 2. Свой zip 2

Модуль 21. Задача 2. Свой zip 2

Написав аналог функции zip на собеседовании вы вспомнили, что этот код можно сделать даже лучше, и резко вырвали листок с кодом из рук работодателя, оставив его в прострации.

Напишите функцию, которая будет являться аналогом функции zip и сделайте так, чтобы программа работала с любыми итерируемыми типами данных.
Циклами (за исключением генераторов), условными операторами и функциями определения типа(isinstance или type) пользоваться нельзя.

Функция должна возвращать список с кортежами, в котором n-ый кортеж состоит из n-ых элементов всех последовательностей.
Например, десятый кортеж будет содержать десятый элемент каждой из переданных последовательностей.

Основной код оставьте пустым или закомментированным (используйте его только для тестирования).

Пример 1:

a = [{‘x’: 4}, ‘b’, ‘z’, ‘d’]
b = (10, {20,}, [30], ‘z’)

print(my_zip(a, b)) -> [({‘x’: 4}, 10), (‘b’, {20}), (‘z’, [30]), (‘d’, ‘z’)]
ЧИТАТЬ ДАЛЕЕ …
Модуль 21. Задача 1. Challenge 2

Модуль 21. Задача 1. Challenge 2

Вдохновившись мотивацией Антона, ваш друг тоже решил поставить перед собой задачу, но не сильно связанную с математикой, а именно — написать функцию, которая выводит все числа от 1 до num без использования циклов. Помогите другу реализовать такую функцию.

Пример работы программы:

Введите num: 10
1
2
3
4
5
6
7
8
9
10
ЧИТАТЬ ДАЛЕЕ …
Модуль 20. Задача 10. Свой zip

Модуль 20. Задача 10. Свой zip

В самом конце собеседования вас неожиданно спросили: “Расскажите, что делает функция zip?”. В итоге, чтобы произвести максимальное впечатление, вы решили не только рассказать про неё, но и написать её аналог.

Даны строка и кортеж из чисел. Напишите программу, которая создаёт генератор из пар кортежей “символ — число”. Затем выведите на экран сам генератор и кортежи

Пример:

Строка: abcd
Кортеж чисел: (10, 20, 30, 40)

Результат:
<generator object <genexpr> at 0x00000204A4234048>
('a', 10)
('b', 20)
('c', 30)
('d', 40)

Дополнительно: создайте полный аналог функции zip, то есть сделайте так, чтобы программа работала с любыми итерируемыми типами данных.

Решение:

Решение можно скачать с Boosty.to


Как можно отблагодарить:

  • Оформить удобную для вас подписку на Boosty.to
  • Разово поддержать через DonationAlerts
Модуль 20. Задача 9. Протокол соревнований

Модуль 20. Задача 9. Протокол соревнований

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

Здравствуйте! Мы собираемся устраивать соревнования по [данные засекречены] и хотим, чтобы вы написали эффективную программу, которая составляла бы нам протокол и определяла победителя и призёров. О логике работы программы ниже.

Правила соревнований:

  1. Участники имеют право играть несколько раз. Количество попыток одного участника не ограничивается.
  2. Окончательный результат участника определяется по одной игре, лучшей для данного участника.
  3. Более высокое место в соревнованиях занимает участник, показавший лучший результат.
  4. При равенстве результатов более высокое место занимает участник, раньше показавший лучший результат.

Как проходят соревнования:

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

Напишите программу, которая по данным протокола определяет победителя и призёров. Гарантируется, что в чемпионате участвует не менее трёх игроков.

ЧИТАТЬ ДАЛЕЕ …
Как изменить пароль пользователя в Oracle?

Как изменить пароль пользователя в Oracle?

Вопрос: Как изменить пароль пользователя в Oracle?
Ответ: Чтобы изменить пароль пользователя в Oracle, вам нужно выполнить команду alter user.

Синтаксис:

Синтаксис смены пароля в Oracle:

ALTER USER user_name IDENTIFIED BY new_password;

Параметры или аргументы:

user_name — Пользователь, пароль которого вы хотите изменить.
new_password — Новый пароль для назначения.

Пример:

Давайте рассмотрим пример того, как изменить пароль для пользователя в Oracle/PLSQL.

ALTER USER smithj IDENTIFIED BY autumn;

В этом примере будет изменен пароль для пользователя с именем smithj и установлен новый пароль на autumn.


Как можно отблагодарить:

  • Оформить удобную для вас подписку на Boosty.to
  • Разово поддержать через DonationAlerts
Модуль 20. Задача 8. Контакты 3

Модуль 20. Задача 8. Контакты 3

Мы уже помогали Степану с реализацией телефонной книги (контактов) на телефоне, однако внезапно оказалось, что книге не хватает ещё одной очень полезной функции: поиска!

Напишите программу, которая бесконечно запрашивает у пользователя действие, которое он хочет совершить: добавить контакт или найти человека в списке контактов по фамилии.

Действие “добавить контакт”: программа запрашивает имя и фамилию контакта, затем номер телефона, после этого добавляет их в словарь и выводит на экран текущий словарь контактов. Если этот человек уже есть в словаре, то выведете соотвествующее сообщение.

Действие “поиск человека по фамилии”: программа запрашивает фамилию и выводит все контакты с такой фамилией и их номера телефонов. Поиск не должен зависеть от регистра символов.

Пример работы программы:

Введите номер действия: 
 1. Добавить контакт 
 2. Найти человека 
1
Введите имя и фамилию нового контакта (через пробел): Иван Сидоров
Введите номер телефона: 888
Текущий словарь контактов: {('Иван', 'Сидоров'): 888}
Введите номер действия: 
 1. Добавить контакт 
 2. Найти человека 
1
Введите имя и фамилию нового контакта (через пробел): Иван Сидоров
Такой человек уже есть в контактах.
Текущий словарь контактов: {('Иван', 'Сидоров'): 888}
Введите номер действия: 
 1. Добавить контакт 
 2. Найти человека 
1
Введите имя и фамилию нового контакта (через пробел): Алиса Петрова
Введите номер телефона: 999
Текущий словарь контактов: {('Иван', 'Сидоров'): 888, ('Алиса', 'Петрова'): 999}
Введите номер действия: 
 1. Добавить контакт 
 2. Найти человека 
2
Введите фамилию для поиска: Сидоров
Иван Сидоров 888
Введите номер действия: 
 1. Добавить контакт 
 2. Найти человека 
…….
ЧИТАТЬ ДАЛЕЕ …
Модуль 20. Задача 7. Функция сортировки

Модуль 20. Задача 7. Функция сортировки

Напишите функцию, которая сортирует кортеж, состоящий из целых чисел по возрастанию и возвращает его. Если хотя бы один элемент не является целым числом, то функция возвращает исходный кортеж.

Основной код оставьте пустым или закомментированным (используйте его только для тестирования).

Пример вызова функции:

print(tpl_sort(6, 3, -1, 8, 4, 10, -5))
Ответ в консоли: (-5, -1, 3, 4, 6, 8, 10)
ЧИТАТЬ ДАЛЕЕ …
Модуль 20. Задача 6. По парам

Модуль 20. Задача 6. По парам

Напишите программу, которая инициализирует список из 10 случайных целых чисел, а затем делит эти числа на пары кортежей внутри списка. Выведите результат на экран.

Дополнительно: решите задачу несколькими способами

Пример:

Оригинальный список: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Новый список: [(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)]
ЧИТАТЬ ДАЛЕЕ …