Уведомления

Группа в Telegram: @pythonsu

#1 Март 23, 2016 10:54:39

avldokuchaev
Зарегистрирован: 2016-03-21
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться.

Здравствуйте, уважаемые.
Изучаю Python. До этого не программировал. Пытаюсь разобраться с данной функцией, но никак не доходит.
Объясните, пожалуйста, чайнику.

def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count
print(total(10, 1, 2, 3, vegetables=50, fruits=100))

Если можно, то по шагам.
Спасибо.

Отредактировано avldokuchaev (Март 26, 2016 00:34:42)

Офлайн

#2 Март 23, 2016 12:00:07

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

Помогите разобраться.

Спрашивайте что конкретно непонятно, цитировать вам учебник никто не будет.



Офлайн

#3 Март 23, 2016 12:21:45

avldokuchaev
Зарегистрирован: 2016-03-21
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться.

Я практически разобрался. Потом попробую описать свои мысли, а вы, если не сложно, скажете прав я или нет.

Офлайн

#4 Март 25, 2016 23:54:32

avldokuchaev
Зарегистрирован: 2016-03-21
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться.

Где то в функции ошибка. Интерпретатор выдает ошибку. Похоже, что в словаре. Надо как то извлечь из словаря числа 50 и 100, чтобы с ними математические действия могли производится. Пойду читать про словари.

Офлайн

#5 Март 26, 2016 00:39:32

avldokuchaev
Зарегистрирован: 2016-03-21
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться.

Хотя нет ошибки. Я просто не верно записал. Не пойму почему в результате 166 получается?

Офлайн

#6 Март 26, 2016 00:42:41

avldokuchaev
Зарегистрирован: 2016-03-21
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться.

Пока искал где ошибка, узнал, что эту функцию можно еще по другому записать.

def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key, val in keywords.items():
        count += val
    return count
print(total(10, 1, 2, 3, vegetables=50, fruits=100))
Но так и не понял почему получается 166?

Офлайн

#7 Март 26, 2016 01:06:05

Stright
От: Кострома
Зарегистрирован: 2015-01-20
Сообщения: 139
Репутация: +  16  -
Профиль   Отправить e-mail  

Помогите разобраться.

А сколько по-вашему должно получиться? В вызове функции total параметру initial вы задаете 10, остальные значения параметров к нему прибавляются, так и получается 166

Отредактировано Stright (Март 26, 2016 01:10:29)

Офлайн

#8 Март 26, 2016 09:23:12

avldokuchaev
Зарегистрирован: 2016-03-21
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться.

А все понял, спасибо. Я подумал, что параметр initial не меняется и будет 5.

Офлайн

#9 Март 30, 2016 00:16:45

avldokuchaev
Зарегистрирован: 2016-03-21
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться.

Еще раз здравствуйте.
В процессе изучения языка Python наткнулся на следующий код. Немного изменил имена переменных.

class Privet_1:
	def __init__(self, imya):
		self.name_1 = imya
	def priv_1(self):
		print('Привет, ', self.name_1)
pr_2 = Privet_1('Андрей')
pr_2.priv_1()
Потом поразмыслил и решил, что можно написать вот так:
class Privet_2:
	def __init__(self, inya):
		print('Привет, ', inya)
Privet_2('Андрей')
Результат вывода идентичный. Но хотел узнать, можно ли так писать, или не желательно по каким-нибудь причинам?

Офлайн

#10 Март 30, 2016 02:55:17

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

Помогите разобраться.

avldokuchaev
Еще раз здравствуйте.
Отдельные вопросы пиши в отдельные темы. Если кто-то ответит в эту тему по первому вопросу, а другой - по второму, а третий - снова по первому, то эти ответы начнут перемешиваться и получится свалка, из которой будет непонятно, кто кому что и на что отвечает.

avldokuchaev
Потом поразмыслил и решил, что можно написать вот так:
Зря поразмыслил. Во-первых, priv_1() в первом случае можно вызывать, а можно и не вызывать, а можно вызывать и несколько раз в разное время. А во-вторых, класс вообще ничего не должен сам выводить, выводить должны только специальные методы и только тогда, когда их специально вызывают. Иначе тебе может понадобиться этот класс там, где выводить ничего не надо, и ты его не сможешь использовать, потому что он выводит.



Отредактировано py.user.next (Март 30, 2016 02:58:32)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version