Рубрики
python Конспект

Конспект: Python

0. Установка

https://www.python.org/
https://www.python.org/ftp/python/3.8.2/python-3.8.2.exe
https://www.youtube.com/watch?v=gJfYu1R8TL8&list=PLg5SS_4L6LYtHCActBzbuGVYlWpLYqXC6&index=1 - video по python от avd-it
При установки на windows обязательно установить галку add python PATH, для избежания проблем с запуском скриптов на python
Для проверки работы python откройте cmd и введите python.

https://github.com/b14esh/python

1. Начало работы c python

Стандартная программа для языков программирования Hello World
>>> print("hello world")
hello world

Калькулятор
>>> 3+5
8
>>> 3-2
1
>>> 3*50
150
>>> 44/2
22.0
>>> 200*76754
15350800
>>> (2+2)*4-100
-84


exit()

2. Запуск скриптов python

python name_script.py

3. PyCharm — IDE(среда разработки) для python

https://www.jetbrains.com/ru-ru/pycharm/download/#section=windows

4. Переменные

a = "Hello"
b = 25

print(a)
print(b)

f_name = "Vasiliy"
l_name = "Pupkin"
age = 25
full_name = (f_name + " " + l_name)

print(f_name + " " + l_name)

print(full_name + " " + str(age))

f_name = "Vas"
F_NAME = "VAS"

print(f_name + " \= " + F_NAME)

num1 = 1111111111111111
num2 = 2222222222222222
num3 = num1 + num2
print(num1+num2)
print("num3" + " == " + str(num3))

5. Стринг \ string \ строки

mystring = "BLA BLA BLA"
name = "mr vAsya Pupkin"

print(name.title())
print(name.upper())
print(name.lower())
print("----------------------------------------------")
print("Privet stroka nomer 1 \nProivet stroka nomer 2 \nprivet stroka nomer 3 ")
print("\n")
print("messages:\n\tMessage1\n\tmessage2\n\tmessgag2\nEnd")
print("lower name:" + name.lower())
print("----------------------------------------------")

a = "    sd ... dadya Vasya .. dsd     "
b = "... dadya Vasya ...."
print(a)
print(a.rstrip())
print(a.lstrip())
print(a.strip())
print("----------------------------------------------")
print(b.strip("."))

print("----------------------------------------------")
a = "... dadya Vasya ...."
print(a)
a = a.strip(".")
a = a.strip()
print(a.title())

6. Числа \ Номера \ numbers

num1 = 30
num2 = 45
num3 = num1 + 10

print(num1 + num2)
print(num3)

x1 = 55555555555555555555555555555555555666666666666
x2 = 969687685764454545454446546446546546546546565465

print(x1+x2)
print(x1*x2+10)
print(num2/3)

x1 = 6
x2 = 4

print(x1 / x2)


print(10*2/5+100)
print(10+2/(5*100))

7. Циклы \ loop

print("******")
print("******")
print("******")
print("******")
print("******")
print("******")

print("------------------------------------")

for x in range(0, 100):
    print("******")
    print("x1x1x1")

print("------------------------------------")

for x in range(0, 100 + 1):
    print(x)

print("------------------------------------")

for x in range(10, 100, 2):
    print(x)

print("------------------------------------")

for x in range(0, 100, 10):
    print(x)

print("------------------------------------")

for x in range(-100, 10, 10):
    print(x)

print("------------------------------------")

for x in range(-100, 100, 20):
    print("Number x =" + str(x))

print("------------------------------------")
for x in range(-50, 100, 10):
    print("Number x =" + str(x))
    if x == 50:
        break

print("------------------------------------")
for x in range(0, 10, 2):
    print("Echo X=" + str(x))

print("------------------------------------")
for x in range(100, 200, 50):
    print("echo number x=" + str(x))
    if x == 100:
        break
print("------------------------------------")

for x in range(-10, 10, 3):
    print("echo x=" + str(x))

print("------------------------------------")

x = 9
while True:
    print(x)
    x = x + 1
    if x == 10:
        break

print("------------------------------------")

y = 0
while True:
    print("echo y=" + str(y))
    y = y + 1
    if y == 100:
        break

print("------------------------------------")

x = 0
while True:
    print("Echo x = " + str(x))
    x = x + 1
    if x == 2:
        break
        
print("------------------------------------")

for x in range (5,100,5):
    print("Echo x=" + str(x))
    if x == 15:
        break

7.1 Циклы \ loop — основные for и while


for x in range (0,10,1):
    print("Echo x=" + str(x))
    

x = 0
while True:
    print("Echo x = " + str(x))
    x = x + 1
    if x == 10:
        break
 

8. Массивы \ list \ часть 1

cities = ['New York', 'Mosckow', 'new dehli', 'Simferopol', 'Toronto'] - массив
print(cities) - напечатать массив
print(len(cities))
print(cities[0])
print(cities[4])
print(cities[-1])
print(cities[-2])
print(cities[2].title()) - напечатать массив,  заглавная буква
print(cities[2].upper()) - напечатать массив,  все буквы большие

cities[2] = 'Tula' - изменить третье значение в массиве на Tula
print(cities)

cities.append('Kursk') - добавить в массив в конец
print(cities)

cities.append('Yalta')  - добавить в массив в конец
print(cities)

cities.insert(0, 'Zorcia') - вставить в начало массива
print(cities)

cities.insert(2, 'Feadosya') - вставить в массив
print(cities)

del cities[-1] - удалить последнее значение из массива
print(cities) 

del cities[-2] - удалить последнее значение из массива
print(cities) 

cities.remove('Tula') - удалить из массива Tula
print(cities)

deleted_city = cities.pop() - удалить последнее значение из массива
print("Delieted city is: "  + deleted_city)
print(cities)

