Что можем сделать с помощью Depthcharge
Подключаться к UART и обнаруживать командную строку UBoot
Выполнять считывание и запись в SPI flash с помощю команд rksfc read/write
Выполнять считывание и запись на USB-накопитель при помощи команд USB read/write
pip install depthcharge
Подключение:
def console_setup():
console=Console("/dev/ttyS0",baudrate=115200)
ctx = Depthcharge(console,arch="arm")
return ctx
Считывание и запись во флэш-память при помощи depthcharge:
def rksfc_read(ctx,dest_addr,src_addr,size):
cmd_str = f"rksfc read 0x{dest_addr:02x} 0x{src_addr:02x} 0x{size:02x}"
resp = ctx.send_command(cmd_str)
return resp
def rksfc_write(ctx,dest_addr,src_addr,size):
cmd_str = f"rksfc write 0x{dest_addr:02x} 0x{src_addr:02x} 0x{size:02x}"
resp = ctx.send_command(cmd_str)
time.sleep(10)
return resp
Считывание и запись на USB при помощи depthcharge:
'''
usb_setup
This script is used to enumerate and set up the USB port
'''
def usb_setup(ctx,reset=False):
resps = []
if not reset:
resp = ctx.send_command("usb start")
else:
resp = ctx.send_command("usb reset")
resps.append(resp)
resp = ctx.send_command("usb storage")
resps.append(resp)
resp = ctx.send_command("usb dev 0")
resps.append(resp)
return resps
'''
USB write addr blk# cnt - write `cnt' blocks starting at block `blk#'
from memory address `addr'
'''
def usb_raw_write(ctx,source_addr,block,size):
cmd = f"usb write 0x{source_addr:x} 0x{block:x} 0x{size:x}"
resp = ctx.send_command(cmd)
return resp
'''
USB read addr blk# cnt - read `cnt' blocks starting at block `blk#'
to memory address `addr'
'''
def usb_raw_read(ctx,source_addr,block,size):
cmd = f"usb read 0x{source_addr:x} 0x{block:x} 0x{size:x}"
resp = ctx.send_command(cmd)
return resp
Дамп флэш-памяти при помощи Depthcharge
if __name__ == "__main__":
log.info("Marvel Super Heroes Depthcharge Test...")
ctx = console_setup()
usb_setup(ctx,reset=False)
# Read the SPI flash into RAM
rksfc_read(ctx,TARGET_RAM_ADDR,0,0x35E00)
log.info("Flash read into RAM")
# Write the data from RAM to a USB drive
usb_raw_write(ctx,TARGET_RAM_ADDR,0,0x35E00)
log.info("Flash written to USB")
Рубрика: python
Ссылки
https://developer.mozilla.org/ru/docs/Learn/Common_questions/set_up_a_local_testing_server https://docs.python.org/3/library/http.server.html
Пример:
# По умолчанию порт 8000 cd /tmp # Если версия Python, возвращенная выше, равна 3.X python -m http.server python -m http.server 7800 python -m http.server 8001 #Если версия Python, возвращенная выше, равна 2.X python -m SimpleHTTPServer python -m SimpleHTTPServer 7777
python install src
###тут ищи https://www.python.org/ftp/python/ wget https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tar.xz tar -xf Python-3.9.7.tar.xz Python-3.9.7/ cd Python-3.9.7/ ./configure --enable-optimizations make -j 4 make altinstall
update-alternatives
update-alternatives --list python update-alternatives --list pip update-alternatives --install /usr/bin/PROGRAM PROGRAM /usr/local/bin/PROGRAM NUMBER_WEIGHT update-alternatives --install /usr/bin/python python /usr/local/bin/python3.9 2 update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3.9 5 update-alternatives --config python
Creating a Virtual Environment
mkdir ~/my_app cd ~/my_app python -m venv my_app_venv source my_app_venv/bin/activate python -v deactivate
основные
pip help - помощь по доступным командам pip install package_name - установка пакета(ов) pip uninstall package_name - удаление пакета(ов) pip list - список установленных пакетов pip show package_name - показывает информацию об установленном пакете pip search - поиск пакетов по имени pip --proxy user:passwd@proxy.server:port - использование с прокси pip install -U - обновление пакета(ов) pip install https://имя_ресурса.com/файл.whl - есть еще вот такая установка пакетов pip pip install --force-reinstall - при обновлении, переустановить пакет, даже если он последней версии еще варианты использования: python -m pip install package_name python -m pip install --user package_name
Показать куда у нас установлены пакеты
import site # импортируем библиотеку site print(site.getsitepackages()) # глобальный репозиторий пакетов по умолчанию IDE print(site.getusersitepackages()) # глобальный репозиторий пакетов по умолчанию СИСТЕМЫ
Окружения:
venv - запрещено с версии 3.6 (deprecated since 3.6) хотя pycharm работает с venv.... pipenv conda - (для тех кто занимается data-science)
Создание окружения:
python -m venv venv-test - создать окружение venv в каталог venv-test include - в этой папке лежат си забегаловки для компиляции пакетов Lib - в этой папке лежит копия python интерпретатора Lib\site-package - в этой папке лежат зависимости Scripts - лежат файлы для управления виртуальным окружениям activete.bat - активирует текущие виртуальное окружение deactivate - команда, деактивировать виртуальное окружение
python errors \ ошибки
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']
Шпаргалка python от Яндекс (6)
Ссылка
https://pictures.s3.yandex.net/resources/py06_1584117094.pdf
Библиотеки
Библиотека или модуль — это набор готовых функций, объединённых общей темой. Команда import в начале файла импортирует библиотеку — «подключает модуль». После чего можно вызывать функции из библиотеки.
Импортируем библиотеку целиком
В библиотеке math собраны функции для подсчёта математических величин: import math value = math.sqrt(16) Модуль randint используется для работы со случайными числами: import random dice = random.randint(1, 6)
Импортируем только нужные функции
from math import sqrt value = sqrt(16) from random import randint dice = randint(1, 6)
Библиотека datetime. Работа со временем.
In
import datetime as dt
# взлёт Гагарина: 1961 год, 12 апреля, 9 часов утра, 7 минут
start_time = dt.datetime(1961, 4, 12, 9, 7, 0)
# посадка: 1961 год, 12 апреля, 10 часов, 55 минут
landing_time = dt.datetime(1961, 4, 12, 10, 55, 0)
print(f'Старт: {start_time}')
print(f'Продолжительность: {landing_time - start_time}')
Out
Старт: 1961-04-12 09:07:00
Продолжительность: 1:48:00
Как получить текущее время в Москве:
In
import datetime as dt
now = dt.datetime.utcnow()
moscow_now = now + dt.timedelta(hours=3) # московское время = UTC+3
print(f'Я пишу этот код в {moscow_now} по московскому времени')
Out
Я пишу этот код в 2020-03-13 18:35:30.003873 по московскому времени
Форматирование времени:
In
import datetime as dt
arrival_time = dt.datetime(2019, 5, 10, 19, 45)
print('Самолёт прибывает в', arrival_time.strftime('%H:%M'))
Out
Самолёт прибывает в 19:45
Здесь %H означает часы, %M — минуты.
Кроме этих параметров, бывают ещё, например %B — месяц, %Y — год, %S — секунды,
%A — название дня недели по-английски, %U — номер недели в году.
Ссылка
https://pictures.s3.yandex.net/resources/py05_1584116928.pdf
split() — разделение строк
Как разбить фразу на слова по пробелам: blok_string = 'Ночь. Улица. Фонарь. Аптека.' blok_list = blok_string.split() # ['Ночь.', 'Улица.', 'Фонарь.', 'Аптека.']
Можно указать, какой разделитель использовать для разбиения:
blok_string = 'Ночь. Улица. Фонарь. Аптека'
blok_list = blok_string.split('. ')
# ['Ночь', 'Улица', 'Фонарь', 'Аптека']
Последнее слово
Последнее слово можно взять в списке не только по индексу len(blok_list) - 1, но и проще, по индексу -1. Отрицательные индексы устроены вот так (индексы сверху и снизу — эквивалентны): 0 1 2 3 ['Ночь', 'Улица', 'Фонарь', 'Аптека'] -4 -3 -2 -1
f-строки
Как ещё можно собирать строки из нескольких частей:
one_hundred = 100
rubles = 'рублей'
friends = 'друзей'
print(f'Не имей {one_hundred} {rubles}, а имей {one_hundred} {friends}.')
# Не имей 100 рублей, а имей 100 друзей.
В f-строки можно подставлять не только переменные, но и результаты вычислений:
one_hundred = 100
five_hundred = 500
print(f'{one_hundred} + {five_hundred} = {one_hundred + five_hundred}')
# 100 + 500 = 600
Можно обратиться к элементам списка:
russian_alphabet = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п',
'р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я']
print(f'{russian_alphabet[-1]} - последняя буква в алфавите.')
К элементам словаря можно обратиться по ключу:
favorite_songs = {
'Тополиный пух': 'Иванушки international',
'Город золотой': 'Аквариум',
'Звезда по имени Солнце': 'Кино'
}s
ong = 'Город золотой'
print(f'{song} - одна из известных пеcен группы {favorite_songs[song]}.')
Ссылка
https://code.s3.yandex.net/backend-developer/conspects/py04.pdf
Словари
Словарь (dict) оформляется фигурными скобками.
Его заполняют пары, записанные через запятую.
Первый элемент в паре называется ключ, а второй — значение, они разделяются между собой двоеточием.
english = {
'рука': 'hand',
'нога': 'leg',
'разработчик': 'developer'
}
# доступ по ключу: как по-английски рука?
print(english['рука'])
english['рука'] = 'arm'
# значение для ключа 'рука'
# поменялось с 'hand' на 'arm'
Пройти по всем элементам словаря можно циклом for, причём есть несколько вариантов:
favorite_songs = {
'Тополиный пух': 'Иванушки international',
'Город золотой': 'Аквариум',
'Звезда по имени Солнце': 'Кино',
'Группа крови': 'Кино'
}
for track in favorite_songs:
print(track + ' это песня группы ' + favorite_songs[track])
for music_band in favorite_songs.values():
print('Доктор, я больше не могу слушать группу ' + music_band)
for track, music_band in favorite_songs.items():
print(track + ' это песня группы ' + music_band)
Метод .keys() возвращает все ключи словаря, а метод .values() — все значения.
Множества
Тип set похож на список, но есть два важных отличия:
• элементы во множестве не повторяются;
• не гарантируется, что при выводе элементов на экран будет соблюден какой-то определённый порядок.
word_set = {'hand', 'leg', 'developer'}
# получаем сет unique_band_names
# (с англ. «уникальные названия групп»)
unique_band_names = set(bands)
for band in unique_band_names:
print('Не могу больше слушать', band)
Метод .union() объединяет два множества:
songs1 = {
'Три белых коня',
'Happy new year',
'Снежинка'
}s
ongs2 = {
'Last christmas',
'Снежинка',
'Happy new year'
}
print(songs1.union(songs2))
# 'Три белых коня', 'Снежинка',
# 'Last christmas', 'Happy new year'
Проверка наличия элемента
if 'Аквариум' in unique_band_names:
print('есть такое!')
if 'body' not in word_set:
print('нету')
Метод .difference() возвращает разницу множеств, а метод .intersection() — их пересечение.
Ссылки:
https://code.s3.yandex.net/backend-developer/conspects/py03.pdf
Функции
Примеры встроенных в Python функций: print(), str(), int(), float(), len().
Создаём свою функцию
def hello(hour):
if hour <= 5 or hour >= 23:
print('Доброй ночи!')
elif hour >= 6 and hour <= 11:
print('Доброе утро!')
elif hour >= 12 and hour <= 17:
print('Добрый день!')
elif hour >= 18 and hour <= 22:
print('Добрый вечер!')
Вызов функции
In
hello(4) # вызов с аргументом 4
hello(10) # вызов с аргументом 10
hello(15) # ещё один вызов функции
hello(20) # и ещё один вызов
Out
Доброй ночи!
Доброе утро!
Добрый день!
Добрый вечер!
Аргументы функции
# у name -- значение по умолчанию def say_hello(hour, name=''): if hour <= 5 or hour >= 23: message = 'Доброй ночи' elif hour >= 6 and hour <= 11: message = 'Доброе утро' elif hour >= 12 and hour <= 17: message = 'Добрый день' elif hour >= 18 and hour <= 22: message = 'Добрый вечер' if name != '': print(message + ', ' + name + '!') else:print(message + '!') In say_hello(10, 'Тимур') say_hello(14, 'Елена') say_hello(20) Out Доброе утро, Тимур! Добрый день, Елена! Добрый вечер!
При вызове функции можно явно указывать, какому аргументу какое значение соответствует. В таком случае порядок следования аргументов в скобках роли не играет: In say_hello(hour=10, name='Тимур') say_hello(name='Елена', hour=14) say_hello(hour=20) Out Доброе утро, Тимур! Добрый день, Елена! Добрый вечер!
Возврат значений из функции
# функция для вычисления # периметра прямоугольника # от англ. calculate, ”вычислять” def calc_perimeter(side_a, side_b): return (side_a + side_b) * 2 # функция для вычисления # площади прямоугольника def calc_square(side_a, side_b): return side_a * side_b # здесь подготовка результата def show_info(side_a, side_b): p = calc_perimeter(side_a, side_b) s = calc_square(side_a, side_b) text = 'Периметр = ' + str(p) + ' м., ' text += 'площадь = ' + str(s) + ' кв.м.' return text In a = 8 b = 10 print(show_info(a, b)) # можем произвести расчёты # и для другого прямоугольника print(show_info(3, 4)) Out Периметр = 36 м., площадь = 80 кв.м. Периметр = 14 м., площадь = 12 кв.м. Если бы мы ошиблись и забыли вернуть строку text из функции show_info(), то вывод получился бы странный: None. Это специальное значение в Python
ссылка
https://code.s3.yandex.net/backend-developer/conspects/py02.pdf
Циклы. Пример цикла for в Python:
In
bremen_musicians = ['Трубадур', 'Петух', 'Кот', 'Пёс', 'Осёл']
print('Представляем музыкантов:')
for musician in bremen_musicians:
print(musician)
Out
Представляем музыкантов:
Трубадур
Петух
Кот
Пёс
Осёл
Переменная musician принимает последовательно значения всех элементов из списка bremen_musicians.
Циклы. Ещё пример. Как пройтись по числам подряд:
In
for i in range(1, 6): # range - диапазон
print(i)
print('я иду тебя искать')
Out
1
2
3
4
5
я иду тебя искать
Внимание: range(a, b) возвращает числа от a до b-1.
Циклы. Функция reversed() «переворачивает» списки и диапазоны значений:
In
for i in reversed(range(1, 11)):
print(i)
print('Поехали!')
Out
10
9
8
7
6
5
4
3
2
1
Поехали!
Ветвления. Логические выражения.
Ветвления
Логические выражения могут принимать логические значения True («истина») и False («ложь»).
Условный оператор if для записи ветвления «если – то»:
# в переменной beaufort хранится скорость ветра по шкале Бофорта
if beaufort == 0:
print('штиль')
Конструкция if-else для записи ветвления
«если – то – иначе»:
if beaufort == 0:
print('штиль')
else:
print('есть ветер')
Множественное ветвление:
if beaufort == 0:
print('штиль')
elif beaufort == 1:
print('тихий ветер')
elif beaufort == 2:
print('лёгкий ветер')
elif beaufort == 3:
print('слабый ветер')
elif beaufort == 4:
print('умеренный ветер')
elif beaufort == 5:
print('свежий ветер')
elif beaufort == 6:
print('сильный ветер')
Как только выполняется одно из условий — все нижеследующие elif и else пропускаются.
Логические выражения
Операторы сравнения: • равно == • меньше < • больше > • больше или равно >= • меньше или равно <= • не равно !=
Логические операторы:
• or («или») — логическое сложение
if beaufort == 7 or beaufort == 8:
print('крепкий ветер')
• and («и») — логическое умножение
• not («не») — отрицание
Ссылка
https://code.s3.yandex.net/backend-developer/conspects/py01.pdf
Знакомство с Python
Клиент и сервер взаимодействуют в интернете. Бэкенд-разработчик пишет программы для серверов. Бэкенд разрабатывают на различных языках программирования, в том числе на Python.
Первая программа на Python
In
# Приветствие миру - традиционная
# первая строка в освоении
# нового языка программирования
print('Привет, Мир!')
Out
Привет, Мир!
-------------------
Любая строчка, начинающаяся с символа # — это комментарий, примечание для разработчика.
-------------------
# эта команда показывает ”Zen of Python”
import this
-------------------
Типы переменных. Переменные в Python могут быть разного типа — целые числа, дробные числа, строки:
In one_hundred = 100 five_hundred = 500 print(one_hundred + five_hundred) Out 600 In first = 87.2 second = 50.2 third = 50.242 print(first + second + third) Out 187.642 In first = '87.2' second = '50.2' third = '50.242' # оператор + объединяет строки: print(first + second + third) Out 87.250.250.242
Типы переменных. Числа приводятся к строкам функцией str():
In # объявляем две переменные разных типов: number = 100 rubles = ' рублей' # сложить число и строку невозможно, # поэтому приводим number к строке: print(str(number) + rubles) Out 100 рублей
Типы переменных. Дробные числа приводятся к целым функцией int():
Она не округляет числа, а отбрасывает дробную часть: In # округление вниз, как привыкли print(int(3.14)) Out 3 In # а здесь всё равно округление вниз, # хотя вроде бы так быть не должно print(int(2.72)) Out 2
Списки
Списки — это последовательности, похожие на массивы из других языков программирования. Они записываются в квадратных скобках через запятую: In bremen_musicians = ['Трубадур', 'Кот', 'Пёс', 'Осёл', 'Петух'] print(bremen_musicians) Out [’Трубадур’, ’Кот’, ’Пёс’, ’Осёл’, ’Петух’]
Чтобы подсчитать, сколько в списке элементов, вызывают стандартную функцию len():
In count = len(bremen_musicians) print(count) Out 5
Список строк можно преобразовать в одну строку:
Для этого используется метод join():
In
print('Представляем музыкантов: ' + ', '.join(bremen_musicians))
Out
Представляем музыкантов: Трубадур, Кот, Пёс, Осёл, Петух



