Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 6, 2013 10:45:16

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

Помогите с написанием функции, пожалуйста

Функция вида:

def convert(sum, length, *list):
    while length>=0:
            for x in list:
                new = int(x) * 16 ** length
                sum = sum + new
                length = length - 1
                return sum

При:
sum = convert(sum=0, length=int(len(list))-1, *list)

Возвращает ошибку: “TypeError: convert() got multiple values for keyword argument ‘length’”.

В чём заключается ошибка в коде?

Отредактировано Eline (Дек. 6, 2013 11:02:18)

Офлайн

#2 Дек. 6, 2013 11:51:58

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Помогите с написанием функции, пожалуйста

В объявлении функции, length - простой параметр, а не по кейворду, это ты так сделал )
поэтому есть два варианта - либо в объявлении сделать параметр length = 0 (например, и это некрасиво)
либо вызов такой вот:

sum = convert(sum=0, len(list)-1, *list)

int - там лишнее

да и вообще, длину списка передавать? это по паскальному какбе… сдесь это тоже лишнее, итого, правильно будет так:
sum = convert(sum=0, *list)

ну и функцию переделать… и переменную list - переименуй, ибо list - это служебное слово



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Дек. 6, 2013 11:53:36)

Офлайн

#3 Дек. 6, 2013 12:44:28

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Помогите с написанием функции, пожалуйста

Master_Sergius
Именованные аргументы должны идти после неименнованых. Неименнованый аргумент можно передать по имени

In [6]: def f(a,b):
   ...:     return a,b
   ...: 
 
In [7]: f(1,2)
Out[7]: (1, 2)
 
In [8]: f(a=1,2)
  File "<ipython-input-8-dda526ab872e>", line 1
    f(a=1,2)
         ^
SyntaxError: non-keyword arg after keyword arg
 
 
In [9]: f(1,b=2)
Out[9]: (1, 2)

Eline
В чём заключается ошибка в коде?
чтобы оно запустилось надо вызывать так
sum = convert(0, int(len(list))-1, *list)
наверное, еще захотите сместить строку с return на два отступа влево. Звездочки это не указатели их можно убрать. В общем много еще нехорошего тут.

Офлайн

#4 Дек. 9, 2013 00:22:09

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

Помогите с написанием функции, пожалуйста

и имена sum и list лучше заменить, иначе это придётся делать потом, когда понадобится сумма или список
да и код из-за этого нечитамый: кажется, либо с функциями что-то делается, либо там int и len - тоже переменные



Отредактировано py.user.next (Дек. 9, 2013 00:22:59)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version