Hello This is VukOgnezmij homework
pybasic2024's Introduction
pybasic2024's People
pybasic2024's Issues
conditionals
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
Task1:
- в таком формате записи (каждый элемент/ключ-пара на новой строке) после последнего элемента так же лучше запятую ставить
"enable": "True"
->"enable": "True",
, это избавит от лишних изменений в коммтах, ну и pep8 об этом тоже пишет (When to use trailing commas)
Task3:
- можно сразу делать
device_dict[device["hostname"]] = device
, без отдельного создания ключ-пустой словарь, а потом обновления словаря.
В остальном все ок, спасибо.
tuples
task1:
- для удаления есть стандартный метод
list.remove()
, можно через него
task2:
intf_list.insert(2, "gi0/2")
это мы в конец добавляем, можно (и, наверное я бы сказал, лучше) черезlist.append
. Этим методом будем прям очень часто пользоваться.
task4:
output.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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.