Архив автора: admin

Списки Python

Python включает ряд последовательных типов данных, которые позволяют хранить коллекции данных организованным и эффективным способом. Основные типы последовательностей — это списки, кортежи и объекты диапазона.

В этой статье рассматриваются списки Python. Мы покажем вам, как создать список, разрезать и отсортировать список, добавить или удалить элементы из списка и т. Д.

Списки представляют собой изменяемые последовательности, что означает, что они могут быть изменены после создания. Списки являются одним из наиболее часто используемых типов данных в Python и обычно используются для хранения коллекций элементов одного типа.

Создание списка

Списки обычно создаются путем помещения элементов в квадратные скобки [] , разделенных запятыми. В них может быть любое количество предметов, которые могут быть разных типов. Вот пример:

L = ['orange', 'white', 'green']

Квадратные скобки без элементов между ними обозначают пустой список:

L = []

Хотя списки Python обычно однородны, у вас могут быть элементы со смешанными типами данных:

L = [1, 'white', 6.5]

Вы также можете объявить вложенные списки, в которых один или несколько элементов также являются списками:

L = [1, 2, ['red', 'blue']]

Несколько элементов могут иметь одно и то же значение:

L = [1, 2, 3, 2, 2, 1]

Списки также могут быть построены с использованием понимания list() конструктора list() и других встроенных функций, таких как sorted() .

Доступ к элементам списка

На элемент списка можно ссылаться по его индексу. Индексы являются целыми числами и начинаются от 0 до n-1 где n — количество элементов:

L = ["a", "b", "c", "d"]
      0    1    2    3

В Python индексы заключаются в квадратные скобки:

L[index]

Например, для доступа ко второму элементу списка вы должны использовать:

colors = ['orange', 'white', 'green']colors[1]

'white'

Если вы ссылаетесь на несуществующий индекс, IndexError исключение IndexError :

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Для доступа к элементам во вложенном списке используйте несколько индексов:

L = [1, 2, ["red", "blue"]]L[2][1]

'blue'

Python также позволяет вам получать доступ к элементам списка, используя отрицательные индексы. Последний элемент обозначается как -1 , второй последний элемент — как -2 и так далее:

L = ["a", "b", "c", "d"]
     -4   -3   -2   -1

Например, чтобы получить доступ ко второму элементу с конца, вы должны использовать:

colors = ['orange', 'white', 'green']colors[-2]

'white'

Нарезка списка

В Python вы можете разрезать список, используя следующую форму:

L[start:stop:step]

  • Первый аргумент указывает индекс, с которого начинается извлечение. Когда используется отрицательный индекс, он указывает смещение от конца списка. Если этот аргумент опущен, нарезка начинается с индекса 0.
  • Второй аргумент указывает индекс, до которого следует завершить извлечение; результат не включает элемент «стоп». Когда используется отрицательный индекс, он указывает смещение от конца списка. Если этот аргумент опущен или превышает длину списка, нарезка переходит в конец списка.
  • Третий аргумент является необязательным и указывает шаг нарезки. Когда аргумент «шаг» не используется, по умолчанию он равен 1. Когда используется отрицательное значение, срез принимает элементы в обратном порядке.

Результатом нарезки списка является новый список, содержащий извлеченные элементы, а исходный список не изменяется.

Все следующее является допустимым синтаксисом Python:

L[:] # copy whole list
L[start:] # slice the list starting from the element with index "start" to the end of the list.
L[:stop] # slice the list starting from the begging up to but not including the element with index "stop".
L[start:stop] #  slice the list starting from the element with index "start" up to but not including the element with index "stop".
stop"
L[::step] #  slice the list with a stride of "step"

Ниже приведен базовый пример того, как разрезать список, начиная с элемента с индексом 1 и заканчивая элементом с индексом 4, но не включая его:

fruits = ['Apple', 'Peach', 'Lemon', 'Strawberry', 'Grape']fruits[1:4]

['Peach', 'Lemon', 'Strawberry']

Обновление значения элемента

Чтобы изменить значение определенного элемента в списке, обратитесь к его порядковому номеру:

L[index] = value

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

colors = ['orange', 'white', 'green']colors[-1] = "blue"print(colors)

['orange', 'white', 'blue']

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

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

Вы также можете обновить часть списка новыми значениями:

colors = ['orange', 'white', 'green']colors[1:3] = ['red']print(colors)

['orange', 'red']

Замещающий блок может иметь меньшее, большее или такое же количество элементов, как и список. Это позволяет расширять или сжимать список.

Добавление элементов в список

Тип данных списка имеет два метода, которые позволяют добавлять элементы в список : append() и insert() .

Метод append() добавляет элемент в конец списка. Синтаксис метода append() следующий:

L.append(element)

«Element» — это элемент, который нужно добавить в список. Это может быть любой тип данных, включая список. Вот пример:

colors = ['orange', 'white', 'green']colors.append('red')print(colors)

['orange', 'white', 'green', 'red']

Метод insert() рекламирует элемент в определенной позиции в списке и имеет следующий синтаксис:

L.insert(index, element)

«Index» — это позиция, в которую вы хотите вставить элемент, а «element» — это элемент, который нужно добавить в список. В следующем примере показано, как добавить элемент в список на первой позиции:

colors = ['orange', 'white', 'green']colors.insert(0, 'red')print(colors)

['red', 'orange', 'white', 'green']

Метод extend() позволяет расширить список несколькими элементами. Он принимает единственный аргумент и имеет следующий синтаксис:

L.extend(list)

Элементы «списка» добавляются в конец «L». Вот пример:

colors = ['orange', 'white', 'green']colors.extend(['blue', 'black'])print(colors)

['orange', 'white', 'green', 'blue', 'black']

Удаление элементов из списка

Метод remove() принимает один аргумент и удаляет из списка первый элемент со значением, соответствующим аргументу:

L.remove(element)

colors = ['orange', 'white', 'orange', 'green']colors.remove('orange')print(colors)

['white', 'orange', 'green']

Если элемент с данным значением не существует, возникает исключение ValueError :

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

Метод pop() принимает один аргумент и удаляет элемент с индексом, соответствующим аргументу, из списка:

L.pop(element)

Аргумент является необязательным. По умолчанию используется значение «-1», которое является последним элементом списка. Возвращаемое значение метода — удаленный элемент. Вот пример:

colors = ['orange', 'white', 'green']colors.pop(1)print(colors)

'white'
['orange', 'green']

Ключевое слово del в сочетании с обозначением среза позволяет удалить более одного элемента. Например, чтобы удалить первые два элемента из списка, вы должны использовать следующее:

colors = ['orange', 'white', 'orange', 'green']del colors[0:2]print(colors)

['orange', 'green']

Чтобы удалить все элементы, используйте метод clear() , который очищает список и не принимает никаких аргументов:

colors = ['orange', 'white', 'green']colors.clear()print(colors)

[]

Найдите длину списка

Встроенная функция len() возвращает общее количество элементов объекта.

Чтобы узнать длину списка, передайте его в качестве аргумента функции len() :

len(L)

Вот пример:

colors = ['orange', 'white', 'green']num = len(colors)print(num)

3

Итерация по списку

Чтобы перебрать все элементы в списке, используйте цикл for :

colors = ['orange', 'white', 'green']for color in colors:    print(color)

orange
white
green

Если вам нужны индексы, в вашем распоряжении несколько методов. Наиболее распространенные способы — комбинировать функции range() и len() или использовать встроенную функцию enumerate() .

В приведенном ниже примере показано, как получить индекс и значение каждого элемента в списке:

colors = ['orange', 'white', 'green']for i in range(len(colors)):  print("Index {} : Value {}".format(i, colors[i]))

Index 0 : Value orange
Index 1 : Value white
Index 2 : Value green

Вместо использования шаблона range(len(...)) вы можете использовать функцию enumerate() для enumerate() списка более питоническим способом:

colors = ['orange', 'white', 'green']for index, value in enumerate(colors):   print("Index {} : Value {}".format(index, value))

Index 0 : Value orange
Index 1 : Value white
Index 2 : Value green

Проверить, существует ли элемент

Чтобы проверить, существует ли элемент в списке, вы можете использовать операторы in и not in :

colors = ['orange', 'white', 'green']print('orange' in colors)

Результатом будет True или False :

True

Вот еще один пример с использованием оператора if :

colors = ['orange', 'white', 'green']if 'blue' not in colors:    print('no')else:    print('yes')

Результатом будет True или False :

no

Списки Python

Объекты списка принимают следующие методы:

  • append(x) — добавляет элемент в конец списка.
  • clear() — удаляет все элементы из списка.
  • copy() — возвращает частичную копию списка.
  • count(x) — возвращает количество раз, когда «x» появляется в списке.
  • extend(iterable) — добавляет «итерабельность» в конец списка.
  • index(x) — возвращает позицию первого вхождения элемента со значением ‘x’.
  • insert(i, x) — добавляет элемент в заданную позицию.
  • pop(i) — удаляет элемент из заданной позиции.
  • remove() — удаляет элемент с заданным значением.
  • reverse()переворачивает элементы списка .
  • sort()sort() элементы списка.

Выводы

В этой статье мы обсудили, как создавать списки и работать со списками в Python.

Тип данных списка включает ряд полезных методов.

Если у вас есть вопросы или отзывы, не стесняйтесь оставлять комментарии



2020-10-13T18:22:42
Python

Как сбросить Windows Search, чтобы исправить проблемы с поиском

В Windows 10 Windows Search — это функция, которая позволяет вам искать практически все, что доступно локально, включая приложения, файлы и настройки, а также контент из Интернета, такой как погода, валюта и файлы, хранящиеся в облаке, с панели задач с помощью кнопки Пуск. меню или окно поиска.

Хотя поиск Windows обычно просто работает, если у вас возникли проблемы с этой функцией (например, если индексатор не работает, вы не можете изменить настройки или видите определенную ошибку), теперь вы можете использовать PowerShell. команда для сброса компонентов поиска для решения большинства проблем.

Команда сброса доступна начиная с сборки 20175 Windows 10 Insider Preview , и она доступна не только для сброса поиска Windows 10, но вы также можете сбросить многие другие системные компоненты (например, меню Пуск и приложение Настройки) и практически любую универсальную платформу Windows ( UWP), чтобы устранить проблемы, когда невозможно удалить или сбросить компонент с помощью приложения Настройки.

В этом руководстве вы узнаете, как сбросить компоненты поиска Windows для устранения проблем с функцией в Windows 10.

Как сбросить Windows Search с помощью PowerShell в Windows 10

Чтобы сбросить компоненты Windows Search, выполните следующие действия:

  1. Откройте Пуск в Windows 10.
  2. Найдите PowerShell, щелкните правой кнопкой мыши верхний результат и выберите параметр Запуск от имени администратора .
  3. Введите следующую команду, чтобы сбросить компоненты меню Пуск, и нажмите Enter:
    Get-AppxPackage Microsoft.Windows.Search | Reset-AppxPackage

После выполнения этих шагов компоненты Windows Search будут сброшены, чтобы решить проблемы с функцией. Однако этот процесс не перестроит базу данных индекса или не изменит настройки на значения по умолчанию.

В случае, если команда не работает, скорее всего, у вас нет версии Windows 10, которая поддерживает эту функцию, или вы не используете PowerShell в качестве администратора. Возможность перезагрузки системных приложений доступна начиная со сборки 20175.



2020-10-13T10:52:46
Вопросы читателей

Как правильно настроить TTL домена

TTL означает «время жизни» и указывает, как долго ваши настройки DNS должны храниться в кэше, прежде чем они будут автоматически обновлены.

Когда происходит изменение DNS, остальной части Интернета требуется время, чтобы это заметить. Некоторые примеры таких изменений: обновление IP-адреса сервера, обновление записи MX для размещения вашей электронной почты в новом месте или добавление нового веб-сайта. Параметр TTL сообщает Интернету, как долго ждать, прежде чем вернуться для проверки вашей записи DNS на предмет потенциально новой информации.

Если для параметра TTL DNS установлено значение 12 часов, ваши записи DNS будут кэшироваться в течение 12 часов, прежде чем срок их действия истечет, и новая информация вступит в силу.

TTL на доменах IONOS устанавливается на срок до 1 часа для всех записей A, AAA, MX, TXT и CNAME.

Как долго длится TTL?

TTL указывается в секундах. Типичное значение по умолчанию обычно составляет 12 часов (43200 секунд) или 24 часа (86400 секунд). Например — сайт переезжает на новый сервер; или вы добавляете новый URL на свой сервер. Новые изменения DNS вступят в силу через 12–24 часа.

Обратите внимание, что даже если вы измените TTL для своего доменного имени, это не означает, что автоматически каждая сеть в Интернете будет соблюдать это значение. Многие поставщики интернет-услуг (ISP) игнорируют настройки TTL и проверяют внешние записи DNS по своему собственному расписанию.

Лучшие практики DNS TTL

По большей части нет необходимости изменять TTL. Однако, если вы знаете, что скоро внесете большое изменение в DNS, и хотите, чтобы изменения вступили в силу быстро, вы можете изменить свой TTL заранее.

По крайней мере, за 24 часа до начала обновите TTL до более короткого значения. Например, вы можете изменить его на 3600 (1 час).

Когда ваша работа будет сделана, обязательно вернитесь и верните свои настройки TTL к исходным значениям. Кэширование DNS — важный способ снизить нагрузку на серверы, и лучше всего поддерживать низкий уровень этого трафика.

Минимальное значение TTL DNS

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

Установите для минимального значения TTL DNS значение больше 0. Никогда не устанавливайте для TTL DNS значение 0. Число 0 не определено в стандарте, и это может привести к игнорированию или отклонению вашей информации DNS.

Рекомендация : 3600 (1 час) — хорошее минимальное значение. Он достаточно низкий, чтобы изменения вступили в силу быстро, но не настолько низкий, чтобы DNS-серверы были перегружены.

Максимальное значение TTL DNS

Максимальное значение TTL — 604800 (7 дней). Хотя технически не существует максимального значения TTL для DNS, значения более 7 дней будут автоматически округляться до 7 дней.

Рекомендация: для большинства пользователей максимальное значение TTL для DNS 86400 (24 часа) является хорошим выбором.

Динамический DNS TTL

Динамический DNS (DDNS) — отличный способ указать доменные имена на нестатический IP-адрес.

Например, предположим, что вам принадлежит доменное имя example.com. Вы хотите указать home.example.com на сервер в вашей домашней сети; однако у вас нет статического IP-адреса от вашего интернет-провайдера. Это означает, что внешний IP-адрес вашего домашнего сервера будет периодически меняться.

Сервисы динамического DNS могут указывать доменное имя (например, home.example.com) на переменный IP. Каждый раз при изменении IP-адреса ваш DNS автоматически обновляется, поэтому изменение вступает в силу быстро.

Если вы настроили динамический DNS для доменного имени, вас могут попросить указать TTL для записей. Однозначного ответа на вопрос о значении TTL, которое следует использовать для динамической записи DNS, не существует. Частично это будет зависеть от того, как долго находится аренда IP-адреса. Чем чаще меняется IP-адрес, тем ниже TTL, который вам следует использовать.

Рекомендация. Хорошее практическое правило — сделать TTL DDNS вдвое меньше, чем аренда DHCP. Если аренда IP-адреса установлена ​​на 60 (1 минута), установите TTL на 30 (30 секунд). Если IP-адрес 3600 (1 час), установите TTL на 1800 (30 минут).

Как выполнить поиск в DNS TTL

Узнайте, как проверить настройки TTL для вашего веб-сайта.

Linux, Unix или Mac OS X

Самый простой способ узнать настройки TTL — использовать digутилиту, доступную в Linux, Unix и Mac OS X.

В оболочке (командной строке) введите:

dig example.com

Это вернет информацию DNS (включая значения TTL) для имени домена:

Значение «7728» — это TTL для записи в секундах (7 728 секунд = 2 часа 8 минут).

Windows

В Windows вы можете использовать эту nslookupутилиту для проверки значений TTL DNS для веб-сайта.

Сначала откройте окно командной строки.

• Windows 7: Пуск -> Все программы -> Стандартные -> Командная строка • Windows 10: щелкните правой кнопкой мыши кнопку «Пуск» -> Выполнить -> введите «cmd» в поле и нажмите «ОК».

Чтобы запустить nslookup и получить значения TTL, введите:

nslookup –type=soa example.com

Это вернет информацию авторитетного сервера имен для этого домена, включая TTL по умолчанию в секундах и часах.

В этом случае TTL веб-сайта установлен на 3600 секунд (1 час).

В сети

Есть несколько веб-сайтов, которые позволяют использовать утилиту dig для бесплатного поиска DNS TTL.

Ниже мы используем Google Apps: (https://toolbox.googleapps.com/apps/dig/)

Как видите, значение TTL DNS для записей этого домена установлено на 21599 секунд (6 часов).

Как изменить TTL, если у вас есть собственный DNS

Если вы используете собственный DNS-сервер, для изменения TTL достаточно отредактировать файл зоны и убедиться, что ваша DNS-служба принимает изменения. Специфика будет зависеть от того, какую службу DNS вы используете, а в некоторых случаях от того, какую версию Linux или Unix вы используете.

После внесения изменений вы можете проверить, вступили ли они в силу, запросив у вашего сервера новую информацию DNS с помощью команды:

dig @localhost example.com

BIND

BIND — это наиболее широко используемое программное обеспечение DNS. В BIND TTL хранится в верхней части файла зоны, обычно во второй строке. Объявление TTL начинается с $TTL. По умолчанию TTL составляет четыре часа (14 400 секунд):

$TTL 14400

Поиск файла зоны: Red Hat и CentOS

При типичной установке BIND в Red Hat или CentOS файл зоны веб-сайта будет выглядеть примерно так /var/named/[domain name].dbили /var/named/[domain name].zone. Например, чтобы отредактировать файл для example.com в типичной настройке по умолчанию, введите следующую команду:

sudo nano /var/named/example.com.db

Поиск файла зоны: Debian и Ubuntu

В типичной установке BIND в Debian или Ubuntu файл зоны веб-сайта будет выглядеть примерно так /etc/bind/[domain name].db. Например, чтобы отредактировать файл для example.com в типичной настройке по умолчанию, введите следующую команду:

sudo nano /etc/bind/example.com.db

Редактирование файла зоны

В файле зоны вам нужно будет отредактировать две строки: TTL и серийный номер.

  1. Обновите TTL до значения, которое вы хотите использовать.
  2. Обновите серийный номер, чтобы BIND зарегистрировал изменение.

Обновление TTL

TTL будет первой строкой файла и будет выглядеть примерно так:

$TTL            86400

Просто измените число на значение TTL, которое вы хотите установить, в секундах.

Обновление серийного номера

В типичной конфигурации серийный номер нужно просто увеличить. Например, серийный номер 1234будет обновлен до 1235.

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

Сохраните и выйдите из файла.

Проверка файла

Перед тем, как перезагрузить изменения, проверьте синтаксис основной конфигурации BIND с помощью команды:

sudo named-checkconf

Если все в порядке, проверьте синтаксис только что отредактированного файла зоны с помощью команды:

sudo named-checkzone [domain name] [path to file]

Например, если вы изменили TTL для example.com в файле, /var/named/example.com.dbкоманда будет выглядеть так:

sudo named-checkzone example.com /var/named/example.com.db

Перезагрузка изменений

Если файлы проходят проверку синтаксиса, перезагрузите файл зоны в BIND с помощью команды:

sudo rndc reload example.com

Необязательно: в Red Hat и CentOS, если systemctlон был настроен, вы можете перезапустить BIND вместо этого, используя команду:

sudo systemctl restart named

Несвязанный

Unbound недавно заменил BIND в качестве DNS-сервера по умолчанию во многих системах BSD, включая FreeBSD 10 и выше и OpenBSD 5.6 и выше.

По умолчанию в большинстве систем файл конфигурации находится по адресу:

  • OpenBSD :/var/unbound/etc/unbound.conf
  • FreeBSD 10.0 и ранее :/usr/local/etc/unbound/unbound.conf
  • FreeBSD 10.1 и выше :/etc/unbound/unbound.conf
  • Red Hat и CentOS 7 :/etc/unbound/unbound.conf

В файле конфигурации Unbound по умолчанию не указаны значения TTL. Вы можете добавить TTL в файл несвязанной зоны со следующими атрибутами:

  • cache-max-ttl Максимальный период времени для кеширования TTL. По умолчанию 86400 секунд (1 день).
  • cache-min-ttl Минимальная продолжительность кеширования TTL. По умолчанию 0 секунд. Примечание: официальная документация рекомендует оставить это значение равным нулю.

Чтобы изменить или установить TTL, отредактируйте unbound.conf файл:

sudo nano /etc/unbound/unbound.conf

Проверьте файл для cache-max-ttl и cache-min-ttl атрибутов. Если они уже существуют, вы будете их редактировать. Если их нет, вам нужно будет добавить их:

## Minimum lifetime of cache entries in seconds.  Default is 0.

cache-min-ttl: 0

## Maximum lifetime of cached entries. Default is 86400 seconds (1  day).

cache-max-ttl: 14400

Поместите эти конфигурации в основной блок команд сервера, затем сохраните и выйдите из файла.

После редактирования файла конфигурации вы можете протестировать конфигурацию с помощью команды:

unbound-checkconf

Наконец, перезапустите Unbound, чтобы изменения вступили в силу с помощью команды:

unbound-control reload



2020-10-12T12:42:06
Вопросы читателей

Цикл while в Python

Циклы — одна из фундаментальных концепций языков программирования. Циклы удобны, когда вы хотите повторить определенный блок кода несколько раз, пока не будет выполнено заданное условие.

В Python есть две основные конструкции цикла: цикл for и while .

В этом руководстве рассматриваются основы циклов while в Python. Мы также покажем вам, как использовать предложение else и операторы break и continue .

Python while Loop

В while цикл выполняет свои операторы неизвестное число раз до тех пор , как данное условие имеет значение true .

Python во while цикла имеет следующий вид:

while EXPRESSION:

    STATEMENT(S)


Оператор while начинается с ключевого слова while , за которым следует условное выражение.

EXPRESSION оценивается перед выполнением операторов. Если условие true , выполняется STATEMENT(S) . В противном случае, если условие оценивается как false , цикл завершается, и управление программой передается следующей инструкции.

Блок STATEMENT(S) начинается с отступа и заканчивается первой строкой без отступа. Большинство людей предпочитают использовать отступы с четырьмя или двумя пробелами. Официальное руководство по стилю для кода Python рекомендует использовать 4 пробела для каждого уровня отступа и избегать смешивания использования табуляции и пробелов для отступа.

Давайте посмотрим на следующий пример кода, который увеличивает и печатает текущее значение переменной i если оно меньше пяти:

i=0

while i < 5:

    i += 1

    print('number:', i)


Цикл вторника повторяется, пока i меньше или равно пяти. Он выдаст следующий результат:

number: 1

number: 2

number: 3

number: 4

number: 5


Python поддерживает стандартные операции сравнения:

  • a == b — Истинно, если a и b равны.
  • a != b — Верно, если a и b не равны.
  • a > b — Истинно, если a больше b .
  • a >= b — Истинно, если a равно или больше b .
  • a < b — Истинно, если a меньше b .
  • a <= b — Истинно, если a равно или меньше b .

Чтобы отрицать условное выражение, используйте логический оператор not :

i=0

while not i >= 5:

    i += 1

    print('number:', i)


break и continue утверждения

break и continue заявления позволяют контролировать while выполнение цикла.

Оператор break завершает текущий цикл и передает управление программой оператору, который следует за завершенным циклом. Наиболее распространенная ситуация — использовать break для завершения цикла при выполнении определенного условия.

В следующем примере выполнение цикла прерывается, когда текущий повторяемый элемент равен 2 .

i=0

while i < 5:

    i += 1

    if i == 2:

        break

    print('number:', i)


Number: 1


Оператор continue завершает текущую итерацию цикла и передает управление программой следующей итерации цикла.

В следующем примере, как только текущий повторяемый элемент равен 2 оператор continue заставит выполнение вернуться к началу цикла и продолжить следующую итерацию.

i=0

while i < 5:

    i += 1

    if i == 2:

        continue

    print('number:', i)


number: 1

number: 3

number: 4

number: 5


else пункт

В отличие от других языков, в Python, то в while петля имеет опциональный else условие:

while EXPRESSION:

    STATEMENT(S)

else:

    STATEMENT(S)


Операторы внутри предложения else выполняются только тогда, когда выражение EXPRESSION значение false . Если возникает исключение или цикл завершается оператором break , оно не выполняется.

Вот пример:

i=0

while i < 5:

    i += 1

    print('number:', i)

else:

    print('Loop completed.')


number: 1

number: 2

number: 3

number: 4

number: 5

Loop completed.


Теперь Лью посмотрим , что происходит , когда вы break из петли:

i=0

while i < 5:

    i += 1

    if i == 2:

        break

    print('number:', i)

else:

    print('Loop completed.')


Оператор внутри предложения else не выполняется, потому что выражение не имеет значения false :

Number: 1


else пункт с в while цикла не часто используется. Одна из распространенных ситуаций — это когда вы ожидаете выхода из цикла, и если цикл продолжает выполняться до тех пор, пока условие не станет false , вы можете выполнить некоторый оператор или функцию.

Бесконечный цикл while

Бесконечный цикл — это цикл, который повторяется бесконечно и никогда не завершается, пока программа не завершится. Если условие всегда истинно, вы получаете бесконечный цикл.

Бесконечные циклы обычно используются для того, чтобы программа ожидала возникновения какого-либо внешнего события. Обычно в Python бесконечный цикл создается с помощью while True: вместо True вы также можете использовать любое другое выражение, которое всегда возвращает true .

Вот пример бесконечного в while цикл , который будет продолжать предложит ввести «Да»:

while True:

    i = input('Please enter 'Yes': ')

    if i.strip() == 'Yes':

        break


В while цикл выше будет работать , пока вы не введете «Да»:

Please enter 'Yes': 3

Please enter 'Yes': l

Please enter 'Yes': lin

Please enter 'Yes': No

Please enter 'Yes': Yes


Другой способ прервать бесконечный цикл — нажать CTRL+C

При написании бесконечных циклов убедитесь, что вы используете оператор break для выхода из цикла в какой-то момент.

Выводы

В while цикл многократно выполняет свои заявления до тех пор , данное условие имеет значение true .

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.



2020-10-11T21:45:14
Python

Linux. Кто сидит на портах?

Контроль всех входов и выходов — это основа безопасности. Поэтому для определения уровня защищённости машины стоит первым делом проверить наличие открытых портов. Если они есть, то определить какие именно программы открывают эти порты. Попробуем это сделать. Читать

Сканирование сетевых портов в Linux – команда nmap

Время от время для безопасности рекомендуется сканировать свои сети для обнаружения уязвимостей. Для мониторинга сетевого окружения можно воспользоваться сканером с открытым исходным кодом nmap (полное наименование – Network Mapper). Данный инструмент очень удобен в работе, поэтому его применяют многие пользователи, начиная с новичков и заканчивая высококлассными специалистами по безопасности.


Установка nmap на Linux

По умолчанию nmap не установлен в операционною систему Линукс, поэтому его нужно установить.

Centos  8:

dnf install nmap

Для Дебиан / Убунту:

# apt update

# apt install nmap

Centos  7 / Redhat /Fedora

yum install nmap

Синтаксис

Сканирование портовСинтаксис команды nmap выглядит следующим образом:

nmap опции адрес

Network Mapper – проверенный инструмент санирования сетевых портов при использовании определенных опций. Примечательно, что данная команда также является излюбленной хитростью хакеров, поскольку с её помощью можно выявить уязвимые места в системе, подвергаемой атаке. Подобные действия являются противозаконными.

Если утилита nmap отсутствует на компьютере, необходимо заняться её установкой. Это легко сделать при помощи терминала:

$ sudo apt-get install nmap

Примеры

Для поиска устройств, подключенных к сети, пользователю необходимо узнать маску локальной сети. Эта информация будет доступна после ввода команды:

$ ip addr show

В открывшемся окне, напротив слова «inet» запомните число, указанное, после слеша. Например, 24. Это число понадобится вам в дальнейшем. Теперь нужно задать команду для сканирования сети с указанием сохраненного числа и IP маршрутизатора:

$ nmap -sL 192.168.1.1/24

Если в операционной системе Linux стоит защита от сканирования портов, процесс не даст никаких результатов. В этом случае пользователю придется пойти на небольшую хитрость – использовать специальную опцию для обхода этой защиты. Как это будет выглядеть на практике:

$ nmap -sn 192.168.1.1/24

Теперь в открывшемся окне должны появиться результаты сканирования. Далее следует провести сканирование портов нужного узла без добавления каких-либо опций. Запуск утилиты:

# nmap 192.168.1.1

В открывшемся окне будут указаны все порты, используемые различными сервисами на ПК. Не забывайте о том, что каждый из этих портов может послужить уязвимым местом в системе. Если вас не устраивает сжатый вид найденной информации о подключенных портах, попробуйте заполучить развернутые данные. Это можно выполнить данным способом:

# nmap -sV 192.168.1.1

Для осуществления проверки конкретного порта понадобится команда в виде:

# nmap -sC 192.168.56.102 -p 21

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

# find /usr/share/nmap/scripts/ -name '*.nse' | grep ftp

Чтобы утилита функционировала в агрессивном режиме (при таком раскладе в окне будет указана развернутая информация о портах, вызванная всего лишь одной командой, что особенно удобно для неопытного владельца Linux), нужно добавить специальную опцию в стандартную команду. А именно:

# nmap -A 192.168.1.1

Заключение

Утилита Network Mapper – отличный инструмент для мониторинга сетевого окружения в устройствах, функционирующих на операционной системе Linux (и не только). При этом нельзя забывать о возможных проделах мошенников, которые не брезгуют изучать чужие системы и сети с помощью функциональной программы. Но не стоит паниковать! Организуйте качественное и своевременное администрирование системы, чтобы повысить уровень её безопасности.



2020-10-09T21:14:05
Безопасность