Giter Club home page Giter Club logo

pybasic2024's Introduction

Hello This is VukOgnezmij homework

pybasic2024's People

Contributors

vukognezmij avatar

Watchers

 avatar

pybasic2024's Issues

conditionals

@VukOgnezmij

task1:

Тут код рабочий, наша цель достигнута, но рефакторить можно, вот на что я бы внимании обратил:

  • у вас в каждой ветки идет повторение print(f"нотация {mac}: {mac_notation}"). Мы можем это вынести за пределы условного выражения. А в ходе прохождения по усливию просто заполнить переменную mac_notation нужным типом нотации (или записать туда "неизсвестна" в закрывающем else).
  • if mac_str.isupper() == True::
    • не обязательно делать replace("-", ""), для работы isupper(). У - нет верхнего/нижнего регистра, поэтому на работу isupper/islower он не влияет.
    • isupper возвращает True/False, нет необходимости добавлять еще проверку вида True == True
  • if mac.find("-") != -1 and mac.count("-") == 5: - тут find лишний, если в строке нет -, то count вернет просто 0. И ваше mac.count("-") == 5 отработает корректно. Т.е. mac.find("-") != -1 уже входит в условие mac.count("-") == 5 и поэтому не несет никакой смысловой нагрузки
  • elif mac.find("-") == -1 and mac.find(":") != -1: это тоже не до конца понятно для чего, вложенное условие (по количеству :) можно просто на уровень выше перенести и убрать этот elif
  • строки 14 и 18: вы делаете mac_str = mac.replace(":", "") но дальше mac_str не используется, не понятно для чего создавать эту переменную

В целом структуру можно упростить до

if mac.count("-") == 5:
    if mac.isupper():
        mac_notation = "IEEE EUI-48"
    else:
        mac_notation = "IEEE EUI-48 lowercase"
elif mac.count(":") == 5:
    mac_notation = "UNIX"
elif mac.count(":") == 3:
    mac_notation = "cisco"
elif mac.isalnum():
    mac_notation = "bare"
else:
    mac_notation = "неизвестна"

print(f"нотация {mac}: {mac_notation}")

Task2:

  • range(128,191) генерирует числа от START (128) включительно до STOP (191) не включительно. Аналогично срезам (STOP не включается). В результате у вас граничные значения потерялись (127, 191, 223).
  • можно было еще первый октет в bin перевести на первые биты смотреть: 0 - A, 10 - B, 110 - C и далее.

Task3:

  • match пока лучше не трогать. В некоторых случаях проще if заменить на словарь
templates = {
    "access": access,
    "trunk": trunk,
}

template = templates.get(intf1.get("mode"))
print(template.format(**intf1))

template = templates.get(intf2.get("mode"))
print(template.format(**intf2))

strings

@VukOgnezmij тут отпишу.

task3.2.py - output_utf8 = output_utf8.replace("\r\n", "") удалит и каретку и перенос строки, нам нужно только каретку, т.е. вот так output_utf8 = output_utf8.replace("\r\n", "\n")

task4.1.py - мы посмотрим в ближайшую встречу форматирование строк, там всякую магию типа заполнения нулями можно прям в самом шаблоне писать. Ну и Template тоже не самый распространенный способ форматирования строк.

task4.5.py - предполагалось через срезы, мы еще list не смотрели (и reverse), но, как и говорил, есть много решений одной задачи, главное, что работает.

task4.6.py - там специально в соседях дан хост с дефисом, так что вот такой код output = output.replace("-", "") сломает его.

dicts

@VukOgnezmij

Task1:

  • в таком формате записи (каждый элемент/ключ-пара на новой строке) после последнего элемента так же лучше запятую ставить "enable": "True" -> "enable": "True",, это избавит от лишних изменений в коммтах, ну и pep8 об этом тоже пишет (When to use trailing commas)

Task3:

  • можно сразу делать device_dict[device["hostname"]] = device, без отдельного создания ключ-пустой словарь, а потом обновления словаря.

В остальном все ок, спасибо.

tuples

@VukOgnezmij

task1:

  • для удаления есть стандартный метод list.remove(), можно через него

task2:

  • intf_list.insert(2, "gi0/2") это мы в конец добавляем, можно (и, наверное я бы сказал, лучше) через list.append. Этим методом будем прям очень часто пользоваться.

task4:

  • output.split(" ") - про указание пробела в split показывал на встречи, так лучше не делать, если не стоит явной задачи поделить строку по одному проблемному символу. Вот разница:
In [48]: line = "  switchport trunk allowed  vlan  2,101,104"

In [49]: print(line.split())
['switchport', 'trunk', 'allowed', 'vlan', '2,101,104']

In [50]: print(line.split(" "))
['', '', 'switchport', 'trunk', 'allowed', '', 'vlan', '', '2,101,104']

task5:

  • да, хороший рабочий вариант. Можно попробовать еще через распаковку, на встрече показывал, + практика с распаковкой будет.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.