From a0069d842e8c79d257590697eff9773bed37ace2 Mon Sep 17 00:00:00 2001 From: Vadim Nifadev <36514612+nifadyev@users.noreply.github.com> Date: Mon, 22 Apr 2024 13:58:11 +0300 Subject: [PATCH] Translate What's wrong with booleans? example --- translations/README-ru.md | 90 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) diff --git a/translations/README-ru.md b/translations/README-ru.md index 2a8ac33..70a7743 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -1350,3 +1350,93 @@ SyntaxError: EOF while scanning triple-quoted string literal + `'''` и `"""` также являются разделителями строк в Python, что вызывает SyntaxError, поскольку интерпретатор Python ожидал завершающую тройную кавычку в качестве разделителя при сканировании текущего встреченного строкового литерала с тройной кавычкой. --- + +### ▶ Что не так с логическими значениями? + +1\. + +```py +# Простой пример счетчика логических переменных и целых чисел +# в итерируемом объекте со значениями разных типов данных +mixed_list = [False, 1.0, "some_string", 3, True, [], False] +integers_found_so_far = 0 +booleans_found_so_far = 0 + +for item in mixed_list: + if isinstance(item, int): + integers_found_so_far += 1 + elif isinstance(item, bool): + booleans_found_so_far += 1 +``` + +**Результат:** +```py +>>> integers_found_so_far +4 +>>> booleans_found_so_far +0 +``` + + +2\. +```py +>>> some_bool = True +>>> "wtf" * some_bool +'wtf' +>>> some_bool = False +>>> "wtf" * some_bool +'' +``` + +3\. + +```py +def tell_truth(): + True = False + if True == False: + print("I have lost faith in truth!") +``` + +**Результат (< 3.x):** + +```py +>>> tell_truth() +I have lost faith in truth! +``` + + + +#### 💡 Объяснение: + +* `bool` это подкласс класса `int` в Python + + ```py + >>> issubclass(bool, int) + True + >>> issubclass(int, bool) + False + ``` + +* `True` и `False` - экземпляры класса `int` + ```py + >>> isinstance(True, int) + True + >>> isinstance(False, int) + True + ``` + +* Целочисленное значение `True` равно `1`, а `False` равно `0`. + ```py + >>> int(True) + 1 + >>> int(False) + 0 + ``` + +* Объяснение на [StackOverflow](https://stackoverflow.com/a/8169049/4354153). + +* Изначально в Python не было типа `bool` (использовали 0 для false и ненулевое значение 1 для true). В версиях 2.x были добавлены `True`, `False` и тип `bool`, но для обратной совместимости `True` и `False` нельзя было сделать константами. Они просто были встроенными переменными, и их можно было переназначить. + +* Python 3 был несовместим с предыдущими версиями, эту проблему наконец-то исправили, и поэтому последний фрагмент не будет работать с Python 3.x! + +---