Встроенные функции python: какие нужно знать и на какие не стоит тратить время

Бесконечный цикл и оператор break на С#

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

namespace infinite_loop
{
class Program
{
static void Main(string[] args)
{
int i = 0;
for (; ; )
{
i++;
Console.WriteLine(i);
if (i==12345) break;
}
Console.ReadLine();
}
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

namespaceinfinite_loop

{

classProgram

{

staticvoidMain(stringargs)

{

inti=;

for(;;)

{

i++;

Console.WriteLine(i);

if(i==12345)break;

}

Console.ReadLine();

}

}

}

Как вы видите, мы взяли бесконечный цикл for и добавили в него условный оператор if и оператор break (строка 12). Таким образом мы дали команду, что, если переменная i будет равняться 12 345, необходимо будет выполнить выход из цикла, несмотря на то, что цикл может продолжать работу, так как условия выхода в нём не были выполнены.
Если запустить программу. то результат будет следующим:

Больше в консоль ничего не записывалось. После того, как переменная i достигнет своего значения в 12 345, вызывается оператор break, обеспечивающий принудительный выход из цикла.

Таким образом можно контролировать бесконечный цикл и прерывать его в необходимых местах или при достижении необходимых целей.

Скачать исходник

Ниже будут представлены листинги бесконечных циклов на языках C, Java и С++

Оператор цикла for

Следующий и,
наверное, самый часто используемый оператор цикла – это оператор for, который имеет
такой синтаксис:

for <переменная> in <список> :
      операторы 1…N

Например,

for x in 1,5,2,4:
    print(x**2)

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

начальное
значение, шаг, конечное значение

Для этого
используется генератор последовательностей

range(start, stop, step)

Например, если
мы запишем его вот так:

for x in range(1,5,1):
    print(x)

то в консоли
увидим числа от 1 до 4 с шагом 1. То есть, range генерирует
последовательность в интервале

[1;5)

Последнее
значение не входит в интервал. Если в нашем примере поставить шаг отрицательный
-1, то конечное значение 5 не может быть достигнуто и в этом случае Python возвратит пустую
последовательность:

for x in range(1,5,-1):
    print(x)

Если нам нужны
числа от 5 до 1, то следует записывать range в таком виде:

for x in range(5,,-1):
    print(x)

Причем, в range можно записывать
только целые числа, с вещественными он не работает.

Давайте
перепишем нашу программу подсчета суммы

с помощью цикла for, получим:

S=
for i in range(1, 1001, 1):
    S += 1/i
print(S)

Здесь весь цикл
записан буквально в одну строчку, а тело цикла состоит из одного оператора –
подсчета суммы ряда.

Вторым примером
рассмотрим задачу вычисления значений линейной функции

Программа будет
выглядеть так:

k = 0.5; b = 2
lst = , 0.1, 0.2, 0.3, 0.4, 0.5
for x in lst:
    print(x*k+b)

Этот пример
показывает, что для перебора значений счетчика x можно
использовать списки, сформированные ранее в программе. (О списках мы подробнее
будем говорить на последующих занятиях). Здесь же приведем еще один пример:

msg = "Hello World!"
for x in msg:
    print(x)

Он показывает,
что строку можно воспринимать как список и перебирать с помощью цикла for.

Также в цикле for можно
использовать блок else, о котором мы говорили ранее:

for <переменная> in <список> :
      операторы 1…N
else:
      операторы 1…N

Дзен Питона

Если интерпретатору Питона дать команду («импортируй это» здесь видимо следует понимать как «импортируй самого себя»), то выведется так называемый «Дзен Питона», иллюстрирующий идеологию и особенности данного языка. Понимание смысла этих постулатов в приложении к программированию придет тогда, когда вы освоите язык в полной мере и приобретете опыт практического программирования.

  • Beautiful is better than ugly. Красивое лучше уродливого.
  • Explicit is better than implicit. Явное лучше неявного.
  • Simple is better than complex. Простое лучше сложного.
  • Complex is better than complicated. Сложное лучше усложнённого.
  • Flat is better than nested. Плоское лучше вложенного.
  • Sparse is better than dense. Разрежённое лучше плотного.
  • Readability counts. Удобочитаемость важна.
  • Special cases aren’t special enough to break the rules. Частные случаи не настолько существенны, чтобы нарушать правила.
  • Although practicality beats purity. Однако практичность важнее чистоты.
  • Errors should never pass silently. Ошибки никогда не должны замалчиваться.
  • Unless explicitly silenced. За исключением замалчивания, которое задано явно.
  • In the face of ambiguity, refuse the temptation to guess. Перед лицом неоднозначности сопротивляйтесь искушению угадать.
  • There should be one — and preferably only one — obvious way to do it. Должен существовать один — и, желательно, только один — очевидный способ сделать это.
  • Although that way may not be obvious at first unless you’re Dutch. Хотя он может быть с первого взгляда не очевиден, если ты не голландец.
  • Now is better than never. Сейчас лучше, чем никогда.
  • Although never is often better than *right* now. Однако, никогда чаще лучше, чем прямо сейчас.
  • If the implementation is hard to explain, it’s a bad idea. Если реализацию сложно объяснить — это плохая идея.
  • If the implementation is easy to explain, it may be a good idea. Если реализацию легко объяснить — это может быть хорошая идея.
  • Namespaces are one honking great idea — let’s do more of those! Пространства имён — прекрасная идея, давайте делать их больше!

Изменения во встроенном типе dict

Другое важное изменение в версии 3.0 — это удаление методов словаря
,
и. Теперь вместо них можно использовать переработанные методы ,
и
, которые сейчас вместо прежнего списка ключей или значений возвращают легковесные объекты-контейнеры, похожие на множества (sets)

Преимущество здесь состоит в возможности применять к ключам и значениям словаря методы класса
без необходимости их копирования. Например:

>>>d = {1:"dead", 2:"parrot"}
>>>print(d.items())
<built-in method items of dict object at 0xb7c2468c>

Замечание:В Python множества (sets) — это неупорядоченные коллекции уникальных элементов.

Здесь мы создали словарь с двумя парами ключ-значение, а затем распечатали значение, возвращенное методом , которое является объектом, а не списком значений. Мы можем проверить наличие некоторого элемента в этом объекте, как при работе с объектом множества ():

>>>1 in d # проверка наличия элемента
True

Вот пример обхода (итерирования) элементов объекта
:

>>>for values in d.items():
...     print(values) 
...
dead
parrot

Но если вам действительно нужен список значений, вы всегда можете явно привести возвращаемое значение к типу list. Например:

>>>keys = list(d.keys())
>>>print(keys)

Немного о байтах

Теперь для хранения бинарных данных используется новый тип — байтовая константа и новый класс — . Объект этого класса представляет собой неизменяемую последовательность целых чисел или ASCII-символов. В действительности это просто неизменяемая версия класса
из Python версии 2.5. Байтовая константа — это строка с помещенным перед ней символом b , например,
b’byte literal’.В результате вычисления байтовой константы получается новый объект . Объекты типа
также можно создавать с помощью конструктора , который имеет вид:

bytes(])

Например, в коде ниже создается объект bytes:

>>>b = (b'\xc3\x9f\x65\x74\x61')
>>>print(b)
b'\xc3\x83\xc2\x9feta'

Этот код является избыточным, так как объект можно создать простым присваиванием байтовой константы. (Я не рекомендую делать так, как написано, я просто хотел продемонстрировать, что так можно делать.) Если вы хотите использовать кодировку iso-8859-1, можете сделать так:

>>>b = bytes('\xc3\x9f\x65\x74\x61', 'iso-8859-1')
>>>print(b)
b'\xc3\x83\xc2\x9feta'

Если в конструктор передается строка, то также необходимо передать и кодировку. Если же передается байтовая константа — кодировка не нужна, потому что байтовые константы — это не строки. Хотя, как и строки, их можно конкатенировать:

>>>b'hello' b' world'
b'hello world'

Метод используется для представления как бинарных данных, так и закодированного текста. Для конвертации в объект необходимо раскодировать (подробнее об этом дальше). Бинарные данные декодируются с помощью метода . Например:

>>>b'\xc3\x9f\x65\x74\x61'.decode()
'ßeta'

Кроме того, вы можете считывать бинарные данные непосредственно из файла. В коде ниже файловый объект открывается для чтения в бинарном режиме, содержимое файла считывается и выводится на экран:

>>>data = open('dat.txt', 'rb').read() 
>>>print(data) # data - это строка
>>># здесь выводится содержимое файла dat.txt

Логические операторы

Говоря на естественном языке (например, русском) мы обозначаем сравнения словами «равно», «больше», «меньше». В языках программирования используются специальные знаки, подобные тем, которые используются в математике: > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), == (равно), != (не равно).

Не путайте операцию присваивания значения переменной, обозначаемую в языке Python одиночным знаком «равно», и операцию сравнения (два знака «равно»). Присваивание и сравнение – разные операции.

>>> a = 10
>>> b = 5
>>> a + b > 14
True
>>> a < 14 - b
False
>>> a <= b + 5
True
>>> a != b
True
>>> a == b
False
>>> c = a == b
>>> a, b, c
(10, 5, False)

В данном примере выражение состоит из двух подвыражений. Сначала происходит сравнение (==) переменных и . После этого результат логической операции присваивается переменной c. Выражение просто выводит значения переменных на экран.

Ввод данных. Функция input()

За ввод в программу данных с клавиатуры в Python отвечает функция input(). Когда вызывается эта функция, программа останавливает свое выполнение и ждет, когда пользователь введет текст. После этого, когда он нажмет Enter, функция input() заберет введенный текст и передаст его программе, которая уже будет обрабатывать его согласно своим алгоритмам.

Если в интерактивном режиме ввести команду input(), то ничего интересного вы не увидите. Компьютер будет ждать, когда вы что-нибудь введете и нажмете Enter или просто нажмете Enter. Если вы что-то ввели, это сразу же отобразиться на экране:

>>> input()
Yes!
'Yes!'

Функция input() передает введенные данные в программу. Их можно присвоить переменной. В этом случае интерпретатор не выводит строку сразу же:

>>> answer = input()
No, it is not.

В данном случае строка сохраняется в переменной answer, и при желании мы можем вывести ее значение на экран:

>>> answer
'No, it is not.'

При использовании функции print() кавычки в выводе опускаются:

>>> print(answer)
No, it is not.

Куда интересней использовать функцию input() в скриптах – файлах с кодом. Рассмотрим такую программу:

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

Вышеприведенный скрипт далек от совершенства. Откуда пользователю знать, что хочет от него программа? Чтобы не вводить человека в замешательство, для функции input() предусмотрен специальный параметр-приглашение. Это приглашение выводится на экран при вызове input(). Усовершенствованная программа может выглядеть так:

Обратите внимание, что в программу поступает строка. Даже если ввести число, функция input() все равно вернет его строковое представление

Но что делать, если надо получить число? Ответ: использовать функции преобразования типов.

В данном случае с помощью функций int() и float() строковые значения переменных и преобразуются соответственно в целое число и вещественное число. После этого новые численные значения присваиваются тем же переменным.

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

qtyOranges = int(input("Сколько апельсинов? "))
priceOrange = float(input("Цена одного апельсина? "))
 
sumOranges = qtyOranges * priceOrange
 
print("Заплатите", sumOranges, "руб.")

Сначала выполняется функция input(). Она возвращает строку, которую функция int() или float() сразу преобразует в число. Только после этого происходит присваивание переменной, то есть она сразу получает численное значение.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *