Решение модуля 7.4 Инди-курс программирования на Python

Модуль 7.4 (Docstring и аннотации). Docstring(documentation string) переводится как строка документирования. Это специальный механизм, который позволяет добавлять пояснения внутри вашего кода определенным образом и в определенном месте. 

При помощи какой функции можно взглянуть на строку документации у функции input?

help(input)

help(input)

в атрибуте __doc__

Чему будет равен атрибут __doc__  у функции foo?

def foo():
    """Да вы только посмотри на эту функцию"""
    """Да она вообще"""
    """ничего не делает!!!"""
Да вы только посмотри на эту функцию

Чему будет равен атрибут __doc__  у функции foo?

def foo():
    """
    Да вы только посмотри на эту функцию
 Да она вообще
 ничего не делает!!!
    """
Да вы только посмотри на эту функцию\nДа она вообще\nничего не делает!!!

Чему будет равен атрибут __doc__  у функции foo?

def foo():
    a = 10
    """Да вы только посмотри на эту функцию"""
    """Да она вообще"""
    """просто в a сохраняет 10!!!"""
None

Ниже имеется готовая функция add_binary, которая принимает два числа и возвращает их сумму в двоичной системе счисления

Ваша задача только добавить докстроку «Возвращает сумму чисел a и b в двоичном виде»

def add_binary(a, b): 
    'Возвращает сумму чисел a и b в двоичном виде' #указываем описание функции
    binary_sum = bin(a+b)[2:]
    return binary_sum

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

first_repeated_word("ab ca bc ab") => "ab"
first_repeated_word("ab ca bc Ab cA aB bc") => "bc"
first_repeated_word("ab ca bc ca ab bc") => "ca"
first_repeated_word("ab ca bc") => None

Для функции first_repeated_word нужно добавить док-строку  Находит первый дубль в строке

и не забудьте проаннотировать аргументы и возврат функции

Нужно написать только определение функции first_repeated_word 

def first_repeated_word(text: str):
    'Находит первый дубль в строке'
    sp = []                 # создаем пустой список для добавления слов, которые прошли
    for i in text.split():  # разбиваем полученную строку и разбиваем на список и проходимся по нему
        if i not in sp:     # если этого слова нет ещё в нашем списке с прошедшими словами, то его добавляем
            sp.append(i)
        else:               # иначе, если это слово уже есть в списке с прошедшими словами, то значит это слово - дубль, возвращаем это слово
            return i
                            # если мы не встретили дублей, то возвратит None

Ниже проаннотирована словарем переменная person

from typing import Dict, Optional, Union

person: Dict[Optional[Union[str, int]], Optional[str]]

Какой тип данных может храниться в ключах этого словаря?

None
int
str

Напишите функцию shift_letter , которая принимает два аргумента:

  1. letter одна английская буква в нижнем регистре
  2. shift целое число — значение сдвига буквы (может быть как положительным, так и отрицательным)

Функция shift_letter  сдвигает символ letter вперед или назад на заданное значение shift .Сдвиг может быть цикличным в пределах от a до z. Ниже примеры:

shift_letter('b', 2)=> 'd'
shift_letter('d', 1) => 'e'
shift_letter('z', 1) => 'a'
shift_letter('d', -2) => 'b'
shift_letter('d', 26) => 'd'
shift_letter('b', -3) => 'y'

Не забудьте проаннотировать аргументы и также добавьте doc-строку «Функция сдвигает символ letter на shift позиций»

Функция shift_letter  должна вернуть новый символ. Вот вам в помощь ascii коды английских буквы, вам нужны только символы в нижнем регистре

Решение модуля 7.4 Инди-курс программирования на Python

Нужно написать только определение функции shift_letter 

def shift_letter(letter: str, shift: int) -> str:     # объявляем функцию используя аннотации
    'Функция сдвигает символ letter на shift позиций'
    return chr((ord(letter) - 97 + shift) % 26 + 97)  # возвращаем символ со сдвигом используя таблицу аски

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

И так, ваша задача создать функцию caesar_cipher , которая принимает на вход текст и значение сдвига.

Внутри функции caesar_cipher  необходимо последовательно пройтись по каждому символу и преобразовать его по следующим правилам:

  1. если символ является знаком пунктуации, оставляем его как есть
  2. если это буква, то сместить ее при помощи ранее написанной функции shift_letter 

Закодированный текст необходимо вернуть в качестве ответа. Вот пример работы

caesar_cipher('leave out all the rest', -1) => 'kdzud nts zkk sgd qdrs'
caesar_cipher('one more light', 3) => 'rqh pruh oljkw'

Аннотации, мой друг, не забываем прописывать. И еще нужно сделать док-строку для функции caesar_cipher со значением «Шифр цезаря»

Нужно написать только определение функций shift_letter и caesar_cipher 

def shift_letter(letter: str, shift: int) -> str:     # объявляем функцию используя аннотации
    'Функция сдвигает символ letter на shift позиций'
    return chr((ord(letter) - 97 + shift) % 26 + 97)  # возвращаем символ со сдвигом используя таблицу аски


def caesar_cipher(letter: str, shift: int) -> str:
    'Шифр цезаря'
    a = ''              # создаем пустую строку к которой мы будем прибавлять символы
    for i in letter:    # проходимся по строке
        if i.isalpha(): # если это буква, то вызываем функцию shift_letter и к строке прибавляем символ со сдвигом
            a += shift_letter(i, shift)
        else:           # если же это не буква, то её оставляем без изменения и так добавляем к строке
            a += i
    return a            # возвращаем полученную зашифрованную строку

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

Понравилась статья? Поделиться с друзьями:
Подписаться
Уведомить о
guest

2 комментариев
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Дмитрий
Дмитрий
10 месяцев назад

Похоже в модуле появилась новая задача https://stepik.org/lesson/296973/step/10?unit=278701.
Ее решение:
def get_word_indices(strings: list[str]) -> dict:
  «»»Функция возвращает словарь, где ключи — это уникальные слова из
  списка строк в нижнем регистре, а значения —
  это списки индексов строк, в которых эти слова встречаются «»»
  dct = {j: 0 for i in strings for j in i.lower().split()}

  for i in dct:
    z = []
    for j in range(len(strings)):
      if i in strings[j].lower():
        z.append(j)
    dct[i] = (z)
  return dct

2
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x