Найти - Пользователи
Полная версия: Применение строкового значения в условном операторе
Начало » Python для новичков » Применение строкового значения в условном операторе
1
Typical_beginer

Добрый день всем.
Данный вопрос продолжение темы про дату,где я спрашивал можно ли её делать нулевой.
Я сделал отдельный атрибут класса,отвечающий за выполнение заказа и назвал её isorder.Она может принимать только 2 ответа Да и Нет.
И вот мне надо вывести количество заказов,которые не были выданы.
То есть я через цикл проверяю по isorder и если там встречается Нет,счётчик считает и потом выводит на экран.
Но почему то он не видит переменную isorder в одном методе,но прекрасно работает в другом методе.

Показываю блок кода,как у меня появляется в программе атрибут класса isorder(ввожу с клавиатуры) и метод где ищется количество невыполненных заказов

 def get_isorder():
            isorder = input('Выполнен ли заказ?Введите "Да\Нет" ')
            if "Да" in isorder or "Нет" in isorder:
                  return isorder                
            else:
                  print("Ответ должен быть Да или Нет")
                  isorder = input('Выполнен ли заказ?Введите "Да\Нет" ')
def failorders(self):
            countord=0
            for bookorder in bookorders:
                                 if "Нет" in isorder:
                                             countord+=1
            print("Количество неудовлетворённых заказов = ", сountord)

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

 if "Нет" in isorder:
NameError: name 'isorder' is not defined
FishHook
Typical_beginer
Что такое по-вашему self?
py.user.next
Typical_beginer
Я сделал отдельный атрибут класса,отвечающий за выполнение заказа и назвал её isorder.
Весь код класса напиши.

Можно на функциях одних это написать, а можно на классах это написать. Думаю, тебе надо сначала на функциях научиться писать. Классы тебе просто не помогут, если ты не знаешь основ программирования. Есть глобальные переменные и есть локальные переменные, есть формальные аргументы функции и есть фактические аргументы функции, есть определение функции и есть вызов функции (бывает ещё и объявление функции - “декларация”, но это в других языках), есть передача аргумента по ссылке и есть передача аргумента по значению. Вот если ты всего этого не знаешь, то придётся изучить сначала.

Почему она пишет эту ошибку? Потому что переменная не видна из одной функции в другой функции, так как в каждой функции переменные видны только внутри этой функции. Значит, ты должен был подать в вызове функции эту переменную по значению. self тоже подаётся по значению, но её значение - это адрес структуры данных в памяти, в которую можно по этому адресу заходить и вносить изменения в данные этой структуры. В питоне так принято: первым аргументом у метода класса при вызове этого метода неявно передаётся экземпляр класса, у которого вызывается этот метод. Вот этот экземпляр класса и представляет из себя структуру данных. Поэтому ты где-то вверху делаешь self.x = 1, а в методе ты потом обращаешься к нему через print(self.x). То есть структура данных даёт общаться методам между собой.

Пример общения методов через структуру данных, адрес которой хранится в памяти и каждый раз передаётся через аргумент self неявным образом
  
>>> class A:
...     def method1(self):
...         self.x = 1
...     def method2(self):
...         print(self.x)
... 
>>> a = A()
>>> a.method1()
>>> a.method2()
1
>>>

Так что читай книги по питону, там это всё написано.
Typical_beginer
Спасибо вам за подсказку.
Мне надо было лишь дописать к условию объект класса и выбрать из него нужный атрибут
Получился рабочий вариант

 if 'Нет' in bookorder.isorder:
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB