Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2017 19:00:54

Vladimirv
Зарегистрирован: 2013-03-22
Сообщения: 108
Репутация: +  7  -
Профиль   Отправить e-mail  

Прошу помощи. Супер сложное задание!

Слушай, я проходил мимо, увидел интересную задачу, притом заметь уже решенную. И набросал своё решение.
Я не утверждал, что мой код идеален, что он работает в любых условиях, что он дописан до конца. Хочешь чтобы твой код развалился?
Убери из 1.txt один любой ip адрес.
Запусти файл из другой директории.
Замени в *.xsh ‘Host=’ на ‘Host =’
Так что, не надо наезжать, вставляя косяки в исходные файлы.

Офлайн

#2 Апрель 26, 2017 00:43:35

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

Прошу помощи. Супер сложное задание!

Vladimirv
Убери из 1.txt один любой ip адрес.
Запусти файл из другой директории.
Ты просто добавляешь требования, которых не было изначально. Что значит “убери адрес”? он сказал, что там точное количество адресов.

А я ничего не разваливал, просто твой код не пропускает любые файлы, которые соответствуют исходным требованиям.

Вот у него файлы состоят из секций, в каждой секции запросто может быть свой “Host=” и у тебя падает скрипт из-за этого, хотя сказано, что “Host=” должно заменяться на то, что в управляющем файле. То есть, даже если ты исправишь первую ошибку, где “Host=” ищется в середине строки, это не исправит вторую ошибку, где количество этих замен ограничено. Причём ограничено оно только у тебя в скрипте, а не в начальных требованиях. Вот исправь это всё и посмотрим, что получится, однако я думаю, что ты даже прикасаться боишься к своему коду, а то он вообще сломается, типа работает - не трогай. Вот и всё, вот твоя программа, с которой ты даже пукнуть боишься лишний раз. В реальной жизни-то надо постоянно что-то менять. Вот он сидит, ему что-то взбрендило - нужны изменения, а как ты их добавишь, если у тебя не предрасположено к этому.

Вот это ещё можешь добавить в файл второй строкой
Name=킘

И под виндой оно выпадет
Z:\test\repuser>repuser2.py
Traceback (most recent call last):
File "Z:\test\repuser\repuser2.py", line 14, in <module>
data=fin.read()
File "C:\Progra~1\Python33\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 27: character maps to <undefined>

Z:\test\repuser>

Это, конечно, легко исправить, но твои запуски пропустили это. Сейчас время такое, что всё в юникоде, а юникод чаще всего кодируется через utf-8.



Отредактировано py.user.next (Апрель 26, 2017 01:32:55)

Офлайн

#3 Апрель 26, 2017 11:01:16

Vladimirv
Зарегистрирован: 2013-03-22
Сообщения: 108
Репутация: +  7  -
Профиль   Отправить e-mail  

Прошу помощи. Супер сложное задание!

py.user.next
однако я думаю, что ты даже прикасаться боишься к своему коду, а то он вообще сломается, типа работает - не трогай. Вот и всё, вот твоя программа, с которой ты даже пукнуть боишься лишний раз.
Ты просто смешон.

Но я чувствую, что настало время программы 2.0 , поскольку созрело новое ТЗ.
Итак сформулируем ТЗ:
Дано: Есть злобный диверсант пышущий злобой и нетерпимость, не будем тыкать пальцем в нужном направлении, ладно ткнем(py.user.next), проникнув на комп. Serggg-а, он произвел диверсию.
py.user.next сам понимаешь, не могу представить чтобы Serggg-а так переклинило, и он начал косячить у себя на компе направо и налево.
Итак диверсии:
1. добавил директорию break_code.xsh
2. добавил в файлы *.xsh строку:
Trampampam:jimbo huimbo Host=X Node=Y
и на всей случай
abc Host= def
3. Кроме этого, зная злобную натуру диверсанта, предусмотрим, что он напхает 1000 и 1 строку в файлы *.xsh следующего вида:
Host=127.0.0.1 # line 1

Host=127.0.0.1 # line 1000
Host=127.0.0.1 # line 1001
4. Поставим сверхзадачу: Просмотрев директорию /etc обнаружил, что в *.ini файлах используют присвоение такого вида:
Host = 127.0.0.1
Учтем и это.
 import os
f_ctrl='1.txt'
dirpath='.'
with open(f_ctrl) as fctrl:
  addresses=list(map(str.strip, fctrl))
username=addresses.pop(0)
addresses_iterator = iter(addresses)
files=sorted(filter(lambda x:x.endswith('.xsh') and not os.path.isdir(x), os.listdir(dirpath)))
for f in files:
  with open(f) as fin:
    data=fin.read()
  new_file=[]
  host=next(addresses_iterator)
  for line in data.split('\n'):
    if any([line.startswith(x) for x in 'Host=,Host ='.split(',')]):
      new_file.append('Host=%s' % host)
    elif any([line.startswith(x) for x in 'UserName=,UserName ='.split(',')]):
      new_file.append('UserName=%s' % username)
    else:
      new_file.append(line)
  with open(f,'w') as fout:
    fout.write('\n'.join(new_file))
Насчет utf-8, у меня linux, соответственно все файлы в этой кодировке.
py.user.next
Вот это ещё можешь добавить в файл второй строкой
Name=킘
Добавлял эту строку она как и ты идет лесом.
py.user.next
Ты просто добавляешь требования, которых не было изначально. Что значит “убери адрес”? он сказал, что там точное количество адресов.
Слышишь, посмотри в зеркало, эту хрень начал ты, менять правила.

Отредактировано Vladimirv (Апрель 26, 2017 11:08:41)

Офлайн

#4 Апрель 27, 2017 00:48:22

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

Прошу помощи. Супер сложное задание!

Vladimirv
Насчет utf-8, у меня linux, соответственно все файлы в этой кодировке.
А у него-то не Linux, вот он выдал трейсбэк . Я ему ещё говорил там третий питон поставить, помнишь? Иначе второй питон со своими багами и недоделками да ещё и с виндой образуют жуткую смесь. Там по отдельности-то лишней лажи писать надо, а он ещё и совместил без какой-то серьёзной необходимости.

Это тебе повезло, что я до концов строк не докопался, потому что под виндой они транслируются правильно туда и обратно. В блокноте в винде линуксовый файл откроешь и он будет в одну строку и с квадратиками ещё. Там надо \r\n везде соблюдать (а у него в файлах, которые он выкладывал здесь, \r\n - явно в винде делались файлы).

Vladimirv
4. Поставим сверхзадачу: Просмотрев директорию /etc обнаружил, что в *.ini файлах используют присвоение такого вида:
Host = 127.0.0.1
Учтем и это.
Там может быть и
Host  =
и
Host   =
А ты думал, зачем для этого регулярки используются. Регулярное выражение можно быстро поменять и оно примет множество немного отличающихся друг от друга строк, не надо устраивать эти глупые переборы. (Я так понял, что ты даже регулярки не знаешь.)

Если бы ты писал коды такие часто, ты бы уже выкинул свой код из-за некрасивости, потому что если бы ты их часто писал, у тебя бы было их много. И когда их было бы много, ты бы увидел, что они все похожи друг на друга, как две капли воды, и легко понять их невозможно и уж тем более заметить ошибки. Это ты сейчас помнишь, что он делает, а когда их десятки и они похожи между собой, надо всё заново читать в каждом коде, чтобы просто понять, что он делает.

Vladimirv
 if any([line.startswith(x) for x in 'Host=,Host ='.split(',')]):
Здесь ты нарушил Zen, потому что за секунду непонятно, что здесь происходит, а должно быть понятно. Код должен быть ясным.

Питона ты не знаешь, это понятно
  
>>> line = 'Host ='
>>> line.startswith(tuple('Host=,Host ='.split(',')))
True
>>> line = 'Hostx ='
>>> line.startswith(tuple('Host=,Host ='.split(',')))
False
>>>
>>> line = 'Host ='
>>> line.startswith(('Host=', 'Host ='))
True
>>>

Но и в программировании ты тоже не шаришь вообще, иначе бы не делал глупейших ошибок. То есть ты просто очередной сисадмин, который думает, что сисадминство его автоматически делает неплохим программистом. Даже если ты выучишь питон, ты всё равно будешь дерьмово писать на нём. Если ты изучил карандаш, это не значит, что ты им можешь нарисовать яблоко с падающим светом. А программирование - это рисование таких яблок.

Vladimirv
Слышишь, посмотри в зеркало, эту хрень начал ты, менять правила.
Не, если бы ты не полез мнение своё продвигать, я бы ничего не говорил. Но это же ты начал про 1.0 и 2.0. Ты ещё и системы версионирования не знаешь, как они устроены обычно. Версия 2.0 делается тогда, когда получается обратная несовместимость с версией 1.x. А ты этого всего не знаешь, просто слышал чотатама, как типа по телевизору “наука 2.0” - ахаха. :D



Отредактировано py.user.next (Апрель 27, 2017 01:09:33)

Офлайн

#5 Апрель 27, 2017 10:10:01

Vladimirv
Зарегистрирован: 2013-03-22
Сообщения: 108
Репутация: +  7  -
Профиль   Отправить e-mail  

Прошу помощи. Супер сложное задание!

py.user.next c тобой все ясно. Ты зазнайка с гипер мега раздутым эго. Есть только твое мнение и неправильное, есть только твой код и неверный. В твоей голове не может уложится простая мысль: что может быть иное мнение и может быть другой код кроме твоего. Вот доказательство, ты говорил, что я боюсь притронутся к коду и т.д. Я притронулся и что, ты возьмешь свои слова назад? Ясно же, что нет. Ты бы наверно предпочел бы сдохнуть, чем взять их назад.

py.user.next
То есть ты просто очередной сисадмин, который думает, что сисадминство его автоматически делает неплохим программистом.
Ты бредишь, надо отделять мух от котлет. Программистом меня делает процесс изучения и написания кода. Также программист это еще и должность. Дальше программистов можно делить на категории по ЯП или на хороших, плохих, начинающих.

Вот тебе еще одна мысль, которую ты не переваришь: питон это всего лишь один из языков программирования, который для кого-то может быть инструментом.

py.user.next
ты просто очередной сисадмин

Ну полнейший бред, откуда это? По твоему, все у кого линукс сисадмины? Как с такой логикой, ты вообще претендуешь на высокое звание Программиста.

Короче, я внес изменение в код, ты должен взять слова свои назад. Если нет, значит ты не отвечаешь за базар и я оставляю за собой право игнорировать твои сообщения.

Отредактировано Vladimirv (Апрель 27, 2017 11:01:00)

Офлайн

#6 Апрель 27, 2017 12:02:29

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

Прошу помощи. Супер сложное задание!

Vladimirv
Вот доказательство, ты говорил, что я боюсь притронутся к коду и т.д.
Vladimirv
 files=sorted(filter(lambda x:x.endswith('.xsh') and not os.path.isdir(x), os.listdir(dirpath)))
Оно ещё может быть сокетом и именованным каналом, так что вперёд. Ты просто пытаешься сохранить лицо, стоя в луже.

Vladimirv
Программистом меня делает процесс изучения и написания кода.
Программист - тот, кто программы делает. А чтобы их делать, надо уметь их делать. А ты максимум, что можешь написать, - десять строк какой-то параши. Проблема не в том, что у тебя быдлокод, а в том, что в нём ошибки и из-за тебя постадает человек. Что я тебе про ракету зря писал что ли? Какой-то мудак один поставил неправильно датчик и из-за этого труд других людей пошёл на смарку. А если бы в ней люди живые сидели?

Поэтому ты нарушил Zen - тебе об этом говорят, его не просто так приняли. Причём нарушил ты его не потому, что ты там что-то знаешь, а потому, что ты не знаешь нихрена.

Vladimirv
Дальше программистов можно делить на категории по ЯП или на хороших, плохих, начинающих.
Это ты делишь, потому что не знаешь нихрена, так как на таком уровне новичковом, что вообще ничего не видишь, как рыбка в аквариуме. Они не делятся по языкам, они делятся по программам. Потому что знание языка не делает человека программистом. Так же как знание карандаша и кисточки не делает человека художником. Кто такой художник? Тот, кто знает, что такое карандаш, кисти и краски? Для тебя - да, а для меня - это просто шимпанзе с кистями и красками, и картины я эти смотреть не буду.

Vladimirv
Короче, я внес изменение в код
Как оно выпадало на иероглифе, так оно и выпадает. А он нигде не говорил, что там на латинице может быть всё только.



Отредактировано py.user.next (Апрель 27, 2017 12:03:19)

Офлайн

#7 Апрель 27, 2017 16:58:58

Vladimirv
Зарегистрирован: 2013-03-22
Сообщения: 108
Репутация: +  7  -
Профиль   Отправить e-mail  

Прошу помощи. Супер сложное задание!

Прочитай еще раз:

Vladimirv
Вот доказательство, ты говорил, что я боюсь притронутся к коду и т.д. Я притронулся и что, ты возьмешь свои слова назад? Ясно же, что нет. Ты бы наверно предпочел бы сдохнуть, чем взять их назад.
Так ты полностью подтвердил моё мнение. Ты не можешь признать простой факт, объективную реальность, что я поменял код и не побоялся, как ты писал. А что там с кодом, вопрос второй. Как после этого с тобой вообще о чем-то говорить?

Ты во всем видишь негатив. В использовании мной стандартных функций питона, ты видишь непонятность кода, а не знание и умение применить эти функции.

Кроме того, что ты во всем видишь негатив, ты еще жуткий зануда и притом похоже не адекватный. Например, докопался до версии 2.0, ты что думаешь я на форуме буду реально присваивать коду версии? Это просто оборот речи. Так и “наука 2.0” подразумевает новый виток в развитии, может еще что вкладывают в это понятие.
py.user.next
Я так понял, что ты даже регулярки не знаешь.
Уровень логики и анализа у тебя равен фальши в численном значении. В линукс в консоли regexp часто используется(например grep). Также, я говорил, что изучаю django, с их помощью выбирается какая функция будет отвечать на запрос. И еще, первые парсеры я писал на них, пока не узнал, что есть готовые модули. А не использовал в выложенном здесь коде т.к. просто не считаю, что в этом случае они уместны, по воробьям бить из пушки. А если посмотреть какой ты регексп запилил, ну просто ‘ яблоко с падающим светом ’. Ну просто, ржака. Еще раз, говорю ты зануда. Приплел Zen of Python сюда, и где тогда соблюдение принципа: ‘ Простое лучше, чем сложное. ’ Еще докопайся, что код не пепнутый.

Кстати, мне интересно как ты назовешь начинающего программиста? Сразу быдлокодер? И пока он не запилит винду он не достоин называться программистом? Или скажи тогда что я должен запилить, чтобы удостоиться звания начинающего программиста? Я претендую. Ты являешься пугалом на этом сайте, прочитав эту тему, новички 10 раз подумают прежде чем выложить свой код. И спрашивается как им чему-то научиться? Вот смотри эта секция форума для новичков, потому я здесь. А ты мнишь себя МегаПупом, так какого ты здесь? Может ты сам быдлокодер и тебя отовсюду гонят? А здесь можно понты гонять и это безопасно, не напхают.

py.user.next
Какой-то мудак один поставил неправильно датчик
И что ты докопался до этой ракеты? Это ты, что ли тот кто накосячил и мучает совесть? Или ты можешь сделать лучше? И вообще, мудак, не тот кто поставил а разработчик, т.к. это человеческий фактор. Отменить его нельзя. Можешь отменить? Пойди займи место!!! Как проблему решили эту? Что наняли нового сборщика? Нет, сделали невозможным установить тот датчик косячным образом. Да и разработчик, тоже всего учесть не сможет, такова реальность.

Отредактировано Vladimirv (Апрель 27, 2017 17:26:30)

Офлайн

#8 Апрель 28, 2017 01:00:08

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

Прошу помощи. Супер сложное задание!

Vladimirv
ты что думаешь я на форуме буду реально присваивать коду версии?
Ты не умеешь присваивать, иначе бы так не пропёрся. Тут даже речь не о том, что этот код слишком короткий, а о том, что ты не знаешь принципов, которые требуются тогда, когда у тебя программа уже дошла до уровня разных версий. У тебя пока что все “программы” одной и той же версии. Кстати, как ты её назовёшь 0.0.1, 0.1.0 или 1.0.0 ? Вот потому я и говорю, что твои версии на уровне “науки 2.0”, они других версий не знают, юзерское понимание.

Вот ты тут писал ещё, забыл тебе ответить тогда
Vladimirv
Также программист это еще и должность.
Ха-ха-ха, должность в трудовую тебе пишут кадровички, для них и кобыла - невеста. Программист - тот, кто написал программу, через которую ты, например, читаешь Интернет. А что про него где записано - это совершенно не важно. Потому что тысяча слов не стоит одной программы.

Vladimirv
В линукс в консоли regexp часто используется(например grep).
Там несколько видов регекспов. Если ты их знаешь, то почему не применил его при отборе имени? Потому и не применил, предпочёл длинную, корявую фигню написать, причём в таком стиле, в котором никто не пишет никогда.

Vladimirv
И еще, первые парсеры я писал на них
Парсеры писал, хаха, что в твоём понимании парсер? Да, когда-то я был молодым и наивным и писал парсеры, только это были не парсеры.