cities.sort() - от сортировать массив
print(cities)

cities.sort(reverse=True) - от сортировать массив наоборот
print(cities)

cities.reverse() - от сортировать массив наоборот
print(cities)

                                                                                                                                                                                                                          

9. Массивы \ list \ часть 2

#         0      1     2         3      4
cars = ['bmw', 'vw', 'seat', 'skoda', 'lada' ]

for x in cars:
    print(x.upper())

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

my_number_list = list(range(0, 10))
print(my_number_list)

for x in my_number_list:
    x = x * 2
    print(x)

my_number_list.sort(reverse=True)
print(my_number_list)
print(max(my_number_list))
print("Max number is: " + str(max(my_number_list)))
print("Min number is: " + str(min(my_number_list)))
print("Sum of lis: " + str(sum(my_number_list)))

#         0      1     2         3      4
cars = ['bmw', 'vw', 'seat', 'skoda', 'lada' ]

mycars = cars[1:4]
print(mycars)
mycars = cars[:4]
print(mycars)
mycars = cars[-3:]
print(mycars)
mycars = cars[-3:-1]
print(mycars)

#         0      1     2         3      4
cars = ['bmw', 'vw', 'seat', 'skoda', 'lada' ]
# mycars = cars  - не правильно, соединение...
mycars = cars[:] # правильное - копирование массива

                                                                                                                                                                                                                          

10. Условия, if, elif, else

print("---------------------------------------")
x = 25
if x == 25:
    print("YES you right")
else:
    print("No you are wrong")
print("---------------------------------------")
age = 20
if  (age <= 4):
    print(("You are baby, you age:  ") + str(age))
elif  (age >4) and (age < 12):
    print("You are kid, You age: " + str(age))
elif (age >= 12) and (age < 19):
    print("You age teenager, you age:  " + str(age))
else:
    print("You are old!")
print("---------------------------------------")

all_cars = ['chrusler', 'dacia', 'bmw', 'KIA', 'vw', 'seat', 'skoda', 'lada', 'audi', 'ford', 'Chevrolett']
german_cars = ['bmw', 'vw', 'audi']

if 'lada' in all_cars:
    print("YES LADA is in the list")
else:
    print("No in list")
print("---------------------------------------")

all_cars = ['chrusler', 'dacia', 'bmw', 'KIA', 'vw', 'seat', 'skoda', 'lada', 'audi', 'ford', 'Chevrolett']
german_cars = ['bmw', 'vw', 'audi']

for xxxx in all_cars:
    if xxxx in german_cars:
        print(xxxx + "is german cars")
    #else:
       # print(xxxx + "is not German cars")
print("---------------------------------------")

11. Работа со словарями часть 1

# str используется только для цифр
#   (----item------)
#   (key)    (value)
enemy = {
    'loc_x': 70,
    'loc_y': 50,
    'color': 'green',
    'health': 100,
    'name': 'Mudillo',
}

print(enemy)

print("Location x = " + str(enemy['loc_x']))
print("Location Y= " + str(enemy['loc_y']))
print("His name is: " + enemy['name'])

enemy['rank'] = 'Admiral'
print(enemy)

del enemy['rank']
print(enemy)

enemy['loc_x'] = enemy['loc_x'] + 40
enemy['health'] = enemy['health'] - 30
if enemy['health'] < 80:
    enemy['color'] = 'yellow'

print(enemy) # вывести содержимое словаря

print(enemy.keys()) # вывести ключи
print(enemy.values()) # вывести значения ключей

12. Работа со словарями часть 2

#   (----item------)
#   (key)    (value)
enemy = {
    'loc_x': 70,
    'loc_y': 50,
    'color': 'green',
    'health': 100,
    'name': 'Mudillo',
    'awards': ['nagrada1', 'nagrada2'],
    'image': ['image1.jpg','image2.jpg','image3.jpg'],
}
print(enemy)
print(enemy['loc_x'])
pp = "-----------------------------------------------"
#массивы
all_enemies = []
#all_enemies.append(enemy)
#all_enemies.append(enemy)
#all_enemies.append(enemy)
#print(all_enemies)
for x in range(0,10):
#    all_enemies.append(enemy) ошибка выполняется клонирование. и если в дольнейшем использовать это то будут проблемы
    all_enemies.append(enemy.copy())
print(all_enemies)
print(pp)
for x2 in all_enemies:
    print(x2)
print(pp)
all_enemies[5]['health'] = 30
all_enemies[1]['name'] = 'Vasya'
all_enemies[3]['name'] = 'Petre'
all_enemies[6]['name'] = 'Ot'
all_enemies[8]['name'] = 'Kozel'
#all_enemies[2]['loc_x'] = all_enemies[2]['loc_x'] + 10
all_enemies[2]['loc_x'] += 10
for x2 in all_enemies:
    print(x2)
print(pp)
print(all_enemies[5])
print(pp)

13. Ввод данных пользователя

#name = input("Please enter your name: ")
#print("Privet " + name)
#print(f" Привет {name} !")
#!!! input всегда читает строки. НЕ ЦИФРЫ!!!!
pp = "-----------------------------------------------------------"
print(pp)
#num1 = input("Enter X: ")
#num2 = input("Enter Y: ")
######summa = num1 + num2
######Будет ошибка. Так как input  читает и подстовляет строки.
# требуется выполнить int (преоброзование строки в число)
#summa = int(num1) + int(num2)
#print(summa)
print(pp)
message = ""
#while message != 'secret':
#    message = input("Enter Password: ")
#    print(message + "Password Not Correct")
print(pp)
#while True:
#     message = input("Enter Password: ")
#     if message == 'secret' : break
#     print(message + "  <<<< Password Not Correct")
print(pp)
mylist = []
msg = ""
while msg != 'stop'.upper():
    msg = input("Enter new item, and STOP to finish: ")
    mylist.append(msg)
print(mylist)

14. Функции 1

pp = "--------------------------------------------"
#def napechat_privetstvie():
def napechat_privetstvie(name):
    """Print Privetstvie"""
    #print("Congratuletion, vish all the best")
    print("Congratuletion " + name + ", vish all the best!")
    #print("Hello Hello  Hello Hello Hello Hello Hello Hello !!!")

#def aaaa():
#    print("AAAA")

#-------------------------------------------------
print(pp)
#napechat_privetstvie()
#napechat_privetstvie()
#aaaa()
print(pp)
napechat_privetstvie("Denis")
napechat_privetstvie("Vasiii")
napechat_privetstvie("Purty")
print(pp)
def summa(x,y):
    print(x+y)

summa(10, 20)
print(pp)

def summa1(x , y):
    s = x + y
    return s

x = summa1(33, 22)
print(x)
print(pp)
def summa1(x , y):
    return x + y

x = summa1(77, 22)
print(x)
print(pp)

# фактор
#2! = 1 * 2
#3! = 1 * 2 * 3
#4! = 1 * 2 * 3 * 4

def factorial(x):
    """calculate factorial namber x """
    otvet = 1
    for i in range(1, x + 1):
        otvet = otvet * i
    return otvet
print(factorial(1))
print(factorial(5))
print(pp)
for i in range(1,10):
    #print(str(i) + "!\t = " + str(factorial(i)))
    print(f"{i} + !\t = {factorial(i)}")
print(pp)

15. Функции 2

pp = "________________________________________________________________________"
def create_record(name, telephon, address):
    """Create record"""
    record = {
        'name' : name,
        'phone': telephon,
        'address': address,
    }
    return record

user1 = create_record("Vasya", "+73420342305820358","Tunis")
user2 = create_record("Petia", "+324235252626", "sadsad")
print(user1)
print(user2)
print(pp)
# * перед persons не определенное количество
def give_award(medal, *persons):
    """Give medal persons"""
    for person in persons:
        #print("Tovarish " + person.title() + "nagrojdaetsa" + medal)
        print(f"Tovarish {person.title()} nagrojdaetsa {medal}")
give_award("Za berlin", "Vasia", "Petya")
give_award("Za london", "Valentin", "Petya", "Alexander")
print(pp)

16. Использование модулей

# Все функции во втором файле mod16.py
###import mod16

#START----------- это переехало в файл mod16.py
#def aaa():
#    print("AAAA")
#def bbb():
#    print("BBBB")
#def ccc():
#    print("CCCC")
#def ddd():
#    print("DDDD")
#def pp():
#    print("_______________________________________________")
# END ---------- это переехало в файл mod16.py

# ---- MAIN так мы вызывали когда модули жили тут
#aaa()
#bbb()
#ccc()
#ddd()
#pp()

#!!! чет с ходу нехера не заработало пошол разбиратся почему .......
#import sys
#print(sys.path) # хотелось увидеть окружения env

#import pkgutil # а этим модулем хотелось увидеть все модули каторые загрузились
#search_path = ['.'] # Используйте None, чтобы увидеть все модули, импортируемые из sys.path
#all_modules = [x[1] for x in pkgutil.iter_modules(path=search_path)]
#print(all_modules) # Увидел что моудль mdd16 подрубается ...... но всеравно нехера не работает.....

## почитали почитали.....
# вызывается следуещим образом имя_модуля.имя_функции ......... :)

#---------MAIN
###mod16.aaa()
###mod16.bbb()
###mod16.ccc()
###mod16.ddd()
###mod16.pp()


#что бы не писать mod16.aaa() делается так
from mod16 import *
# можно вызвать что то конретное например aaa
#from mod16 import aaa
aaa()
bbb()
ccc()
ddd()
pp()


17 Классы 1

from hero import Hero
### Утащили все файл hero.py
#class Hero():
#    """ Class to create  Hero for our Game"""
#    def __init__(self, name, level, race):
#        """"Initiate our hero"""
#        self.name = name
#        self.level = level
#        self.race = race
#       self.health = 100
#    def show_hero(self):
#        """Print all parameters of this hero"""
#        #discription = (self.name + ", Level is: " + str(self.level) + ", Race is: " + self.race + str(self.health)).title()
#        discription = (f" {self.name}, Level is: {self.level},  Race is: {self.race}, Health is: {self.health}").title()
#        print(discription)
#
#    def level_up(self):
#        """ Upgrade Level of Hero"""
#       #self.level = self.level +1
#       self.level += 1
#
#    def move(self):
#         """ Start moving Hero"""
#         print("Hero " + self.name + " start moving...")
#
#    def set_health(self, new_health):
#        self.health = new_health
#---------------------------

# ------------- MAIN
myhero1 = Hero("Vurdalak", 5, "Orc")
myhero2 = Hero("Alex", 4, "Humman")

myhero1.show_hero()
myhero2.move()
myhero1.level_up()
myhero1.show_hero()
#myhero1.health = 70 # не стоит так делать. лутше моздать  set_health
#myhero1.show_hero()
myhero1.move()
myhero1.set_health(60)
myhero1.show_hero()

18 Классы 2

#---hero.py---
class Hero():
    """ Class to create  Hero for our Game"""

    def __init__(self, name, level, race):
        """"Initiate our hero"""
        self.name = name
        self.level = level
        self.race = race
        self.health = 100

    def show_hero(self):
        """Print all parameters of this hero"""
        # discription = (self.name + ", Level is: " + str(self.level) + ", Race is: " + self.race + str(self.health)).title()
        discription = (f" {self.name}, Level is: {self.level},  Race is: {self.race}, Health is: {self.health}").title()
        print(discription)

    def level_up(self):
        """ Upgrade Level of Hero"""
        # self.level = self.level +1
        self.level += 1

    def move(self):
        """ Start moving Hero"""
        print("Hero " + self.name + " start moving...")

    def set_health(self, new_health):
        self.health = new_health


class SuperHero(Hero):
    """ Class create super Hero"""

    def __init__(self, name, level, race, magiclevel):
        """Initiate our Super hero"""
        super().__init__(name, level, race)
        self.magiclevel = magiclevel
        #self.magic = 100 # __magic - два андерскора __ перед magic запретит инкапсуляцию.... изменятся будет только из класса 
        self.__magic = 100

    def makemagic(self):
        """Use magic"""
        #self.magic -= 10
        self.__magic -= 10

    def show_hero(self):
        discription = (
            #f" {self.name}, Level is: {self.level},  Race is: {self.race}, Health is: {self.health}, Magic is: {self.__magic}").title()
            f" {self.name}, Level is: {self.level},  Race is: {self.race}, Health is: {self.health}, Magic is: {self.__magic}").title()
        print(discription)
#---/hero.py---


#---file18---
from hero import *
from mod16 import pp


# ------------- MAIN
myhero1 = Hero("Vurdalak", 5, "Orc")
myhero2 = Hero("Alex", 4, "Humman")
mysuperhero = SuperHero("Mosia", 10, "elf", 5)
pp()
myhero1.show_hero()
pp()
myhero2.show_hero()
pp()
mysuperhero.show_hero()
pp()
mysuperhero.makemagic()
mysuperhero.makemagic()
mysuperhero.makemagic()
mysuperhero.makemagic()
mysuperhero.show_hero()
mysuperhero.magic = 250
pp()

19. Работа с файлами

#input_file = "../myfile.txt"

# mode -  есть несколько режимов открытия файла
# r  - read - чтение
# w  - write - запись
# a  - append - добовлять
# r+ - read pluse - читать и писать

# encoding
# кодировка
# utf8
# ascii

from mod16 import pp
pp()

input_file = "myfile.txt" # файл который будем читать
output_file = "outfile.txt" # файл в который будем записывать
password_to_look_for = "Hyponi111"


#myfile1  = open(input_file, mode='r', encoding='ascii')
myfile1  = open(input_file, mode='r', encoding='utf_8') # Это строка открывает файл на чтение
myfile2  = open(input_file, mode='r', encoding='utf_8') # Это строка открывает файл на чтение
myfile3  = open(input_file, mode='r', encoding='utf_8') # Это строка открывает файл на чтение
myfile4  = open(input_file, mode='r', encoding='utf_8') # Это строка открывает файл на чтение
#myfile5  = open(output_file, mode='w', encoding='utf_8') # Эта строка создает новый файл для записи, если файл закрыт то он будет перезаписан
myfile5  = open(output_file, mode='a', encoding='utf_8') # Эта строка позволит дописывать в файл (mode='a')
#print(myfile1.read()) # прочитаем файл
for line in myfile1:  #  прочитаем файл построчно, скажим всем привет, выволим на экран, strip обрежит лишнии пробелы
    print("Hello " + line.strip())
pp()

for num, line in enumerate(myfile2,1):  #  прономеруем
    print("Line № " + str(num) + " : "+ line.strip())
myfile2.close()
pp()

for num, line in enumerate(myfile3,1):  #  распечатаем если есть lolol2
    if "lolol2" in line:
      print("Line № " + str(num) + " : "+ line.strip())
pp()
myfile3.close()
for num, line in enumerate(myfile4,1):  #  Читается файл и записывается в  другой файл искомая строка со словом Hyponi111
    if "Hyponi111" in line:
      print("Line № " + str(num) + " : "+ line.strip())
      myfile5.write(f"Found password: {line}")
myfile4.close()
myfile5.close()

pp()

20. Ошибки

https://docs.python.org/3/tutorial/errors.html
https://docs.python.org/3.2/library/exceptions.html


import sys
#filename = "myfile.txt" #правильно имя
filename = "myfile_error.txt" # ошиблись в имени файла :)
#myfile  = open(filename, mode='r', encoding='utf_8')
#print(myfile.read())

while True:
  try:
    print("Inside Try")
    myfile  = open(filename, mode='r', encoding='utf_8')
  except Exception:
    print("Inside EXCEPT")
    print(">>>>> Error Found! :( <<<<<<<<<<<<<<")
    #sys.exit()  #завершит дальнейшие выполнение программы
    print(sys.exc_info()[1])
    filename = input("Enter correct file name!: ")
  else:
    print("Inside ELSE")
    print(myfile.read())
    sys.exit() # если тут не поставить выход то будет бесконечный цыкл :)
  finally:
    print("Inside FINALLY")
    print("=============EOF==========================")


21. JSON

import json
filename = "user_setting.txt" # имя файла в который сохраняем
myfile = open(filename, mode='w', encoding="utf-8") # открываем файл для записи
player1 = {
    'PlayerName': "Chuvak",
    'Score': 345,
    'Awards': ["OR", "New", "ZZ"],
}

player2 = {
    'PlayerName': "Osip",
    'Score': 345,
    'Awards': ["WI", "TX", "Miss"],
}

mayplayer = [] # создали пустой массив
mayplayer.append(player1) # добавляем в массив словарь player1
mayplayer.append(player2) # добавляем в массив словарь player2

# ---------------- SAVE by JSON ---------------------
json.dump(mayplayer, myfile)
myfile.close()

# ----------------- LOAD
myfile = open(filename, mode='r', encoding='utf-8')
json_data = json.load(myfile)
for user in json_data:
    print("Player Name is: " + str(user['PlayerName']))
    print("Player Score is: " + str(user['Score']))
    print("Player Award is: " + str(user['Awards'][0]))
    print("Player Award is: " + str(user['Awards'][1]))
    print("Player Award is: " + str(user['Awards'][2]))
    print("--------------------------------------")


22. Аргументы / Командная строка

# Как послать аргументы нашим скриптам/программе ? 
# myprog.py argument argument argument
# argument - передается в виде массива

# ---Пример 0 -------
# код на python
import sys
print("hello")
print(sys.argv)
# выполнение скрипта 22_Argumets_cmd.py в cmd
O:\pycharm4\python>22_Argumets_cmd.py arg1 arf2 arg3 # напечатали это в cmd windows
hello #вывод скрипта
['O:\\pycharm4\\python\\22_Argumets_cmd.py', 'arg1', 'arf2', 'arg3' ]#вывод скрипта
#--------------------- 

# --- Пример 1 ---
# так как аргументы в программу передаются в виде массива то и обратится к ним можно как к массиву
import sys
print("hello")
print(sys.argv)
print(sys.argv[1:]) # напечатать аргумент от первого и до конца
print(sys.argv[1])  # напечатать второй (так как отсчет идет от нуля)
print(sys.argv[2])  # напечатать третий (так как отсчет идет от нуля)
print(sys.argv[3])  # напечатать четвертый (так как отсчет идет от нуля)
print(sys.argv[-1]) # напечатать последний аргумент
print(sys.argv[-2]) # напечатать предпоследний аргумент
print(sys.argv[0]) # распечатает первый  аргумент ( это обычно путь исполняемого скрипта )
#----------------

# --- Пример 2 --- 
x = len(sys.argv)
if x > 1:
    print("Tital arg enter: " + str(x))
    print(sys.argv)
else:
    print("Not enter arguments")
#-----------------

# --- Пример 3 --- 
x = len(sys.argv)
if x > 1:
    if sys.argv[1] == "/?":
        print("Help requested")
        print("Usage of this program: enter argument for pogram \n\t myprogram.py /? for help \n\t myprogram.py YO  print HELLO ")
        #print("Total arg enter: " + str(x))
    elif sys.argv[1] == "YO":
          print("\n\t HELLO YO")
    print("Argument enter: " + str(sys.argv[1:]))
    #print(sys.argv)
else:
    print("Not enter arguments")
#-----------------

# --- Пример 4 --- 
# а теперь прикольное выполнение команд OS из python
import os # позволяет использовать встроенные программы текущей ОС
import sys
os.system("dir") # выполнит команду dir из ОС Windows
# os.system("dir > cmd_dir.txt") # перенаправить вывод команды dir в файл cmd_dir.txt
# os.mkdir("mydir") # создать каталог средствами python и назвать ее mydir
os.system("ping ya.ru > pingyaru.txt") # запустить ping windows пинговать ya.ru и записать результат в файл pingyaru.txt
sys.exit()
#-----------------


23. Регулярные выражения / RegExpression 1

import re

def pp():
    """" xxxx """
    print("#-----------------------------------------------")
pp()

mytext = "Vasia aaaaaaaa 1972, Koli - 1972 : Olesy 1981, aaaa@intel.com, " \
         "bbbbbb@intel.com, PPP hhhhh, 1982, ccccccccccccccccc@ya.ru, Olesya , " \
          "hgjgfjfyj@incte.com, vasya@yandex.net, hello hello, Misha #43 1984" \
          "Vladimir 1977, Irina, 2001, annnn@intel.com, eeeeee@yandex.com" \
          "oooooo@hotmail.gov, gggggggg@gov.gov, tutututut@giv.hot"

"""
\d = Any Digit 0-9 / Любая цифра
\D = Any non DIGIT / Любой символ но не цифра
\w = Any Alphabet simvol / Любая буква [A-Z a-z]
\W = Any non Alphabet simvol / Любой символ но не буквы
\s = breakespace  / пробел
\S = breakespace  / не пробел

[0-9][0-9][0-9][0-9] - четыре цифры подряд
[0-9][0-9][0-9] - три цыфры
[0-9]{3} -  три цыфры
[0-9]{4} -  четыри цыфры

\w{6} - любые слова из шести символов

[A-Z][a-z] - первый символ большой второй маленткий
[A-Z][a-z]+ - первый большой а далее мелких букв сколько угодно 

\. - точка

\w+\.\w+ - искать домены
\w+@\w+\.\w+ - искать почтовые адресса

"""

textlookfor = r"yandex" #шаблон
allresults = re.findall(textlookfor, mytext)
print(allresults)

pp()


textlookfor = r"\d\d\d" #шаблон
allresults = re.findall(textlookfor, mytext)
print(allresults)

pp()

textlookfor = r"[0-9][0-9][0-9]"
allresults = re.findall(textlookfor, mytext)
print(allresults)

pp()

textlookfor = r"[0-9]{3}"
allresults = re.findall(textlookfor, mytext)
print(allresults)

pp()

textlookfor = r"\w{6}"
allresults = re.findall(textlookfor, mytext)
print(allresults)

pp()

textlookfor = r"\w{6}\s"
allresults = re.findall(textlookfor, mytext)
print(allresults)

pp()

textlookfor = r"[A-Z][a-z]+"
allresults = re.findall(textlookfor, mytext)
print(allresults)

pp()

textlookfor = r"\w+\.\w+"
allresults = re.findall(textlookfor, mytext)
print(allresults)

pp()

textlookfor = r"@\w+\.\w+"
allresults = re.findall(textlookfor, mytext)
print(allresults)


pp()

textlookfor = r"\w+@\w+\.\w+"
allresults = re.findall(textlookfor, mytext)
print(allresults)


24. Регулярные выражения / RegExpression 2

import re
input_filename = "dumpfile.txt"
result_filename = "result.txt"

inputfile = open(input_filename, mode='r', encoding='utf_8')
resultfile = open(result_filename, mode='w', encoding='utf_8')

mytext = inputfile.read()
# не моного офтопа https://regex101.com/ - сайт поможет с регулярными выражениями
#lookfor = r"[\w.-]+@[\w.-]+"

#lookfor = r"[\w.-]+@[A-Za-z-]+\.[\w.]+"

lookfor = r"[\w.-]+@(?!intel\.com)[A-Za-z-]+\.[\w.]+" # исключаем запись intel.com  (?!intel\.com)
lookfor2 = r"[A-Z][a-z]+\s[A-Z][a-z]+" # ищем Имена

results = re.findall(lookfor, mytext)   # что искать, где искать
results2 = re.findall(lookfor2, mytext)
#print(results)
#print(results2)

#for item in results:
#    print(item)
    #resultfile.write(item) запишет все в кучу
    #resultfile.write(item + "\n") # запишет покрасивее красиво

#uniq = [1,2,3,4,5]
#fifa = ['a','b','c','d','e']
#uniq_and_fifa = dict(zip(uniq, fifa))

totalresult =  dict(zip(results2, results))
#print(totalresult)

for item in totalresult:
    print(item + totalresult[item])
    resultfile.write(item + totalresult[item] + "\n")
print(f"Total: {str(len(results))}")

25. PyGame Начало Установка

# Picharm -> settings -> pluse -> search pygame -> install
# windows cmd -> python -m pip install --user pygame

#import pygame.examples.stars # установим игруху из примеров stars
#import pygame.examples.cursors
#pygame.examples.stars.main() # запуск игры
#pygame.examples.cursors.main()

import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))

while True:
    pygame.display.flip()

26. Pygame Управление картинкой

# Двигаем картинку
import pygame
MAX_X = 800
MAX_Y = 600
#MAX_X = 2560
#MAX_Y = 1440
game_over = False
bg_color = (0,0,0) #RGB цвет фона сейчас черный


pygame.init()
screen = pygame.display.set_mode((MAX_X, MAX_Y)) # в окне
#screen = pygame.display.set_mode((MAX_X, MAX_Y)), pygame.FULLSCREEN # на весь экран
pygame.display.set_caption("My first Py game! :)")
# по умолчанию pygame понимает bmp картинки
print(pygame.image.get_extended())

x = 500
y = 100

myimage = pygame.image.load("1.png").convert()
myimage = pygame.transform.scale(myimage, (100, 100)) # изменить размер изображения
# ---------------------- MAIN GAME LOOP
while game_over == False:
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                game_over = True
            if event.key == pygame.K_LEFT:
                x -= 20
            if event.key == pygame.K_RIGHT:
                x += 20
            if event.key == pygame.K_UP:
                y -= 20
            if event.key == pygame.K_DOWN:
                y += 20
        if event.type == pygame.MOUSEBUTTONDOWN:
             x, y = event.pos

    screen.fill(bg_color)  # закрашиваем  фон
    screen.blit(myimage, (x, y)) # координаты картинки
    pygame.display.flip()

27. Pygame move

# Двигаем картинку плавно
import pygame

MAX_X = 800
MAX_Y = 600
IMG_SIZE = 100

game_over = False
bg_color = (0,0,0) #RGB цвет фона сейчас черный


pygame.init()
screen = pygame.display.set_mode((MAX_X, MAX_Y)) # в окне
#screen = pygame.display.set_mode((MAX_X, MAX_Y)), pygame.FULLSCREEN # на весь экран
pygame.display.set_caption("My first Py game! :)")
# по умолчанию pygame понимает bmp картинки
print(pygame.image.get_extended())

x = 500
y = 100

move_right = False
move_left = False
move_up = False
move_down = False


myimage = pygame.image.load("1.png").convert()
myimage = pygame.transform.scale(myimage, (IMG_SIZE, IMG_SIZE)) # изменить размер изображения
# ---------------------- MAIN GAME LOOP
while game_over == False:
    for event in pygame.event.get():

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                 game_over = True
            if event.key == pygame.K_LEFT:
                 move_left = True
            if event.key == pygame.K_RIGHT:
                move_right = True
            if event.key == pygame.K_UP:
                   move_up = True
            if event.key == pygame.K_DOWN:
                 move_down = True

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                 move_left = False
            if event.key == pygame.K_RIGHT:
                move_right = False
            if event.key == pygame.K_UP:
                   move_up = False
            if event.key == pygame.K_DOWN:
                 move_down = False

        if event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos

    if move_left == True:
          x -= 1
          if x < 0:
             x = 0
    if move_right == True:
          x += 1
          if x > MAX_X - IMG_SIZE:
             x = MAX_X - IMG_SIZE
    if move_up == True:
          y -= 1
          if y < 0:
             y = 0
    if move_down == True:
          y += 1
          if y > MAX_Y - IMG_SIZE:
              y = MAX_Y - IMG_SIZE




    screen.fill(bg_color)  # закрашиваем  фон
    screen.blit(myimage, (x, y)) # координаты картинки
    pygame.display.flip()

28. Pygame снегопад

import pygame
import random
import  sys
import time

MAX_X = 800
MAX_Y = 600
MAX_SNOW = 100
SNOW_SIZE = 64
TIME_SLEEP = 0.010


class Snow():
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = random.randint(1,3)
        self.img_number = random.randint(1,3)
        self.image_filename = "snow" + str(self.img_number) + ".png"
        self.image = pygame.image.load(self.image_filename).convert_alpha()
        self.image = pygame.transform.scale(self.image, (SNOW_SIZE,SNOW_SIZE))

    def move_snow(self):
        self.y = self.y + self.speed
        if self.y > MAX_Y:
            self.y = (0 - SNOW_SIZE)

        i = random.randint(1, 3)
        if i == 1:   #MOVE RIGHT
            self.x +=1
            if self.x > MAX_X:
                self.x = (0 - SNOW_SIZE)
        elif i == 2:    #MOVE LEFT
           self.x -= 1
           if self.x < (0 - SNOW_SIZE):
                self.x = MAX_X

    def draw_snow(self):
        screen.blit(self.image, (self.x, self.y))

def initialize_snow(max_snow, snowfall):
    for i in range(0, max_snow):
         xx = random.randint(0, MAX_X)
         yy = random.randint(0, MAX_Y)
         snowfall.append(Snow(xx, yy))

def check_for_exit():
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            sys.exit()

# --------------- MAIN
pygame.init()
screen = pygame.display.set_mode((MAX_X, MAX_Y),pygame.FULLSCREEN)
#screen = pygame.display.set_mode((MAX_X, MAX_Y))
bg_color = (0, 0, 0)
snowfall = []



initialize_snow(MAX_SNOW, snowfall)

while True:
    screen.fill(bg_color)
    check_for_exit()
    for i in snowfall:
        i.move_snow()
        i.draw_snow()
    time.sleep(TIME_SLEEP)
    pygame.display.flip()


29. Python Конвертирование py в exe / convet *.py to *.exe

# !!! Открываем cmd
# !!! Команда pip list может не \ ошибка не известная команда ....
# !!! Если python установлен попробуй python -m pip list / py -m pip list 
# !!! И так с остальными командами .... 

py -m pip list - покажет какие модули python установлены
pip list - покажет какие модули python установлены
py --version - узнать версию python

# !!! Далее нам надо pywin32 (sourceforge)
# !!! https://github.com/mhammond/pywin32/releases - вот отсюда берем под нашу версию установленного python
Скачиваем и устанавливаем

# !!! Далее нам понадобится скачать pyinstaller
# !!! https://www.pyinstaller.org/ - вот отсюда берем под нашу версию установленного python
Распаковываем и переносим в каталог к нашему скрипту. (То есть содержимое прям вытряхиваем в каталог нашего скрипта(Наш скрипт - это который мы собрались конвертировать в exe))

# !!! Устанавливаем pefile
pip install pefile

# !!! Еще может понадобится pywin32-ctypes
pip install pywin32-ctypes

# !!! При ошибках конвертации еще иногда помогает до установка pyinstaller 
pip install pyinstaller

# !!! Собственно конвертация
python pyinstaller.py helloworld.py --onefile - запустили питоном файл pyinstalle.py с аргументами helloworld.py(тот самый наш скрипт) --onefile (сказать pyinstaller что мы хотим что бы он сделал один файл) 

# !!! Где искать наш exe ????
В каталоге нашего проекта появится папка с именем нашего проекта.
В примере выше это будет каталог helloworld.
Внутри этого каталога  будет еще папка dist, в котором будет лежать файл helloworld.exe

30. Работа с базами данных SQL Server ODBC

# ставим модуль pypyodbc
# ставим SQL Server 2016 express edition(бесплатная версия)
# https://github.com/Microsoft/sql-server-samples/tree/master/samples/databases/northwind-pubs
# https://docs.microsoft.com/ru-ru/dotnet/framework/data/adonet/sql/linq/downloading-sample-databases
# https://www.woinfo.ru/soft/ustanovka-i-podklyuchenie-k-baze-dannyx-northwind.html
# https://visualstudio.microsoft.com/ru/downloads/
# MYWIN\SQLEXPRESS - мой тестовый сервер(MYWIN) и имя инстанс SQL (SQLEXPRESS)
# northwind - база данных для обучения
# https://docs.microsoft.com/ru-ru/sql/connect/python/pyodbc/step-3-proof-of-concept-connecting-to-sql-using-pyodbc?view=sql-server-ver15

import pypyodbc

mySQLServer = "MYWIN\SQLEXPRESS"
myDatabase = "northwind"

#connection = pypyodbc.connect(driver='{SQL Server}', server='localhost', database='test', uid='user', pwd='password')
# Если не указываем uid и pwd будут использоватся учетные данные пользователя запустившего скрипт
#connection = pypyodbc.connect(driver='{SQL Server}', server='MYWIN\SQLEXPRESS', database='Northwind')

connection = pypyodbc.connect(driver='{SQL Server}', server= mySQLServer, database= myDatabase)


cursor = connection.cursor()

mySQLQuery = (""" 
                 SELECT CompanyName, ContactName, country
                 FROM dbo.Customers
                 WHERE country = 'USA'
              """)

cursor.execute(mySQLQuery)
results = cursor.fetchall()

#print(results)
for row in results:
    companyname = row[0]
    contactname = row[1]
    contryname  = row[2]
    #print("Welcome: " + str(companyname) + "User:" + str(contactname) + "Frome: " + str(contryname))
    print(f"Welcome: {companyname} User: {contactname} From: {contryname} ")

connection.close

31. Конвертирование .py в Linux bin

0. Предварительно
whereis pyhton3 - команда покажет где ваши файлы python
touch myscript.py - создали пустой файл будущего скрипта
chmod +x  myscript.py - разрешили запуск файла 
nano myscript.py - пошли писать скрипт

Содержимое myscript.py
------myscript.py
#!/usr/bin/python3
print("Hello World from Python bin in Linux!")
----------------

1. Устанавливаем и обновляем библиотеки Python:
sudo apt-get install --reinstall python-pkg-resources
sudo apt-get install build-essential python-dev

2. Качаем PyInstaller:
wget https://github.com/pyinstaller/pyinstaller/releases/download/v3.6/PyInstaller-3.6.tar.gz

3. Распаковываем PyInstaller:
tar -xvf PyInstaller-3.2.tar.gz

