Что означает def над знаком равно
Перейти к содержимому

Что означает def над знаком равно

Научный форум dxdy

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе «Помогите решить/разобраться (М)».

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

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

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.

Чем «равно по определению» отличается от «равносильно»?

На страницу 1 , 2 , 3 След.

Чем «равно по определению» отличается от «равносильно»?
20.09.2013, 23:25

Последний раз редактировалось Denis Russkih 20.09.2013, 23:37, всего редактировалось 2 раз(а).

Прошу извинить за бредовый вопрос, но вот начал читать Зорича и завис на этом моменте. 🙂

Скажем, там приводится такое равенство по определению:

$(A \subset B) := \forallx((x \in A) \Rightarrow (x \in B))$

Так вот, как я ни старался, так и не смог постичь, зачем конкретно нужен выпендрёж с дополнительным значком присваивания. 🙂 Почему нельзя просто написать:

$(A \subset B) \Leftrightarrow \forallx((x \in A) \Rightarrow (x \in B))$

Очевидно, специальный символ «равно по определению» использован не просто так, но какой именно глубокий смысл в этом сокрыт. Значок нарисовали просто для того, чтобы показать, в каких случаях его можно использовать. Или тут что-то большее?

Далее на той же странице написано:

$(A = B) \Leftrightarrow (A \subset B) \wedge (B \subset A)$

Здесь Зорич символом «равносильно» не побрезговал. 🙂 Но почему так? Почему бы не использовать и здесь «равенство по определению»?

Я долго пытался понять, что же такого есть в одном высказывании, чего нет в другом (придумал сразу несколько версий, одна другой причудливее), и в итоге понял, что мой мозг не справляется с обработкой этой задачи. 🙂

Такое впечатление, что это никак не объяснимо с логической точки зрения, а относится к чему-то сакральному, что называют «математической культурой» и передают в ходе живого общения.

Поскольку я математику пытаюсь изучать самостоятельно, по книгам, просто как хобби, то с «математической культурой» у меня напряг. 🙂

Может, кто-нибудь пояснит, в каких случаях используется символ «равно по определению», и почему там нельзя использовать «равносильно»? И в каких случаях, наоборот, можно использовать лишь «равносильно», а «равно по определению» — нельзя.

$:\Leftrightarrow$

Я, конечно, пытался гуглить, но только ещё больше запутался. Оказалось, существует ещё и символ

который означает «равносильно по определению»! Это слишком для моего разума! 🙂

Почему очень похожие высказывания в каких-то случаях «равны по определению», в каких-то — «равносильны», а где-то, оказывается, могут быть и «равносильны по определению».

Что значит * (звёздочка) и ** двойная звёздочка в параметрах функций?

Звёздочка в Питоне помимо умножения x*y ( help(‘*’) ) и возведения в степень x**y ( help(‘**’) ) † используется, чтобы обозначить ноль или более чего-либо.

К примеру в описании параметров функции:

def f(*args): print(args) 
>>> f(1,'a') (1, 'a') 

Для именованных параметров используются две звёздочки:

def g(a, b, *args, name='default', **kwargs): print(a, b, args, name, kwargs) 

здесь g() принимает два обязательных аргумента и произвольное (ноль или более) количество других аргументов:

>>> g(1, b=2, c=3) 1 2 () default

kwargs —это словарь дополнительных аргументов, переданных по имени ( c в данном случае). А args это пустой кортеж () , так как дополнительных позиционных аргументов не было передано.

После * все параметры обязаны передаваться по имени, пример:

def min_item(items, *, key=lambda x: x): . 

При вызове, если задан, key обязан быть указан по имени: min([1,2,-3], key=abs) .

Принятие произвольного количества аргументов может быть полезно при создании функций-обёрток:

def my_print(*args, **kwargs): flush = kwargs.pop('flush', True) # flush unless overriden print(*args, flush=flush, **kwargs) 

При множественном наследовании **kwargs помогает реализовать требование совместимости параметров для методов базовых классов, так как kwargs позволяет передать произвольные именованные аргументы.

Видно, что звёздочку можно использовать и при вызове функции:

L = [1, 2, 3] s = "abc" print(*L, *s) # iterable unpacking: print(1, 2, 3, 'a', 'b', 'c') # -> 1 2 3 a b c 

произвольные коллекции (iterable в общем случае) L , s распаковываются и каждый их элемент передаётся в виде отдельного агрумента в вызываемую функцию ( print() ).

Можно использовать и при явном присваивании:

>>> first, *middle, last = L >>> first, middle, last (1, [2], 3) 

в этом случае первый и последний аргументы из списка L распаковываются в явно приведённые имена ( first , last ), а остаток ноль или более элементов в виде списка помещаются в middle .

Звёздочку можно использовать и при задании списков, кортежей, наборов и словарей в исходном коде, используя соответствующий синтаксис (tuple, list, set, and dictionary displays):

>>> *range(4), 4 (0, 1, 2, 3, 4) >>> [*range(4), 4] [0, 1, 2, 3, 4] >>>  >>> > # dictionary unpacking inside dictionary display

Тонкий момент: запятая в Питоне создаёт кортеж—скобки нужны только для пустого кортежа () . Поэтому первая строчка равнозначна: (*range(4), 4) .

Так же как и при вызове функций, звёздочка распаковывает коллекцию здесь и действует как будто каждый элемент был передан отдельно в соответствующие конструкторы.

Таким образом можно сложить два словаря или произвольные отображения (Mapping):

>>> a = >>> b = >>> <**a, **b> >>>

При наличии дублирующих ключей, более поздние значения побеждают, как обычно: == .

Знание, что делает звёздочка полезно, чтобы объяснить как zip(*matrix) транспонирует квадратную матрицу или как обойти итератор по ровно n элементов за раз: zip(*[iterator]*n) .

Помимо указанных значений, звёздочка может присутствовать в имени файла для создания шаблона (wildcard), к примеру:

from pathlib import Path print(*Path().glob('*.py')) print(*Path().glob('**/*.py')) 

Первый print() печатает через пробел все (ноль или более) имена файлов в текущей директории с расширением .py . Подобный ( *.py ) синтаксис популярен, так как он используется в командной строке (shell).
Второй print() с двумя звёздочками ( ‘**/*.py’ ) выводит имена Питон-файлов во всем дереве директорий (включая вложенные директории).

В регулярных выражениях * означает повторение ноль или более раз:

import re if re.fullmatch(r'x*', text): print('текст пустой или содержит только `x`') 

† умножение натуральных чисел n*m можно рассматривать как повторение сложения (ноль или более) раз. Аналогично, возведение в степень n**m можно рассматривать как повторение умножения:

 2 * 3 == 2 + 2 + 2 2 ** 3 == 2 * 2 * 2 [2] * 3 == [2, 2, 2] 

Отслеживать
ответ дан 22 ноя 2016 в 21:07
52.2k 11 11 золотых знаков 108 108 серебряных знаков 312 312 бронзовых знаков
<**a, **b>не работает в питоне 3.4. Укажите что с какой версии работает.
10 фев 2017 в 10:01

@SmitJohnth можно, но и так много информации в ответе. Текущая версия Python уже 3.6 Кого интересуют подробности, могут на ссылку нажать — там версия приведена (я для того ссылки и привожу, чтобы у кого желание есть, могли больше деталей получить).

10 фев 2017 в 10:22
Что, 2.7 уже закопали?
10 фев 2017 в 14:21

@SmitJohnth у вопроса есть метка python-3.x и нет метки python-2.7 Если есть желание, вы можете аналогичный вопрос для Питона 2 спросить (отличий много, ответ и так много материала по самым верхам покрывает).

10 фев 2017 в 23:20

@SmitJohnth посмотрите на автора вопроса. Ещё раз, если вас что-то другое интересует, то задайте свой вопрос (я уверен, что мне известны намерения автора текущего вопроса).

14 фев 2017 в 15:18

Звездочка (*) в Питоне используется для разбора аргументов. Она указывает, что передаваемый объект должен быть разобран (распакован) в отдельные аргументы.

В первом примере кода *min(p for p in counter.items() if p[1] == max_count) разбирается в аргументы и передается в функцию print.

Во втором примере переменные team и coef разбираются в отдельные аргументы и передаются в функцию print .

В третьем примере *args разбирается в отдельные аргументы и передается в функцию datetime .

В четвертом примере *args разбирается в отдельные аргументы и передается в функцию reduce.

В пятом примере *args разбирается в отдельные аргументы и передается в функцию watchdog.

Две звездочки (**) также используются для разбора аргументов, но в этом случае объект разбирается в словарь из именованных аргументов.

В первом примере ‘f>’.format(**vars()) звездочки указывают, что vars() должен быть разобран в словарь из именованных аргументов, которые затем используются в функции format .

Во втором примере в классе A в методе init **kwargs разбирается в словарь из именованных аргументов, которые затем передаются в вызов функции super().init .

Оба эти примера используют разбор аргументов для упрощения кода и улучшения его читаемости.

Еще один пример использования разбора аргументов с двумя звездочками:

def some_function(**kwargs): print(kwargs) some_function(arg1=1, arg2=2, arg3=3) 

В этом примере функция some_function ожидает передачу именованных аргументов. Когда мы вызываем функцию some_function с аргументами arg1=1, arg2=2, arg3=3 , они разбираются в словарь из именованных аргументов и передаются в функцию some_function . В результате вызова функции будет выведено .

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

Давайте рассмотрим еще несколько примеров использования разбора аргументов:

def some_function(arg1, arg2, *args): print(arg1, arg2, args) some_function(1, 2, 3, 4, 5) 

В этом примере функция some_function ожидает передачу двух обязательных аргументов arg1 и arg2 , а также любого количества дополнительных аргументов. Когда мы вызываем функцию some_function с аргументами 1, 2, 3, 4, 5 , то первые два аргумента присваиваются arg1 и arg2 соответственно, а остальные три аргумента разбираются в кортеж args. В результате вызова функции будет выведено 1, 2, (3, 4, 5) .

Еще один пример:

def some_function(arg1, **kwargs): print(arg1, kwargs) some_function(1, arg2=2, arg3=3) 

В этом примере функция some_function ожидает передачу одного обязательного аргумента arg1 и любого количества дополнительных именованных аргументов. Когда мы вызываем функцию some_function с аргуменентами 1, arg2=2, arg3=3 , то первый аргумент присваивается arg1, а остальные аргументы разбираются в словарь kwargs . В результате вызова функции будет выведено 1, .

Еще один пример:

def some_function(arg1, *args, **kwargs): print(arg1, args, kwargs) some_function(1, 2, 3, arg4=4, arg5=5) 

В этом примере функция some_function ожидает передачу одного обязательного аргумента arg1 , любого количества дополнительных аргументов и любого количества дополнительных именованных аргументов. Когда мы вызываем функцию some_function с аргументами 1, 2, 3, arg4=4, arg5=5 , то первый аргумент присваивается arg1 , второй и третий аргументы разбираются в кортеж args , а остальные аргументы разбираются в словарь kwargs . В результате вызова функции будет выведено 1, (2, 3), .

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

def average_filter(numbers): avg = sum(numbers) / len(numbers) return [x for x in numbers if x > avg] print(average_filter([1, 2, 3, 4, 5])) 

В этом примере функция average_filter принимает на вход список чисел и вычисляет среднее значение списка. Затем функция использует генератор списка, чтобы создать список элементов, которые больше среднего значения. В результате вызова функции со списком [1, 2, 3, 4, 5] будет возвращен список [4, 5] .

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

def sort_by_length(strings): return sorted(strings, key=lambda s: len(s), reverse=True) print(sort_by_length(['abc', 'def', 'gh', 'ijkl'])) 

В этом примере функция sort_by_length использует генератор списка sorted и лямбда-функцию, чтобы отсортировать список строк в порядке убывания длины. В результате вызова функции со списком [‘abc’, ‘def’, ‘gh’, ‘ijkl’] будет возвращен список [‘ijkl’, ‘abc’, ‘def’, ‘gh’] .

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

def multiple_of_3(numbers): return list(filter(lambda x: x % 3 == 0, numbers)) print(multiple_of_3([1, 2, 3, 4, 5, 6, 7, 8, 9])) 

В этом примере функция multiple_of_3 использует функцию filter и лямбда-функцию, чтобы отфильтровать список чисел и вернуть список элементов, которые делятся на 3 без остатка

Значение символов и кнопок на контроллерах Thermo King

Что означает «черепашка»? Каким значком обозначается включенная оттайка? Расшифровка символов на контролллерах рефрижераторов Thermo King.

Установки Thermo King серии V и B:

DSR-V-B.png

1. Символ обогрева (термометр со стрелкой, направленной вверх). Этот символ указывает, что установка находится в режиме обогрева.

2. Символ охлаждения (термометр со стрелкой, направленной вниз). Этот символ указывает, что установка находится в режиме охлаждения.

3. Символ °C/°F. Этот символ показывает, по какой шкале отображается температура на экране: в градусах Цельсия (С) или Фаренгейта (F).

4. Символ аварийной сигнализации (восклицательный знак в треугольнике). Этот символ указывает, что контроллер обнаружил аварийное состояние (неисправность).

5. Символ технического обслуживания (гаечный ключ). Этот символ указывает на необходимость выполнить техническое обслуживание установки.

6. Символ режима оттайки. Этот символ указывает, что испаритель или конденсатор находится в режиме оттайки.

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

8. Символ режима оттайки конденсатора (чёрный треугольник вершиной вверх). Этот символ указывает, что блок конденсатора находится в режиме оттайки (появляется одновременно с символом режима оттайки 6).

9. Кнопка ВКЛ/ВЫКЛ. Используется для включения и выключения установки. Индикатор на ней всегда горит, кроме случаев, когда установка отсоединена (нет питания).

10. Жидкокристаллический (ЖК) дисплей. Отображает выбранные экраны. Всегда активен и подсвечивается, кроме случаев, когда установка отсоединена (нет питания) или подсоединена, но выключена вручную с помощью внутрикабинного блока управления. Обычно на нём отображается температура возвратного воздуха (в обоих грузовых отсеках на двухтемпературных установках).

11. Кнопка со СТРЕЛКОЙ ВВЕРХ. Используется для увеличения заданного значения set point температуры.

12. Кнопка со СТРЕЛКОЙ ВНИЗ. Используется для уменьшения заданного значения set point температуры.

13. Кнопка SELECT (ВЫБОР) (стрелки по кругу). Служит для выбора экранов подсказок и информационных экранов.

14. Кнопка ENTER (ВВОД) (знак «равно»). Используется для ввода новой команды, например ручная оттайка и т. д.

15. Зуммер. Издаёт сигнал, если одновременно подключены аккумуляторная батарея транспортного средства и источник электропитания. Также на него подаётся напряжение, если двери открываются при работающей рефрижераторной установке.

Установки Thermo King серии Ce:

CSR-C-Ce.png

1. Символ обогрева (крестообразные лопасти). Установка в режиме обогрева.

2. Символ охлаждения (снежинка). Установка в режиме охлаждения.

3. Символ °C/°F. Этот символ показывает, по какой шкале отображается температура на экране: в градусах Цельсия (С) или Фаренгейта (F).

4. Символ аварийной сигнализации (точка с расходящимися дугами). Этот символ указывает, что в системе присутствует аварийный сигнал.

5. Символ точки (десятичной). Этот символ указывает, что подаётся электропитание, но только если установка выключена.

6. Символ режима оттайки (снежинка с каплями). Этот символ указывает, что испаритель находится в режиме оттайки.

7. Кнопка ВКЛ./ВЫКЛ. Чтобы запустить/остановить установку, нужно нажать эту кнопку и удерживать не менее 1 секунды. При однократном нажатии выполняется переход на предыдущий уровень меню.

8. Жидкокристаллический (ЖК) дисплей. Этот дисплей всегда активен, кроме случаев, когда установка отключена (нет питания) или подключена, но выключена вручную с помощью внутрикабинного блока управления. Обычно на нём отображается температура возвратного воздуха.

9. Кнопка со стрелкой ВВЕРХ. Эта кнопка используется для того, чтобы увеличивать заданное значение set point температуры, отображать значения и прокручивать меню вверх.

10. Кнопка со стрелкой ВНИЗ. Эта кнопка используется для того, чтобы уменьшать заданное значение set point температуры, отображать значения и прокручивать меню вниз.

11. Кнопка SET (НАСТРОЙКА). Служит для выбора экранов подсказок и информационных экранов. Однократное нажатие: вход на следующий уровень меню.

Thermo King серии SLX, SLXi:

SLX1.png

1. Кнопка «Вкл» ( I / ON). Эта кнопка используется для включения установки. Сначала на экране появится логотип компании Thermo King, а затем сообщение «Настройка системы — подождите, пожалуйста». После завершения последовательности включения питания на дисплее появляется стандартный экран с температуры отсека и заданным значением set point.

2. Кнопка «Выкл» ( O / OFF). Эта кнопка используется для выключения установки. Сначала на дисплее кратковременно будет показано сообщение «Производится откл.сист. — подождите, пожалуйста. Нажмите кнопку включения, чтобы продолжить», затем на короткое время появится сообщение «Выкл». После выключения на дисплее ничего не отображается.

4. Кнопка оттайки. Нажмите эту кнопку для запуска цикла ручной оттайки.

5. Кнопка CYCLE-SENTRY / непрерывный режим. Нажатие этой кнопки осуществляет переключение между режимами CYCLE-SENTRY и непрерывной работы. Если используется OptiSet Plus, то изменить режим, возможно, не удастся.

6. Функциональные кнопки. Четыре кнопки под дисплеем являются многофункциональными. Их функции изменяются в зависимости от выполняемой операции. Если функциональная кнопка активна, то функция этой кнопки отображается на дисплее непосредственно над кнопкой. Кнопки нумеруются слева направо, так что кнопка 1 — крайняя левая, а кнопка 4 — крайняя правая.

Типовые назначения функциональных кнопок:

  • Заданное значение set point.
  • Приборы
  • Датчики
  • Меню
  • Далее/Назад
  • Да/нет
  • +/–
  • Выбор/Выход;
  • Удалить/Справка.
  • Меню «Счётчики времени»

Thermo King серии T, UT:

T-UT-controller.png

1. Кнопка включения.

2. Красный светодиод сигнализации.

3. Заданное значение (уставка).

4. Температура в грузовом отсеке.

5. Стрелка ВВЕРХ.

6. Кнопка выключения.

7. Cycle-Sentry/Непрерывная работа.

8. Блокировка высоких оборотов (кнопка с черепахой). Если функция блокировки высоких оборотов разрешена и включена, то установка будет работать только на низких оборотах до выключения функции блокировки высоких оборотов или превышения времени таймера блокировки высоких оборотов. Эта функция обычно используется в чувствительных к шуму зонах, чтобы понизить уровень шума от двигателя установки. Блокирование высоких оборотов двигателя включается или выключается нажатием кнопки БЛОКИРОВКИ ВЫСОКИХ ОБОРОТОВ, когда установка включена. Нажатие этой кнопки включит блокировку высоких оборотов, повторное ее нажатие выключит блокировку высоких оборотов. Если блокировка высоких оборотов включена, то установка перейдет в режим работы на низких оборотах и загорится желтый светодиодный индикатор. Работа на высоких оборотах невозможна, пока эта функция не будет выключена или не будет превышено время таймера блокировки высоких оборотов. Важное замечание. ТАЙМЕР БЛОКИРОВКИ ВЫСОКИХ ОБОРОТОВ: Если выбран режим блокировки высоких оборотов, то можно разрешить функцию «Лимит времени для блокировки высоких оборотов», чтобы установка возвращалась в нормальный режим работы по истечении заданного периода времени. При этом исключается непредусмотренная продолжительная работа в режиме блокировки высоких оборотов. Период времени может быть установлен от 15 минут до 2 часов. Если период времени был установлен и истек, то установка вернется к нормальному режиму эксплуатации, когда допускается работа на высоких оборотах, а желтый светодиодный индикатор погаснет. При необходимости вернуться в режим блокировки высоких оборотов снова нажмите на кнопку блокировки высоких оборотов.

9. Кнопка запуска оттайки. Если условия позволяют (оттайку можно запустить, если установка работает, а температура змеевика испарителя меньше 7 °C; при некоторых обстоятельствах другие функции, например настройки дверного выключателя, могут блокировать режим ручной оттайки), то установка войдет в цикл оттайки, а желтый светодиод рядом с кнопкой оттайки загорится. Подробнее об оттайке в нашей статье «Режим оттайки в рефрижераторах».

10. Предрейсовая проверка. В ходе предрейсовой проверки проверяется функционирование установки. Кнопка ПРЕДРЕЙСОВОЙ ПРОВЕРКИ позволяет оператору запустить полную предрейсовую проверку или текущую предрейсовую проверку дизельного двигателя. Полная предрейсовая проверка должна запускаться при неработающей установке. Выключите и включите установку, чтобы удалить все коды сигнализации. Выключите установку. Включите установку и подождите индикации на дисплее счетчиков времени наработки установки. Когда на дисплее появится индикация счетчиков времени наработки установки, нажмите и удерживайте кнопку ПРЕДРЕЙСОВОЙ ПРОВЕРКИ в течение 5 секунд. Предрейсовая проверка займет приблизительно 20–30 минут, в зависимости от обстоятельств.

12. Стрелка вниз.

  • Читайте также другие наши статьи, в которых мы даём ответ на часто задаваемые вопросы.
  • Холодильные установки для автотранспорта.
  • Аксессуары и дополнительное оборудование.
  • Остались вопросы? Наши специалисты помогут вам по телефону: +7 (343) 343-05-08.

В настройках компонента не выбран ни один тип комментариев

Python: Параметры функций

Функции могут не только возвращать значения, но и принимать параметры. В этом уроке мы научимся создавать такие функции.

Напомним, что с параметрами функций мы уже сталкивались:

# Принимает на вход один параметр любого типа print('я параметр') # Принимает на вход два строковых параметра # первый — что ищем, второй — на что меняем 'google'.replace('go', 'mo') # moogle # Принимает на вход два числовых параметра # первый — округляемое число, второй — число знаков после запятой, которые нужно оставить round(10.23456, 3) # 10.235 

А теперь представим, что нам нужно реализовать функцию get_last_char() , которая возвращает последний символ в строке, переданной ему на вход как параметр.

Вот как будет выглядеть использование этой функции:

# Передача параметров напрямую без переменных get_last_char("Hexlet") # t # Передача параметров через переменные name1 = 'Hexlet' get_last_char(name1) # t name2 = 'Goo' get_last_char(name2) # o 

Из этого примера можно сделать следующие выводы:

  • Нам нужно определить функцию get_last_char()
  • Функция должна принимать на вход один параметр строкового типа
  • Функция должна возвращать значение строкового типа
def get_last_char(text): return text[-1] 

В скобках указывается имя переменной text , которая служит параметром. Имя параметра может быть любым. Главное, чтобы оно отражало смысл значения, которое содержится внутри. Например:

def get_last_char(string): return string[-1] 

Значение параметра будет зависеть от вызова этой функции:

# Внутри функции string будет равна 'hexlet' get_last_char('hexlet') # t # Внутри функции string будет равна 'code' get_last_char('code') # e # Внутри функции string будет равна 'Winter is coming' # Имя переменной снаружи не связанно с именем переменной в определении функции text = 'Winter is coming' get_last_char(text) # g 

Параметр нужно обязательно указывать. Если вызвать функцию без него, то интерпретатор выдаст ошибку:

get_last_char() # У такого кода нет смысла TypeError: get_last_char() missing 1 required positional argument: 'string' 

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

round(10.23456, 3) # 10.235 

То же самое относится и к методам. Они могут требовать на вход любое количество параметров, которое им нужно для работы:

# Первый параметр — что ищем # Второй параметр — на что меняем 'google'.replace('go', 'mo') # moogle 

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

Ниже пример определения функции replace() , которая заменяет в слове одну часть строки на другую:

def replace(text, from, to): # Здесь тело функции, но мы его # опускаем, чтобы не отвлекаться replace('google', 'go', 'mo') # moogle 

Когда параметров два и более, то практически для всех функций важен порядок передачи этих параметров. Если его поменять, то функция отработает по-другому:

# Ничего не заменилось, # так как внутри google нет mo replace('google', 'mo', 'go') # google 

Теперь вы знаете, как создавать функции, которые могут принимать на вход параметры.

Задание

Допишите функцию truncate() , которая обрезает переданную строку до указанного количества символов, добавляет в конце троеточие и возвращает получившуюся строку. Подобная логика часто используется на сайтах, чтобы отобразить длинный текст в сокращенном виде.

Функция принимает два параметра:

  1. Строка, которую нужно обрезать
  2. Число символов, которые нужно оставить

Пример того, как должна работать написанная вами функция:

# Передаём текст напрямую # Обрезаем текст, оставляя 2 символа truncate('hexlet', 2) # 'he. ' # Через переменную text = 'it works!' # Обрезаем текст, оставляя 4 символа truncate(text, 4) # 'it w. ' 

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

word = 'welcome!' index = 3 word[:index] # wel 

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

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

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

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

Полезное

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *