Форум сайта python.su
0
Всем здравствуйте, уважаемые программисты!
Я новенькая в таком занятии, как программирование.
Стала буквально недавно изучать Python и как только решила написать одну из программ с классами, сразу возникли ошибки. Я не до конца поняла логику.
В общем, в программе есть класс Диета (Diet).
В нём соответственно есть 4 метода, включая конструктор __init__.
Я хотела всё сделать круто, чтобы при запуске программы я вводила только 2 числа: дневную норму калорий человека и калорийность того продукта, которого якобы человек собирается скушать.
Ну всё просто . Норма калорий - количество калорий продукта = сколько осталось скушать. Это должно было быть ответом программы при запуске. Но поняла, что я окончательно запуталась с атрибутами. Не понимаю, что куда ставить.
import operator class Diet(object): ''' Подсчёт калорий ''' def __init__(self,norm_calories,calories_product ): self.norm_calories = norm_calories self.calories_product = calories_product def product(self): # Калорийность продукта print('Калорийность продукта:', self.calories_product) def man(self, norm_calories): # Норма калорий для человека self.norm_calories = norm_calories print('Норма калорий человека:', self.norm_calories) def result(self): # Подсчёт калорий (норма - калорийность продукта) self.calories = operator.sub(self.norm_calories, self.calories_product) # Вычитание print('Вам осталось скушать',self.calories,'калорий') # Основная часть norm_calories = input('Введите вашу норму калорий:') Norma = Diet(norm_calories,0) print('Ваша норма калорий:', norm_calories) calor_your_product = input('Введите калорийность продукта') Calor_product = Diet(0,calor_your_product) print('Калорийность этого продукта = ', calor_your_product) print(Diet.result()
Офлайн
103
не очень понятно и не очень правильно
но чтобы работало
class Diet(object): ''' Подсчёт калорий ''' def __init__(self,norm_calories,calories_product = 0): self.norm_calories = norm_calories self.calories_product = calories_product def product(self): # Калорийность продукта print('Калорийность продукта:', self.calories_product) def man(self, norm_calories): # Норма калорий для человека self.norm_calories = norm_calories print('Норма калорий человека:', self.norm_calories) def result(self): # Подсчёт калорий (норма - калорийность продукта) self.calories = self.norm_calories - self.calories_product # Вычитание print('Вам осталось скушать',self.calories,'калорий') # Основная часть norm_calories = input('Введите вашу норму калорий: ') Norma = Diet(int(norm_calories)) print('Ваша норма калорий:', norm_calories) calor_your_product = input('Введите калорийность продукта: ') Norma.calories_product = int(calor_your_product) print('Калорийность этого продукта = ', calor_your_product) Norma.result()
Офлайн
0
Спасибо большое.
Только у меня вопрос с self.
Я скопировала ваш код, разобрала.
Переделала оригинальный код, но когда я решила вызвать последнюю функцию Norma.result() у меня, как и раньше, требует ввести self.
У вас же , если заново прописать функцию, self в скобках горит неактивным ( серым цветом), то есть его вводить не надо.
Не понимаю. Сделала так же, как у вас.
Подскажите пожалуйста, что же делать с этим self.
ВАШ код:
МОЙ код:
Прикреплённый файлы:
моя программа.jpg (90,0 KБ)
Офлайн
103
self может быть только в описании класса!
не знаю зачем он подсвечивает, но если вы пропишите там self будет ошибка
практика эт хорошо, но я бы посоветовал еще немного почитать о ооп в пайтоне
что да как…
и последняя строка должна быть
Norma.result()
Diet.result()
Отредактировано terabayt (Март 8, 2015 05:41:21)
Офлайн
0
Ой, точно. Спасибо большое!
Буду повнимательней в следующий раз
Офлайн
857
YanaМожно не объяснять, мы это и так видим по коду.
Я новенькая в таком занятии, как программирование.
YanaЭто не конструктор, а инициализатор. Конструктор создаёт объект (в питоне это __new__() ), тогда как __init__ инициализирует уже созданный. В других языках они часто совмещены в одной конструкции, поэтому их путают.
В нём соответственно есть 4 метода, включая конструктор __init__.
YanaГлавная ошибка в том, что методы класса как вычисляют значения, так и выводят их. Если понадобится вычисленные значения вывести не на экран, а, например, разместить на сайте, то это не получится сделать. Вывод должен быть снаружи класса.
Где-то я намудрила.
Отредактировано py.user.next (Март 8, 2015 13:08:18)
Офлайн