Встроенные функции

Язык Python включает много уже определенных, т. е. встроенных в него, функций. Программист не видит их определений, они скрыты где-то в "недрах" языка. Достаточно знать, что эти функции принимают и что возвращают, то есть их интерфейс.

Ряд встроенных функций, касающихся ввода-вывода и типов данных, мы уже использовали. Это print(), input(), int(), float(), str(), bool(), type(). Перечень всех встроенных в Python функций можно найти в официальной документации по языку: https://docs.python.org/3/library/functions.html . В переводе на русский можно посмотреть здесь: https://pythoner.name/documentation/library/functions .

В этом уроке рассмотрим следующие встроенные функции, условно разбив их на группы:

  • функции для работы с символами – ord(), chr(), len()

  • математические функции – abs(), round(), divmod(), pow(), max(), min(), sum()

Функция ord() позволяет получить номер символа по таблице Unicode. Соответственно, принимает она в качестве аргумента одиночный символ, заключенный в кавычки:

>>> ord('z')
122
>>> ord('ф')
1092
>>> ord('@')
64

Функция chr() выполняет обратное действие. Она позволяет получить символ по его номеру:

>>> chr(87)
'W'
>>> chr(1049)
'Й'
>>> chr(10045)
'✽'

Чтобы не путать ord() и chr(), помните, что функция – это действие. Ее имя как бы отвечает на вопрос "Что сделать?". Order – это порядок. Значит, мы хотим получить порядковый номер элемента в ряду. А чтобы получить номер, должны передать символ. Character – это символ. Значит, мы хотим получить символ. Поэтому должны передать порядковый номер.

Функция len() в качестве аргумента принимает объект, который состоит из более простых объектов, количество которых она подсчитывает. Числа – это простые объекты, их нельзя передавать в len(). Строки можно:

>>> len('abc')
3
>>> s1 = '------'
>>> s2 = '_______'
>>> len(s1) > len(s2)
False
>>> len(s1)
6
>>> len(s2)
7

Кроме строк в len() можно передавать другие, еще не изученные нами, структуры данных.

Функция abs() возвращает абсолютное значение числа:

>>> abs(-2.2)
2.2
>>> abs(9)
9

Если требуется округлить вещественное число до определенного знака после запятой, то следует воспользоваться функцией round():

>>> a = 10/3
>>> a
3.3333333333333335
>>> round(a,2)
3.33
>>> round(a)
3

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

>>> round(5321, -1)
5320
>>> round(5321, -3)
5000
>>> round(5321, -4)
10000

Функция именно округляет согласно правилу округления из математики, а не отбрасывает. Поэтому 5 тысяч неожиданно округляются до десяти.

>>> round(3.76, 1)
3.8
>>> round(3.72, 1)
3.7
>>> round(3.72)
4
>>> round(3.22)
3

Если нужно просто избавиться от дробной части без округления, следует воспользоваться функцией int():

>>> int(3.78)
3

Нередко функцию round() используют совместно с функцией print(), избегая форматирования вывода:

>>> a = 3.45673
>>> print("Number: %.2f" % a)
Number: 3.46
>>> print("Number:", round(a,2))
Number: 3.46

В последнем случае код выглядит более ясным.

Функция divmod() выполняет одновременно деление нацело и нахождение остатка от деления:

>>> divmod(10, 3)
(3, 1)
>>> divmod(20, 7)
(2, 6)

Возвращает она кортеж, извлечение данных из которого мы пока не изучали. В других языках нередко встречаются две отдельные функции: div() и mod(). Первая делит нацело, вторая находит остаток от целочисленного деления (деления по модулю). В Python и многих других языках для этого используются специальные символы-операнды:

>>> 10 // 3 
3
>>> 10 % 3
1

Функция pow() возводит в степень. Первое число – основание, второе – показатель:

>>> pow(3, 2)
9
>>> pow(2, 4)
16

То же самое можно проделать так:

>>> 3**2
9
>>> 2**4
16

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

>>> pow(2, 4, 4)
0
>>> 2**4 % 4
0

Преимуществом первого способа является его более быстрое выполнение.

Функции max(), min() и sum() находят соответственно максимальный, минимальный элемент и сумму элементов аргумента:

>>> max(10, 12, 3)
12
>>> min(10, 12, 3, 9)
3
>>> a = (10, 12, 3, 10)
>>> sum(a)
35

В sum() нельзя передать перечень элементов, должна быть структура данных, например, кортеж. В min() и max() также чаще передают один так называемый итерируемый объект:

>>> max(a)
12

Практическая работа

  1. Напишите программу, которая циклично запрашивает у пользователя номера символов по таблице Unicode и выводит соответствующие им символы. Завершает работу при вводе нуля.

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

  3. Напишите программу, которая запрашивает у пользователя шесть вещественных чисел. На экран выводит минимальное и максимальное из них, округленные до двух знаков после запятой. Выполните задание без использования встроенных функций min() и max().

Примеры решения в android-приложении и pdf-версии курса.

Создано

Обновлено

Комментарии

Подскажите, 3 задачку нужно решить исходя из информации которая была прочитана в предыдущих уроках + этот, или можно использовать цикл for ?

Ответ на от plustilino

Я решил её без циклов, причем сначала одну функцию написал развёрнуто, а другую уже придумал как сократить, вот код
a = float(input("Введите вещественное число №1"))
b = float(input("Введите вещественное число №2"))
c = float(input("Введите вещественное число №3"))
d = float(input("Введите вещественное число №4"))
e = float(input("Введите вещественное число №5"))
f = float(input("Введите вещественное число №6"))
 
def maximum(a,b,c,d,e,f):
    def func(n):
        if n >= a and n >= b and n >= c and n >= d and n >= e and n >= f:
            return True
        else:
            return False
    if func(a) == True:
        return a
    elif func(b) == True:
        return b
    elif func(c) == True:
        return c
    elif func(d) == True:
        return d
    elif func(e) == True:
        return e
    else:
        return f
 
 
def minimum(a,b,c,d,e,f):
    if a <= a and a <= b and a <= c and a <= d and a <= e and a <= f:
        return a
    elif b <= a and b <= b and b <= c and b <= d and b <= e and b <= f:
        return b
    elif c <= a and c <= b and c <= c and c <= d and c <= e and c <= f:
        return c
    elif d <= a and d <= b and d <= c and d <= d and d <= e and d <= f:
        return d
    elif e <= a and e <= b and e <= c and e <= d and e <= e and e <= f:
        return e
    elif f <= a and f <= b and f <= c and f <= d and f <= e and f <= f:
        return f
 
print("Минимальное значение = %d , Максимальное значение = %d " % (minimum(a,b,c,d,e,f) , maximum(a,b,c,d,e,f)))
Но как тут можно использовать ИМЕННО while, конкретно как по очереди подставлять переданные значения переменных?

while 1:
    c = int(input("Please, enter digit: "))
    if c==0: break
    print(chr(c))

выполняла практическую работу (3) в упрощенном варианте из 3 вводимых цифр. Однако упрямый питон выводит 0. Синтаксических ошибок нет. Может я не так поняла логику написанной программы...
def req(r):
    r = float(input('Enter a num:'))
    return r
a = req(1)
b = req(2)
c = req(3)
l = [a, b, c]
p = 0
for i in range(0, 1 - len(l)):
    if l[i] > p:
        p = l[i]
print(p)

Ответ на от agement

Проблема в выражении 1-len(l), которое становится равно -2. Если требуется перебрать элементы списка через их индексы, то надо использовать range(len(l)).

Во вторых в функцию req() нет смысла передавать аргумент. 

Задача номер 2:
n = str (input ("Введите строку: "))
if (len(n) > 10):
    print ("Предупреждение!")
elif (len(n) == 10):
    print ("Всё хорошо!")
else:
    a = 10 - len(n)
    print (n + '*' * a)