bool(input()) всегда возвращает True
Работал над заданием и возникла ошибка. Не смотря на то что я ввожу в is_good_employee всегда возвращается True (Это можно увидеть на скрине в меню отладки).
Я бы мог переписать код, но очень интересно почему же так происходит, буду искренне благодарен за помощь.
workers = []
class Employee:
def __init__(self, name, on_vacation, salary, is_good_employee):
self.name = name
self.on_vacation = on_vacation
self.salary = salary
self.is_good_employee = is_good_employee
def info(self):
print(f"работник {self.name} получает {self.salary} и находится {self.on_vacation}. ")
for i in range(0, 5):
worker = Employee(name=input("Имя сотрудника >>> "), salary=input("Заработная плата >>> "),
on_vacation=input("Работа >>> "), is_good_employee=bool(input()))
if not worker.is_good_employee:
workers.append("Уволен")
else:
workers.append(worker.name)
print(workers)
Ответы (1 шт):
В отличие от int, float и других похожих функций, bool не конвертирует строки "True" или "False" в булевые значения True или False соответственно, а проверяет любой переданный объект на "истинность".
В частности, bool от любой непустой коллекции вернет True, от пустой - False. Поэтому в случае строк он вернет False только для пустой строки:
>>> bool("sdfwt")
True
>>> bool("False")
True
>>> bool("")
False
Если нужно чтобы "True" преобразовывалось в True, можно просто сравнивать введенную строку со строкой "True":
is_good_employee = input() == "True"
Я бы еще сделал, чтобы проверка была без учета регистра:
is_good_employee = input().casefold() == "true"
тогда будет срабатывать и на "True", и на "true", и на "tRuE".
Документация:
bool- Truth Value Testing - как определяется, что объект "истинный" или "ложный" при передаче в
boolили при использовании объекта в качестве условий вifилиwhile.