Vladimirv
Приплел Zen of Python сюда, и где тогда соблюдение принципа: ‘ Простое лучше, чем сложное. ’ Еще докопайся, что код не пепнутый.
У тебя несоблюдение большинства базовых принципов про вложенность кода и тому подобное. Ты пытаешься в одну строку загнать побольше кода, чтобы типа умным показаться, как обычно сисадмины и делают, не понимая, что это только ухудшает читаемость. Они не знают, что код пишется один раз, а читается потом сотни раз. Поэтому читаемость важнее оптимальности и уж тем более псевдооптимальности.

Vladimirv
Еще докопайся, что код не пепнутый.
Да ты не знаешь нихрена на начальном уровне, что докапываться до следующего этапа тогда? Пепы идут после Дзена.

Vladimirv
Ты являешься пугалом на этом сайте, прочитав эту тему, новички 10 раз подумают прежде чем выложить свой код.
Всегда выкладывали и всегда им говорили, чтобы выкладывали. Такой уж принцип - написанный код лучше рассказанного. Но ты же новичок, который ещё и выёживается, думаешь, что знаешь что-то. Поэтому мне приходится даже твой быдлокод читать, чтобы найти элементарные баги, которые ты сам и заложил.

Vladimirv
Кстати, мне интересно как ты назовешь начинающего программиста? Сразу быдлокодер?
Быдлокодер - этот тот, кто пишет быдлокод. А быдлокод - это код с нарушениями элементарных правил (типа когда пишут 2 * 2 = 5) по незнанию. Пишешь быдлокод всё время - значит, быдлокодер. А есть ещё говнокод - это код с нарушением всяких правил общепринятых, но не по незнанию, а типа по умности (из-за комплексов или из-за халтуры или из-за лени). Это вот, например, когда код пишут в одну строку, из-за чего он становится малопонятным, но делают это, чтобы показать, что могут короткий код написать. Говнокодерство встречается на любых уровнях развития. Быдлокодерство бывает на начальном уровне. Вот у тебя сейчас пока что быдлокодерство, потому что ты не знаешь ничего. А не знаешь, потому что пришёл в программирование из сисадминства, а у сисадминов нарушение такое есть “если я хорошо сисадминю, то значит я и программировать могу”. Это как человек, который управлял пароходом двадцать лет, садится за руль машины и считает себя автогонщиком каким-то более-менее.



Отредактировано py.user.next (Апрель 28, 2017 01:05:28)

Офлайн

#9 Апрель 28, 2017 15:57:18

Vladimirv
Зарегистрирован: 2013-03-22
Сообщения: 108
Репутация: +  7  -
Профиль   Отправить e-mail  

Прошу помощи. Супер сложное задание!

Вообще, мил человек, я сомневаюсь, что ты программист. Вот будь добр, ответь на вопросы:

Какие ЯП знаешь?
Какая у тебя должность?
В каком направлении работает твоя контора?
В каких разработках, проектах ты принимал участие?
Сколько программистов было в команде?
Над каким проектом работаешь сейчас?
В каких опен проектах участвовал?
Какие модули использовались при разработке?
Дай ссылку на твой код на гитхабе.

Подтверди свою заявленную квалификацию!!!

А то чушь нести ты горазд.

Офлайн

#10 Апрель 28, 2017 16:04:51

Vladimirv
Зарегистрирован: 2013-03-22
Сообщения: 108
Репутация: +  7  -
Профиль   Отправить e-mail  

Прошу помощи. Супер сложное задание!

Кстати, выполни тестовое задание, с той же целью:

Подтверди свою заявленную квалификацию!!!

Вот строчки кода:

 f_ctrl='1.txt'
with open(f_ctrl) as fctrl:
  addresses=
Вот новый вид файла 1.txt, который предусматривает удобное пользование им. Стандартные возможности: добавлять комментарии и пустые строки.
Содержимое 1.txt:
# комментарий: введите UserName
chen

# ip которые будут использованы:
# стабильные
35.189.01.1
35.189.01.2

# новые рабочие
35.189.01.3
35.189.01.4

# для тестирования
35.189.01.5

35.189.01.18
Нужно как и прежде, получить список состоящий из UserName и айпишников. При этом нужно исправить только одну строку: третью. В указанном выше коде. Это тест на знание и умение использовать стандартные возможности питона, без regexp.

Отредактировано Vladimirv (Апрель 28, 2017 16:10:05)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version