Специалисты по Питону, подскажите, пожалуйста.

regta
На сайте с 15.04.2006
Offline
300
673

Здравствуйте. Вот такой фрагмент кода. В чем м.б. ошибка?

n = int(input())
a_list = []
res_list = []

for i in range(0,n + 1):
    a = int(input())
    a_list.append(a)

b_list = a_list
b_list.remove(a_list[0])

for i in range(0,len(b_list) + 1):
    res_list.append(b_list[i] + a_list[i - 1])

print(a_list[n])
for i in range(0,len(res_list) + 1):
    print(res_list[i])
print(a_list[0])


Заранее крайне признателен, спасибо!
Цитируйте, плиз, историю переписки в личке. Спасибо.
T7
На сайте с 19.09.2018
Offline
63
#1
regta :
b_list = a_list
b_list.remove(a_list[0])

В курсе, что изменение b_list приведет к изменению а_list? Ибо это ссылки на одно и тоже.

assert id(b_list) == id(a_list), 'одинаковы ли переменные?'

regta :
for i in range(0,len(b_list) + 1):

будет list index out of range,  [1,2,3] - len(b_list) = 3 => b_list[3]  юк

Проще все

for i, v in enumerate(b_list):
    print('b_list[%s]=%s' % (i, v))
F
На сайте с 13.11.2009
Offline
252
#2
А я только начал изучать питон в свои 40 лет, но вместе с дочерью ) пока всё сложно, до таких кодов еще не дошли
Sly32
На сайте с 29.03.2012
Offline
302
#3
timo-71 #:

Проще все

Ух ты любишь %? Через f-string принтить нагляднее)

T7
На сайте с 19.09.2018
Offline
63
#4
Sly32 #:

Ух ты любишь %? Через f-string принтить нагляднее)

Вредная привычка - 2 натура😣 А так, если больше 2/3 переменных, то скорее так напишу.

print(f'b_list[{i}]={v}')

А вот так - 

print('b_list[{}]={}'.format(i, v))
не люблю.


Sly32
На сайте с 29.03.2012
Offline
302
#5
timo-71 #:

Вредная привычка - 2 натура😣 А так, если больше 2/3 переменных, то скорее так напишу.

А вот так - 

не люблю.


Да, я тоже от формата ушел. А вот в логгировании тоже до сих пор использую % - это дешевле считается

Sly32
На сайте с 29.03.2012
Offline
302
#6
Если нужна независимая копия листа, проще всего это сделать через срез [:]
T7
На сайте с 19.09.2018
Offline
63
#7
Sly32 #:
Да, я тоже от формата ушел. А вот в логгировании тоже до сих пор использую % - это дешевле считается

На самом деле - хорошо, что гибко. Шаблон может быть взят откуда угодно.

>>> t = 'i = %s'
>>> for i in range(3):
...     print(t % i)
...
i = 0
i = 1
i = 2

%, "".формат() - легко, а с  f-string придется прокладки какие то мутить.

ЗыЖ Вроде, где то читал, что f-string быстрее всех, но это неточно. Не проверял.


Sly32
На сайте с 29.03.2012
Offline
302
#8
timo-71 #:

На самом деле - хорошо, что гибко. Шаблон может быть взят откуда угодно.

%, "".формат() - легко, а с  f-string придется прокладки какие то мутить.

ЗыЖ Вроде, где то читал, что f-string быстрее всех, но это неточно. Не проверял.


Прям скажем - так себе идея так шаблоны для вывода писать) % в логах вроде толи кэшируется толи еще что и там он предпочтительнее

T7
На сайте с 19.09.2018
Offline
63
#9
Sly32 #:
Прям скажем - так себе идея так шаблоны для вывода писать

А как?

У меня пара вариантов

# YAML
msg:
    ru:
        newusr: "Пользователь %s добавлен, пароль выслан на емайл"
        success: Успешно

#code
return {'success':1,
        'modal': modal(
        request.app['cnf']['msg'][lang]['success'],
        request.app['cnf']['msg'][lang]['newusr'] % p['name'],
        _id = 'registerres',
        t = 'success'),
        'tm' : time() }

Когда надо типа того:



А если шаблоны посложней, то

from jinja2 import Template
...........

if isinstance(body, dict) and tpl:
        tpl = Template(tpl)
        body = tpl.render( body )
        msg.add_header('Content-Type', 'text/html')
        msg.attach(MIMEText(body, 'html', 'utf-8'))
    else:
        msg.attach(MIMEText(str(body), 'plain', 'utf-8'))

Sly32
На сайте с 29.03.2012
Offline
302
#10
timo-71 #:

А как?

У меня пара вариантов

Когда надо типа того:



А если шаблоны посложней, то

Мне, избалованному Джангой, второй вариант конечно ближе) Отдельно весь контекст, который потом рендерится шаблонизатором, но идея испрользовать YAML для этого - интересно. 

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий