python_math_stat/docs/python/defolt_python.md

31 KiB
Raw Blame History

Python

Интерпретированный обьектно-ориентированный ЯП

  • Строго тиризированные данные
  • Динамично типизирован
Имя Тип Описание
integer int Числовой ТД для целых чисел (3, 79, -90)
floating point float Может премещаться по числу (7.8, -0.09)
string str Упорядоченная пос-ть символов (буквы/цифры) - immutable
List list Упорядоченная пос-ть обьектов [] = структура данных
dictionary dict Неупорядоченная пос-ть пар ключей и значений {("ключ": "77", "ключ2": "88",)}
tuple tup Упорядоченная неизмен. пос-ть ("9", "10") - immutable
set set Неупорядоченная коллекция уник. обьектов ("привет", 99), не может менять обьекты внутри
boolean bool True/False

Основные хоткеи

"Ctrl + /" - комментарий

" \ " - перенос кода на след строку, перед знаками внутри строки "I \ 'm"

\n - перенос фразы на след. строку

\t - заменяет пробел в строке

""" _ """ - игнорируют любые символы внутри

  • из списка подряд цифры через пробел
L = [1, 2, 3, 4, 5]
print(*L)

Строки в Python

Свойства и методы строк

Св-ва: \

  1. Immutable - неизменяемые. Если созд. строку, то через терм не можем менять
a1 = 'ABcd' 
print (1[1]) -> b
a1[1] = 2 -> (FAIL)
  1. Concate - можем скреплять строки
  2. Muttyplication - усножение
yummy = 'yum'
print(yummy*2) -> yumyum

Методы:
yummy.upper() - делает все буквы заглавные (НОВАЯ строка)
yummy.lower() - наоборот (НОВАЯ строка)

Форматирование строк

name = 'Jack'
age = 23
name_and_age = 'My name is {0}. I\'m {1} years old'.format(name,age)' #можно сразу переменные без цифр

-> Можно {} в разном порядке, можно без цифр сразу переменные писать \

Таблица

print ('''{}{}{}
{}{}{}
{}{}{}'''.format(ввести числа в кол-ве {}))

-> {0:1.3f} 3f - кол-во знаков после запятой в float, {0:10.3f} 10 - будет пробел - подставить вместо {} в таблице

Boolean

| True | False |

  • comparison operators
  • равентсво n==n -> True
  • 'Hello' == 'hello' -> False (H != h)
  • n > m / n < m
  • n >= m / n <= m
  • x=x+n = x+=n
  • ASCII code
print(ord('a')) -> 97
print(ord('b')) -> 98
print(ord('a' > 'b')) -> Falseа
print('hi'>'hello') -> True # Отличие в первых отличающихся знаках ('i'= 105 'e'= 101)
  • Программа вывода True, если ввести 18 и более лет
age = int(input('input your age'))
print('Your age is' + str(age))
print('Access is permitted' + str(age >= 18)) -> True
name = input(('input your name'))
age = int(input('input your age'))
is_married = False
if age > 18 and is_married == False:
print('Hi {}! You are {}'.format(name,age)) 

Bollean операции с помощью print()


  • строки
print ('a' in "Jack") -> True  # такая буква есть в слове, по сути не вводим переменные и списки/листы
  • списки
list = ['a','b','c']
    print ('a' in list) -> True  # такая буква есть в спискe
  • словари
dict = {1:'a', 2: 'b', 3:'c'}
    print (1 in dict) -> True  # есть такой ключ
    print (1 in dict.keys()) -> True  # есть такой ключ
    print (4 in dict.keys()) -> False   # такого ключа нет 
    print ('c' in dict.values()) -> True  # есть такое значение

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


  • and \ or \ not
x = 1
y = 2
x>1 and y>1 -> False
x>1 or y>1 -> True
not x>1 -> True

Условный оператор if, elif, else


  • Пример:
x = 3 
if x>3:
    print('x>3')
elif x<3:
    print('x<3')
else:
    print('x == 3') -> x==3
  • Четное / Нечетное
x = 45
if x%2 == 0:
    print('x is even') # четное 
else:
    print('x is odd') # нечетное 
  • Особенности работы if
False True
if 0: if n: #n!=0
if ' ': if 'ab':
if None:
if[] : if [1,2] :

Цикл for

  • Посл-ти: строки, списки, словари, мн-ва и др. - для перебора используется цикл
list = [1,2,3,4,5]
for number(любое значение) in list:
    print(number) -> 1
                     2
                     3
                     4
                     5
    print('Hi') #выдаст столько раз сколько эл-тов в списке
  • Для подсчета суммы значений в списке
sum = 0
for num in list:
    sum = sum + num
print (sum) -> 10
  • цикл for для tuple
tuple = [('a','b'),('c','d'),('e','f')]
for item im tuple:
    print (item) -> ('a','b')
                    ('c','d')
                    ('e','f')
for let1, let2 in tuple:
    print(let1, let2) -> ab
                         cd
                         ef
for let1, let2 in tuple:
    print(let1) # первые буквы каждого tuple эл-та
    print(let2) -> a
                   c
                   e
                   b
                   d
                   f            
  • цикл for для dictionaries
    .items() - и ключ и значения
for items in dict.items():
    print(item) -> ('key1','value1')
                   ('key2','value2')

.keys() - только ключи

dict = {'key1':'value1','key2':'value2'}
for item in dict.keys():
    print(key) -> key1
                  key2 

.values() - только значения

dict = {'key1':'value1','key2':'value2'}
for item in dict.values():
    print(values) -> value1
                     value2 

Цикл while

Выполняется до тех пор, пока какое-то условие не станет True

x = 5
while x>=1:
    print(x)
    x = x-1 -> 5 # 5>= 1 ... print()
               4 # 4>= 1 ... print()
               3 # 3>= 1 ... print()
               2 # 2>= 1 ... print()
               1 # 1>= 1 ... print()
                 # 0>= 1 .False. break

Операторы pass,break,continue

pass - (ничего не делать)

list = [1,2,3]
for i on list:
    pass     # ничего не делать
  • break - если True - выход из цикла
list = [1,2,3]
for i on list:
    if i ==2:
        break  # если True - выход из цикла
    print(i) -> 1 

continue - если True - переход в начало цикла

list = [1,2,3]
for i on list:
    if i ==2:
        continue  # если True - переход в начало цикла 
    print(i) -> 1 # пропустили эл-т 2
                3

Range()

Функция range() - часто используется для повторения опр. действий несколько раз

for x in range(n): # n не включено
    print(n) -> 0
                1
                2 # n не включено
  • диапазон range(k,n)
for x in range(k,n): # n не включено
    print(n) -> k
                k+1
                k+2
                ... # n не включено
  • диапазон range(k,n) + шаги range(k,n,l)
for x in range(k,n,l):  # n не включено 3,11,2
    print(n) -> k       # 3
                k+l     # 3+2 = 5
                (k+l)+l # 5+2 = 7
                ...     # n не включено, 9 stop
  • для перебора цифр и заключение их в список (генератор списка [for])
list = [num for num in range(0,10)] # первый num можно опустить
print (list) -> [0,1,2,3...9] # 10 не вкл
  • для операций типа степеней\корней и пр.
list = [num**2 for num in range(0,10)] 
print (list) -> [0,1,4,9...81] # 10 не вкл
list = [(num-3/2)**2 for num in range(0,10)] 

Индексы

len() - длина строки

[а:с] - а(вкл), с(не вкл)
[:] - от начала до конца
[а:] - от начала до конца
[::с] - от начала до конца с шагом 2 Пример : Hello - H (e) l (l) o = Hlo
[1::2] - Hello - eo [::-1] - наоборот слово

Различные операции с индексами

  • указать индекс каждого эл-та в списке/строке
index = 0
my_str = 'agdjfh'
for letters in my_str:
    print (letter + 'is at index' + str(index))
    index += 1
  • enumerate() указать индекс каждого эл-та в списке/строке
index = 0
my_str = 'agdjfh'
for letters in enumerate(my_str):
    print (letter) -> (0, 'a')
                      (1, 'g')
                      ...

  • (распаковка) enumerate()
index = 0
my_str = 'agdjfh'
for index, letters in enumerate(my_str):
    print (letter + 'is at index' + str(index)) 

Добавление библиотек

  • Добавление предустановленных библиотек
import pandas as pd
  • Пример использования
from random import shuffle
list = [1,3,56,4]
print(shuffle(list)) -> [4,3,56,1] # Рандомно перемешивает
from random import randint
randint (1,10) -> 6 # Выбирает любое число по диапазону (1,10)

List Comprehension

Создание списка из посл-тей

  • разделяем слово на буквы и помещаем в список ['','']

    • способ №1
      str = 'Hello'
      list = []
      for i in str:
          list.append(letter) # добавляет эл-т в конец списка (в данном случае добавляем с 1 эл-та)
      print(list) -> ['h','e','l',,...]
    
    • способ №2
    str = 'Hello'
    list = []
    list = [for i in str]
    print (list) -> ['h','e','l',,...]
    
    • для перебора цифр и заключение их в список
    list = [num for num in range(0,10)] # первый num можно опустить
    print (list) -> [0,1,2,3...9] # 10 не вкл
    
    • для операций типа степеней\корней и пр.
    list = [num**2 for num in range(0,10)] 
    print (list) -> [0,1,4,9...81] # 10 не вкл
    list = [(num-3/2)**2 for num in range(0,10)] 
    
    • if в операции с for...in
    list = [6,43,-2,11,-55,-12,3,345]
    new_list = [num for num in list if num > 0] 
    # первый "num" - помещаем в список, можно добавлять к нему условия типа "num **3/2"
    # второй "num" - из последовательностей list 
    # "if"  в конце, т.к нет других операторов
    # "num > 0" - только положительные числа 
    print (new_list) -> [6,43,11,3,345] 
    
    • if...else в операции с for...in
    list = ['+' if number > 0 else '-' for number in number_list]
    

    Функции

    • код, кот. вып. фун-цию и назван именем ВИД: set()

    Виды:

    • без возращаемого значения (без return, справочное)
    • без параметров (def():)
    • произвольные число параметров (def min(*a))
    def min(*a):
        m=a[0]
        for x in a:
            if m>x:
                m=x
        return m
    
    • параметры со значениями по умолчанию (print(a,end=''))
    • пример функции, которая показывает сколько эл-тов между числами
    def my_range(start,stop,step=1): # Знак равно - это необязательный пункт, тут шаг необязательно вводить
        res=[]
        if step >0:
            x= start
            while x<stop:
                res+=[x]
                x+=step
        elif step <0:
            x=start
            while x>stop:
                res+=[x]
                x+=step
        return res
    

    Различные функции и методы


    • min() | max()
    print (min(1,2,3,4)) -> 1
    
    • min() | max() работают также с листами по аскикоду
    print(max('Hello')) -> o # по аскикоду о = 111
    

    • метод .reverse() и ф-я reversed() - нужны чтобы сделать обратный порядок эл-тов [::-1]
    list = [1,2,3,4,5]
    print (list.reverse()) -> [5,4,3,2,1]
    

    метод .reverse()

    • не возвращает новый списокб изменяет существующий
    • применяется только к изменяемым посл-тям

    ф-я reversed()

    • применяется ко всем посл-тям (строки, списки, кортежи(tuple) и диапазоны(range))
    • возвращает обратный итератор, а не изменяет, т.е. чтобы вывести нужно сконвертировать в нужный тип
    # список
    my_list = [1, 2, 3, 4, 5]
    reversed_list = list(reversed(my_list))
    print(reversed_list)  -> [5, 4, 3, 2, 1]
    # кортеж
    my_tuple = (1, 2, 3, 4, 5)
    reversed_tuple = tuple(reversed(my_tuple))
    print(reversed_tuple)  -> (5, 4, 3, 2, 1)
    # строка
    my_string = "Hello, world!"
    reversed_string = ''.join(reversed(my_string))
    print(reversed_string) -> !dlrow ,olleH
    

    • Удаление эл-тов из списка del, .pop(), .remove()

    del + list [index]

    users = ['Ваня', 'Коля', 'Маша']
    del users [0] # удаляем ваню
    print (users) -> ['Коля', 'Маша']
    

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

    • также можно удалять по индексу .pop(index)

    метод .remove() - удаление по значению (только первое которое нашел, чтобы удалить все - исп цикл)

    • не возвращает
    users = ['Иванов', 'Сидоров', 'Петров', 'Иванов']
    users.remove('Петров')
    

    • Функция strip() - для возврата копии исходной строки путем удаления начальных и конечных пробелов, символов (в качестве аргументов), переданных в функцию strip(). strip( 'characters' )
      • если не ставить параметр chars , то удалит начальные и конечные пробелы из строки
      • если поставить, то удалит выбранные символы
      • возвращает копию исходной строки
    strinput = "  $$$$$  No. 1 Welcome to JAVATPOINT!! No. 1 $$$ "    
    # use strip() function to remove the set of characters 
    res = strinput.strip ( ' $No. 10 !' ) # store result into res variable 
    print ( " Given string is: ", strinput) 
    print ( " After removing the set of characters: ", res) 
    
    ИЛИ символы
    
    str5 = '++++++Python Programming Tutorial****** $$$$$' 
    print ("n Given string is = ", str5) 
    # use strip function to remove the symbols from both ends 
    str6 = str5. strip ( ' $*+' ) 
    print (" Stripping the '+', '*' and '$' symbols on both sides of the string is = ", str6) 
    

    Создание функций

    Синтаксис : def название фунц(аргументы)

    • можно использовать рез-т функции в этой же функции:
    m = min2(42,30) # функция минимума 2 чисел
    m = min2(min2(42,30),25)
    
    def print_greeting():
        ''' # доксрин
        print 'Hello' text 
        :return: None
        '''
        print ('Hello')
    print_greeting() -> Hello 
    
    • help
    help(print_greeting) # вызов докскрина
    
    • функция с параметрами
    def print_greeting_with_name(name): # чтобы вызвать без параметра, можно просто написать имя 'Jack' , но тогда и вывод с принтом будет выглядеть иначе
        '''
        :param name
        :return: None
        '''
        print ('Hello' + name + '!')
    print (greeting ... ('Jack')) -> Hello Jack!
    
    def f(n):
        return n * 10 + 5
        print(f(f(f(10)))) -> 10555
        # f(10) -> 100+5=105
        #f(105) -> 1055
        #f(1055) -> 10555
    

    Возвращенная функция

    • сумма двух чисел
    def sum_two_num (a,b):
        return a+b
    x = sum_two_num (1,1)
    print (x) -> 2
    
    • Поиск слова в тексте
    def is_hello_in_text (text):
        if 'hello' in text.lower():
            return True
        else: 
            return False
    print (is_hello_in_text('Say hello'))
    
    ИЛИ
    
    def is_hello_in_text('Say hello'):
        return 'hello' in text lower()
    print (is_hello_in_text ('Hello everyone!'))
    
    • Поиск (сочетания) букв в тексте
    def is_string_in_text (string, text):
        return string in text
    print (is_string_in_text('he','The apple')) -> True 
    
    def greeting_depends_on_gender(name, gender):
        if gender == 'male':
            print ('Hello '+ name + '! You are look great!')
            return gender # return пишем в конце цикла, после него ничего в текущ. цикле не ставим
        elif gender == 'female':
            print ('Hello ' + name + '! You are so nice!')
            return gender
        else:
            print ('Hello ' + name + "! I've never see the creture like you!")
    return_value = greeting_depends_on_gender ('Jack', 'male')
    

    Локальные переменные внутри функции

    • параметры внутри функции локальные, мы не можем пользоваться ими вне функции
    • изменение значений, например, списка
    def append_zero(xs):
        xs.append(0)
        # xs= [100]- новый список, поэтому не повлияет на a
    a =[]
    append_zero(a)
    print(a) -> [0]
    
    • также мы можем изменять данные из глобального списка внутри локального:
    l= [1, 3, 4, 5]  # глобальная переменная l с сущ. списком
    def modify_list(l):
        for i in range(len(l))[::-1]:  # делаем в обратном порядке, чтобы избежать ошибки IndexError: list index out of range, которая практически запрограммирована при удалении элементов из списка во время итерирования по нему.
        # после удаления элемента длина списка уменьшается а кортеж созданный range по длине списка остается неизменным и когда i принимает значение больше чем оставшаяся длина вашего списка то и вылетает ошибка IndexError: list index out of range.
        # for i in reversed(range(len(l))): --> есть еще такой вариант с функцией `reversed()`
            if l[i] %2 !=0:            # если i нечетное ,то
                l.remove(l[i])         # удаляем его из списка l 
            else:
                l[i] = l[i]//2         # иначе оно четное , значит делим его на 2
    modify_list(l)             # выдаст None, т.к. задачей было не возвращать никаких значений
    print(l)                   # выдаст - > [2] , т.е. изменили глобальную переменную l
    
    ИЛИ
    
    l = [1,2,3,4]
    def modify_list(l):
        l[:] = [i//2 for i in l if not i % 2] # генератор списка с условием (есть в конспекте)
        # not здесь говорит, что остатка НЕ будет. Т.е при деление на 2, число без остатка, добавляют в копию списка
        # L[:] - срез списка от начала до конца , если без [:], то глоб. L будет ссылаться на новый обьект, при этом исчезнут старые значения
    modify_list(l)  # выдаст None, т.к. задачей было не возвращать никаких значений
    print(l)        # выдаст - > [1,2] , т.е. изменили глобальную переменную l
    

    Глобальные переменные

    • переменные, которые обьявлены все всяких функций
    def print_value():
        print(a) # не обьявлена внутри функции, т.е нет a= 5
    a = 5
    print_value() -> 5
    
    def print_value():
        print
    

    Методы build-in method

    ВИД: x.append()

    *Args, **kwargs

    Позиционные (positional) и именованные (keyword) аргументы

    • Здесь каждый параметр относится к каждому аргументу
    def printThese(a,b,c): # это параметры
        print(a, "is stored in a")
        print(b, "is stored in b")
        print(c, "is stored in c")
    printThese(1,2,3) # это аргументы
    # для вывода нужно записать все аргументы, иначе eror, но если задать в параметрах c=None, то можно не писать аргумент, параметр становится опциональным
    """
    1 is stored in a
    2 is stored in b
    3 is stored in c
    """
    
    • Опциональные параметры можно использовать для назначения аргументов
    def printThese(a=None,b=None,c=None):
        print(a, "is stored in a")
        print(b, "is stored in b")
        print(c, "is stored in c")
    printThese(c=3, a=1) # Порядок можно ставить как угодно, но вывод все равно последовательный
    """
    1 is stored in a
    None is stored in b      #Ничего не указали, поэтому None
    3 is stored in c
    """
    
    def func_kwargs(**kwargs):
        print(kwargs)
    func_kwargs(first=1,second=2,third=3) -> {'first':1,'second':2,'third':3}
    

    Оператор '*'

    Этот оператор позволяет «распаковывать» объекты, внутри которых хранятся некие элементы. Пример:

    a = [1,2,3]
    b = [*a,4,5,6]
    print(b) -> [1,2,3,4,5,6]
    

    Использование *args, **kwargs

    • *args — это сокращение от «arguments» (аргументы),
    • **kwargs — сокращение от «keyword arguments» (именованные аргументы)

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

    • Например — функция, которая умеет выводить результаты, набранные учеником в тесте:
def printScores(student, *scores): 
   print(f"Student Name: {student}")
   for score in scores:
      print(score)
printScores("Jonathan",100, 95, 88, 92, 99) # 'student'- аргумент, 'scores' - именной аргумент
"""
Student Name: Jonathan
100
95
88
92
99
"""
  • Для **kwargs аргументов создается словарь, в котором содержатся именованные аргументы
def printPetNames(owner, **pets):
   print(f"Owner Name: {owner}")
   for pet,name in pets.items():
      print(f"{pet}: {name}")
printPetNames("Jonathan", dog="Brock", fish=["Larry", "Curly", "Moe"], turtle="Shelldon")
"""
Owner Name: Jonathan
dog: Brock
fish: ['Larry', 'Curly', 'Moe']
turtle: Shelldon
"""
  • Конструкцию **kwargs нельзя располагать до *args. Если это сделать — будет выдано сообщение об ошибке.
  • *x в списке формальных аргументов — обозначает, что принимается произвольное число аргументов, которые в теле процедуры будут доступны в кортеже под именем x. (slurp)
  • *x в вызове процедуры — обозначает, что коллекция x распаковывается подставляется как отдельные аргументы. (splat) Пример:
first, *rest = 1, 2, 3, 4
print(rest)  
# [2, 3, 4]

ИЛИ списки

first, *rest = [1, 2, 3, 4] 
print(rest)  
# [2, 3, 4]
  • Нахождение 10 проуентов от произведения параметров обычным образом
def ten_perc(x,y)
    return (x*y) * 0,1 # 10 процентов от произведения x и y
ten_perc(10,20) -> 20.0
def ten_perc(*args):
    print(args)
ten_percent (10,20,7,2) -> (10,20,7,2) # tuple
def ten_perc (*args):
    product=1
    for num in args:
        product=product*num
    return product*(0.1)
print(ten_perc(10,20))
  • использование {} .format c kwargs
def hello_kwargs(**kwargs):
    if name is kwargs:
        print('Hello! Nice to meet you, {}'.format(kwargs['name'])) # ключ 'name' должен быть str
    else:
        print('Hello! What is your name?')
hello_kwargs (gender = male, age = 24, name ='Jack') -> Hello! Nice to meet you, Jack 
def hello_kwargs(greeting,**kwargs):
    if 'name' in kwargs:
        print('{}! Nice to meet you, {}'.format(greeting, kwargs,['name'])) # на первом месте позиционный пар-р (greeting)
    else:
        print ('{}! What is your name?'.format(greeting))
hello_kwargs('Hi', gender = 'male', name = 'Jack')
def func_args_kwargs (*args,**kwargs):
    print(args)
    print(kwargs)
func_args_kwargs('one','two', drink = 'coffee', food = 'sandwich')
print ('i would like to {}{}'.format(args[0],kwargs['food'])) -> I would like one sandwich 

Лямбда выр.функции

  • функция без имени, которая вызывается 1 раз
  • map - обьекты записываются как mapobject exm: 0x105ba3610
def sum_of_two_num(x):
    return x + x
num_list = [1,2,3,4,5,6,7]
result = map(sum_of_two_num, num_list) # sum...- функция, num... - посл-ть
print (result) ->  mapobject at 0x105ba3610
  • чтобы распаковать объекты map:
for item in result:
    print(item) -> 2 (1+1)
                   4 (2+2)
                   6 (3+3)
                   ...
                   14 (7+7)
def cube(num):
    return num **3
num_list = [1,2,3,4,5,6,7]
print (list(map(cube(num_list)))) -> [1,8,27,64,125,216,343]
  • вариант решения задачи с modify_list, но с lambda
def modify_list(l):
    l[:] = [x // 2 for x in filter(lambda x: x & 1, l)]

l = [10, 5, 8, 3]
print(l)
modify_list(l)
print(l) # [2, 1]

Конвертация одних типов в другие

СПИСОК --->> СТРОКА

  • распаковка списка с помощью *list:
num = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(*num) -> 0 1 2 3 4 5 6 7 8 9 10
  • список строк -> .join()
my_list = ["....ru", "-", "хороший", "сайт"]
print(" ".join(my_list)) # " " - пустое место- это разделитель дря строк 
->  ....ru - хороший сайт
  • для списка чисел подойдет .map() для приведения всех цифр к строке и склеить их .join()
my_list2 = [66, 77, 88, 99]
print(" ".join(map(str, my_list2))) -> 66 77 88 99
  • чтобы делить с запятой shortcut кода
my_list3 = [11, 22, 33, 44, 55]
print(str(my_list3).strip('[]')) # подробнее о .strip() в разделе функций
-> 11, 22, 33, 44, 55

строку в список

a = input().split(" ")
a = list(a)

ИЛИ
list(string)

ИЛИ 
string.split()