4. Заходим в распакованный PyInstaller:
cd PyInstaller-3.2

5.Устанавливаем PyInstaller:
./pyinstaller.py setup.py

6. Конвертируем ваш .py файл в bin:
./pyinstaller.py myscript.py --onefile


Ваш бинарный файл будет в /PyInstaller-3.2/myscript/dist

32. Pycharm Linux

0. Скачать файл
https://www.jetbrains.com/ru-ru/pycharm/download/#section=linux

1. Распаковать файл
tar -xvf   pycharm-community-*.tar.gz

2. Перейти в директорию где запускаемый скрипт
cd pycharm-community-*
cd bin

3. Запустить PyCharm из директории где лежит PyCharm 
./pycharm.sh

33. Работа с Интернетом: GET, POST, Download / request / запросы

from urllib import request
myUrl = "https://b14esh.com"

otvet = request.urlopen(myUrl)

mytext1 = otvet.readlines()
mytext2 = otvet.read()




print(otvet)

print("---------------------------------------------------------------------")

print(mytext2)

print("---------------------------------------------------------------------")

for line in mytext1:
      print(line)

33.1 Работа с Интернетом: GET, POST, Download / request

from urllib import request
myUrl = "https://b14esh.com"

otvet = request.urlopen(myUrl)

mytext1 = otvet.readlines()
mytext2 = otvet.read()




print(otvet)
print(mytext2)

for line in mytext1:
      print(line)

33.2 Работа с Интернетом: GET, POST, Download / request / post

from urllib import request, parse
import sys

myUrl = "https://www.google.com/search?"
value = {'q': 'ANDESA Soft'}

myheader = {}
myheader['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

try:
    mydata = parse.urlencode(value)
    print(mydata)
    myUrl = myUrl + mydata
    req = request.Request(myUrl, headers=myheader)
    otvet = request.urlopen(req)
    otvet = otvet.readlines()
    for line in otvet:
        print(line)
except Exception:
    print("Error occuried during web request!!")
    print(sys.exc_info()[1])

33.3 Работа с Интернетом: GET, POST, Download / download

from urllib import request
import sys

myUrl = "https://b14esh.com/img/b14esh/200w1.png" # что качаем
myFile = "O:\\mykartinka.png" # куда качаем

try:
     print(f"Start download from: >>> {myUrl} \n\t\t\t\t To: >>> {myFile}")
     request.urlretrieve(myUrl, myFile)
except Exception:
    print("AHTUNG!!!")
    print(sys.exc_info()[1])
    exit()
print(f"File Downloaded and saved >>> {myFile}")

34. Django / установка

# CMD windows
#https://www.djangoproject.com/
#pip install django
#pip install django-admin # на windows 7 все заработало без проблем, 
#на windows 10 была ошибка  с просьбой установить  Microsoft Visual C++ 14.0 ( скачал https://visualstudio.microsoft.com/ru/vs/ и установил "Средство сборки C++" (На самом деле нужен был компонент windows 10 SDK) 
# django --version - проверяем что django установился


!!! Создание сайта mysite
#o: - перешли на нужный диск o
#cd O:\pycharm5\python\django - перешли в каталог нашего будущего проекта
#django-admin startproject mysite  - создаем проект будущего сайта mysite

!!! Создаем базу для сайта mysite
#cd mysite - перешли в директорию нашего сайта mysite (ну тесть вот сюда O:\pycharm5\python\django\mysite)
#python manage.py migrate

!!! Запуск сервера с сайтом mysite 
#python manage.py runserver
#При запуске он напишет на каком порту он стартовал
#http://127.0.0.1:8000/

35. Django / Аппликации / странички

#django-admin startproject mysite  - создаем проект будущего сайта mysite
settings.py - файл настройки
urls.py - файл настройки страниц

#python manage.py runserver - запуск проекта
#http://127.0.0.1:8000/

#cd mysite - перешли в каталог
python manage.py startapp page1 - создали страничку 
views.py
urls.py - файл настройки страниц
#http://127.0.0.1:8000/page1

python  manage.py  startapp page2 - создали 
views.py
urls.py - файл настройки страниц
#http://127.0.0.1:8000/page2


36. Django / Пример добавление страниц

0. редактируем файл setting.py в корне проекта чтобы добавить новые аппликации (python manage.py startapp page1)
....... куча текста .....

# Application definition  - ищем это

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Add my web page1
    'page1', - добавляем станицу page1
    'page2', - добавляем станицу page2

]

1. редактируем файл urls.py в корне проекта ( что бы мы могли зайти на страничку http://127.0.0.1:8000/page1 и т.д.)

from django.urls import include, path
from django.contrib import admin

urlpatterns = {
         path('admin/', admin.site.urls), - админка по умолчанию в джанго
         path('', include('page1.urls')),  - вот так страничка page1 будет открываться как главная страница
         #path('hello', include('page1.urls')), - вот так только когда переходят на нее вот так http://127.0.0.1:8000/page1 
}


2. для работы аппликации page1 нужно отредактировать следующие файл page1\urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
   url(r'^$', views.index, name='index'),

]

3. также для того что бы аппликация page  что то показала нужно отредактировать файл page1\views.py
#from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
    return HttpResponse("

Hello world from django ! :)

") 4. Запускаем проект и проверяем что все работает python manage.py runserver

Пример запуска django

Запустите сервер с локальным хостом или системным IP-адресом, как показано ниже.
python manage.py runserver 192.168.6.7:8000
python manage.py runserver 0.0.0.0:8000
python manage.py runserver 127.0.0.1:8000

Добавьте хосты в settings.py для доступа из другой системы в сети.
ALLOWED_HOSTS = ['127.0.0.1', 'localhost','192.168.6.7']