Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 20, 2021 15:40:03

Typical_beginer
Зарегистрирован: 2020-12-29
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Применение строкового значения в условном операторе


Добрый день всем.
Данный вопрос продолжение темы про дату,где я спрашивал можно ли её делать нулевой.
Я сделал отдельный атрибут класса,отвечающий за выполнение заказа и назвал её 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

Прикреплённый файлы:
attachment sddsfdfs.jpg (77,1 KБ)

Офлайн

#2 Янв. 20, 2021 15:54:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Применение строкового значения в условном операторе

Typical_beginer
Что такое по-вашему self?



Офлайн

#3 Янв. 21, 2021 03:59:31

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Применение строкового значения в условном операторе

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
>>>

Так что читай книги по питону, там это всё написано.



Отредактировано py.user.next (Янв. 21, 2021 04:00:16)

Офлайн

#4 Янв. 23, 2021 14:09:40

Typical_beginer
Зарегистрирован: 2020-12-29
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Применение строкового значения в условном операторе

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

 if 'Нет' in bookorder.isorder:

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version