آموزش کامل مفاهیم اولیه پایتون [خلاصه شده]

آموزش کد پایتون

این روز ها دانش برنامه نویسی Python می تواند کاربرد های بسیار زیادی داشته باشد، از ساخت نرم افزار های مختلف تا هوش مصنوعی و یادگیری ماشینی، زبان پایتون می تواند انتخاب مناسبی باشد. در این پست با مفاهیم اولیه کدنویسی پایتون بصورت مختصر آشنا خواهیم شد و در ادامه این سری آموزشی، یک پروژه با پایتون خواهیم ساخت.

قبل از شروع کدنویسی، اول به یک محیط توسعه مناسب برای پایتون نیاز داریم که نحوه نصب و راه اندازی چنین محیطی را قبلا در پست زیر یاد گرفتیم:

اجرای کد در Command Line

پس از نصب پایتون برای اجرای کد پایتون می توانید ترمینال ویژوال استودیو کد یا cmd ویندوز را باز کرده و دستور python را تایپ کنید. با اجرای این دستور یک Command Line برای شما باز می شود که داخل آن می توانید کد پایتون بنویسید.

C:\Users\...>python

Python 3.11.4 (tags/v3.11.4:d2340ef, Jun  7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

برای امتحان می توانید کد print("Hello") را بنویسید و اینتر بزنید تا اجرا شود (عبارت Hello نمایش داده می شود):

>>> print("Hello")
Hello

برای خروج از این حالت عبارت exit() را اجرا کنید.

ساختار و Syntax کد پایتون

استفاده از Command Line برای امتحان کردن و اجرای سریع برخی از کد ها می تواند کاربرد داشته باشد ولی اکثر اوقات کد پایتون را داخل یک فایل با پسوند .py خواهیم نوشت و با دستور زیر محتوای آن فایل را اجرا خواهیم کرد:

python myfile.py

برای مثال یک فایل به اسم myfile.py ایجاد کنید و کد print("Hello") را داخل آن بنویسید، سپس با اجرای دستور بالا، عبارت Hello پرینت یا نمایش داده می شود.

تورفتگی یا Indentation در پایتون

در زبان پایتون برخلاف بیشتر زبان های برنامه نویسی، قرار دادن فاصله در ابتدای کد یا همان فرورفتگی کد، معنی خاصی دارد و برای مشخص کردن یک بلوک کد استفاده می شود. در ادامه با این موضوع بیشتر آشنا خواهیم شد.

کامنت های پایتون

در پایتون سطر هایی که با # شروع شوند، اجرا نمی شوند. به این سطر ها کامنت گفته می شود و فقط برای توضیح کدهای نوشته شده استفاده می شوند. کامنت ها را در انتهای کد نیز می توانیم بنویسیم:

#این یه کامنته
print("Hello")
print("Hello") #اینم یه کامنته

(اجرای سریع مثال ها)

در ادامه برای یادگیری بهتر حتما سعی کنید مثال های هر بخش را خودتان اجرا کنید. حتی می توانید مثال ها را تغییر دهید و نتیجه تغییرات را نیز ببینید.

برای اجرای سریع می توانید ویژوال استودیو کد را باز کرده و یک فایل .py ایجاد کنید، سپس کد هر مثال را داخل آن کپی کرده و با دستور python your_file_name.py داخل ترمینال ویژوال استودیو کد، این فایل را اجرا کنید:

نحوه اجرای فایل پایتون در vscode

متغیر های پایتون

متغیر ها (Variables) برای نگهداری و ذخیره اطلاعات در حافظه استفاده می شوند. در پایتون برای تعریف یک متغیر فقط کافی است اسم متغیر را نوشته و یک مقدار به آن بدهیم:

myNumber = 12345

print(myNumber)

اسم یک متغیر (در اینجا myNumber) نمی تواند شامل خط تیره یا فاصله باشد و به حروف بزرگ و کوچک حساس است.

اختصاص چند مقدار به صورت همزمان به چند متغیر:

x, y, z = 11, 22, 33

print(x)
print(y)
print(z)

اختصاص یک مقدار به صورت همزمان به چند متغیر:

x = y = z = 11

print(x)
print(y)
print(z)

ساختار های داده پایتون

ساختار های داده (Data Types) در برنامه نویسی اهمیت زیادی دارند. متغیر ها می توانند انواع مختلفی از داده ها را ذخیره کنند که برای امورات مختلف طراحی شده اند. به طور پیشفرض، داده ها در پایتون می توانند ساختار های زیر را داشته باشند:

نوع داده

کاربرد

str

اطلاعات متنی

int ، float و complex

اطلاعات عددی

list ، tuple و range

آرایه ها و اطلاعات دنباله ای

dict

نگاشت و نقشه برداری اطلاعات

set و frozenset

انواع ست ها

bool

نوع داده بولی (درست/نادرست)

bytes ، bytearray و memoryview

اطلاعات باینری

NoneType

ناموجود بودن

برای به دست آوردن ساختار هر مقداری در پایتون می توانیم از تابع type() استفاده کنیم:

my_number = 5
print(type(my_number))

نمونه تعریف ساختار های داده مختلف:

تعریف

نوع

x = "Hello World"

str

x = 20

int

x = 20.5

float

x = 1j

complex

x = ["apple", "banana", "cherry"]

list

x = ("apple", "banana", "cherry")

tuple

x = range(6)

range

x = {"name" : "John", "age" : 36}

dict

x = {"apple", "banana", "cherry"}

set

x = frozenset({"apple", "banana", "cherry"})

frozenset

x = True

bool

x = b"Hello"

bytes

x = bytearray(5)

bytearray

x = memoryview(bytes(5))

memoryview

x = None

NoneType

عملگر های پایتون

عملگر ها (Operators) همانطور که از اسمشان پیداست، برای انجام عملیات مختلف روی داده ها استفاده می شوند. برای مثال عملگر + برای جمع دو عدد می تواند استفاده شود:

print(10 + 5)

عملگر های حسابی (Arithmetic)

برای انجام عملیات پرکاربرد ریاضی روی اعداد استفاده می شوند:

عملگر

نام

مثال

+

جمع

x + y

-

تفریق

x - y

*

ضرب

x * y

/

تقسیم

x / y

%

Modulus (باقی‌مانده)

x % y

**

توان

x ** y

//

تقسیم صحیح

x // y

عملگر های تخصیص مقدار (Assignment)

برای تعیین مقدار متغیر ها استفاده می شوند:

عملگر

مثال

همان

=

x = 5

x = 5

+=

x += 3

x = x + 3

-=

x -= 3

x = x - 3

*=

x *= 3

x = x * 3

/=

x /= 3

x = x / 3

%=

x %= 3

x = x % 3

//=

x //= 3

x = x // 3

**=

x **= 3

x = x ** 3

&=

x &= 3

x = x & 3

|=

x |= 3

x = x | 3

^=

x ^= 3

x = x ^ 3

>>=

x >>= 3

x = x >> 3

<<=

x <<= 3

x = x << 3

عملگر های مقایسه (Comparison)

برای مقایسه دو مقدار استفاده می شوند:

عملگر

نام

مثال

==

مساوی

x == y

!=

نامساوی

x != y

>

بزرگتر از

x > y

<

کوچکتر از

x < y

>=

بزرگتر یا مساوی

x >= y

<=

کوچکتر یا مساوی

x <= y

عملگر های منطقی (Logical)

معمولا برای ترکیب عملیات مقایسه ای استفاده می شوند:

عملگر

توضیح

مثال

and

هر دو طرف برقرار باشد

x < 5 and x < 10

or

فقط یک طرف برقرار باشد

x < 5 or x < 4

not

معکوس نتیجه

not(x < 5 and x < 10)

عملگر های هویت (Identity)

برای مقایسه آبجکت ها استفاده می شوند. نه تنها مقدار دو آبجکت، بلکه اینکه دقیقا همان آبجکت در حافظه هستند یا نه:

عملگر

توضیح

مثال

is 

هر دو متغیر یک آبجکت هستند

x is y

is not

هر کدام آبجکت متفاوتی است

x is not y

شرط if…else پایتون

با استفاده از شرط if در پایتون می توانیم کد موردنظر مان را تنها درصورت برقرار بودن یک شرط اجرا کنیم. در مثال زیر کد print فقط درصورتی اجرا خواهد شد که متغیر b بزرگتر از متغیر a باشد (که هست):

a = 33
b = 200
if b > a:
  print("b is greater than a")

به فاصله یا فرورفتگی قبل از print توجه کنید، این فرورفتگی مشخص می کند که این کد داخل if قرار دارد و فقط درصورت برقرار بودن شرط if اجرا می شود.

شرط if می تواند شامل بخش های elif و else هم باشد تا اولین شرطی که برقرار است، کد های مربوط به آن اجرا شود:

a = 10
b = 10
if b > a:
  print("b is greater than a")
elif a == b:
  print("a and b are equal")
else:
  print("a is greater than b")

در مثال بالا شرط a == b برقرار است و فقط کد مربوط به آن اجرا خواهد شد. اگر هیچ یک از شرط ها برقرار نبود، کد مربوط به else اجرا می شد. همچنین می توانیم بیش از یک elif بنویسیم و اولین شرطی که برقرار باشد اجرا می شود.

از عملگر های منطقی مثل and هم می توانیم برای ترکیب شرط ها استفاده کنیم:

a = 200
b = 33
c = 500
if a > b and c > a:
  print("Both conditions are True")

چند مثال دیگر را بررسی می کنیم:

نسخه if..else کوتاه شده:

a = 2
b = 330
print("A") if a > b else print("B")

یک if داخل یک if دیگر:

x = 41

if x > 10:
  print("Above ten,")
  if x > 20:
    print("and also above 20!")
  else:
    print("but not above 20.")

حلقه های while و for پایتون

با استفاده از یک حلقه می توانیم یک بلوک کد را به صورت مکرر تا زمانی که شرط موردنظر ما برقرار باشد، اجرا کنیم. برای مثال یک حلقه while در پایتون به این صورت نوشته می شود:

i = 1
while i < 6:
  print(i)
  i += 1

در مثال بالا اگر متغیر i را در هر حلقه افزایش نمی دادیم i += 1، یک حلقه بی نهایت ایجاد می شد و داخل حلقه گیر می افتادیم.

برای خروج از یک حلقه، حتی با وجود اینکه شرط آن همچنان True باشد، می توانیم از عبارت break استفاده کنیم:

i = 1
while i < 6:
  print(i)
  if i == 3:
    break
  i += 1

برای متوقف کردن حلقه فعلی و ادامه از حلقه بعدی نیز می توانیم از عبارت continue استفاده کنیم:

i = 0
while i < 6:
  i += 1
  if i == 3:
    continue
  print(i)

در مثال بالا کد print برای i مقدار 3 اجرا نخواهد شد.

حلقه for هم مثل while است ولی بجای شرط، یک مقدار قابل تکرار (iterable) دریافت می کند و به ازای تمام اعضای آن، کد موردنظر ما را اجرا می کند. مثلا لیست ها iterable هستند:

fruits = ["apple", "banana", "cherry"]
for x in fruits:
  print(x)

عبارت های break و continue هم مثل حلقه while می توانند داخل حلقه for هم استفاده شوند. چند مثال دیگر:

حلقه روی تمام حروف یک رشته:

for x in "banana":
  print(x)

حلقه تو در تو:

adj = ["red", "big", "tasty"]
fruits = ["apple", "banana", "cherry"]

for x in adj:
  for y in fruits:
    print(x, y)

توابع پایتون

یک تابع یا Function در واقع یک بلوک کد است که فقط زمانی اجرا می شود که فراخوانی شود. می تواند چند ورودی دریافت کند و یک خروجی برگرداند.

نحوه تعریف و فراخوانی (اجرا) یک تابع ساده به صورت زیر است:

def my_function():
  print("Hello from a function")

my_function()

اگر بخواهیم تابع ورودی داشته باشد به این صورت می توانیم تعریف و فراخوانی کنیم:

def my_function(fname, lname):
  print(fname + " " + lname)

my_function("Reza", "Akbari")
my_function("Test", "Testi")
my_function("Aaa", "Bbb")

به صورت پیشفرض تابع هر تعداد ورودی که دارد، دقیقا با همان تعداد ورودی هم باید فراخوانی شود، اگر بخواهیم تعداد ورودی ها دلخواه باشد می توانیم کاراکتر * را قبل نام ورودی بنویسیم:

def my_function(*kids):
  print("The youngest child is " + kids[2])

my_function("Emil", "Tobias", "Linus")

هنگام فراخوانی یک تابع، می توانیم اسم ورودی را دقیقا مشخص کنیم، در این حالت ترتیب ورودی ها اهمیتی نخواهد داشت:

def my_function(child3, child2, child1):
  print("The youngest child is " + child3)

my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")

ورودی ها می توانند اختیاری هم باشند، برای اینکار می توانیم یک مقدار پیشفرض به ورودی موردنظر بدهیم. در این صورت می توانیم تابع را بدون آن ورودی هم اجرا کنیم:

def my_function(country = "Iran"):
  print("I am from " + country)

my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")

و در آخر یک تابع می تواند خروجی هم داشته باشد که با کلیدواژه return مشخص می شود:

def my_function(x, y):
  if x > y:
    return "x is greater than y"
  else:
    return "x is not greater than y"

print(my_function(3, 2))
print(my_function(5, 6))
print(my_function(9, 9))

در پست زیر مثال های بیشتری از توابع پایتون را می توانید ببینید:

توابع لامبدا

در پایتون یک تابع لامبدا (Lambda) به نوعی تابع کوتاه گفته می شود که به فرمت lambda arguments : expression تعریف باشد. توابع لامبدا می توانند چندین ورودی با فقط یک اکسپرشن (خط کد) داشته باشند. مثال:

x = lambda a, b : a * b
print(x(5, 6))

برای درک بهتر یک تابع لامبدا و کاربرد آن، به مثال زیر توجه کنید:

def make(n):
  return lambda a : a * n

doubler = make(2)
tripler = make(3)

print(doubler(11))
print(tripler(11))

در این مثال تابع make خودش یک تابع بر اساس ورودی اش بر می گرداند. به این صورت می توانیم توابع دلخواه بر اساس مقدار ورودی بسازیم و استفاده کنیم.

کلاس و آبجکت در پایتون

پایتون یک زبان برنامه نویسی شی گرا (Object Oriented Programming Language) است. تقریبا همه چیز در پایتون آبجکت (شی) محسوب می شود و دارای ویژگی است. کلاس هم در واقع نقشه و ساختار یک آبجکت را تعریف می کند.

یک کلاس و آبجکت مربوط به آن را به صورت زیر می توانیم تعریف کنیم:

class MyCar:
  brand = "BMW"

car = MyCar()
print(car.brand)

در مثال فوق brand ویژگی آبجکت محسوب می شود. یک کلاس می تواند یک تابع خاص به اسم __init__ داشته باشد که لحظه ساخت آبجکت آن کلاس، این فراخوانی می شود. اولین پارامتر (ورودی) این تابع، همیشه خود آبجکت است و پارامتر های بیشتری هم می تواند داشته باشد:

class MyCar:
  def __init__(self, brand):
    self.brand = brand

car1 = MyCar("Benz")
car2 = MyCar("BMW")

print(car1.brand)
print(car2.brand)

برای کلاس ها می توانیم متد (تابع) های بیشتری هم تعریف کنیم:

class MyCar:
  def __init__(self, brand):
    self.brand = brand

  def updateBrand(self, newBrand):
    self.brand = newBrand

  def printBrand(self):
    print(self.brand)

car1 = MyCar("Benz")
car1.printBrand()

car1.updateBrand("BMW")
car1.printBrand()

car1.brand = "IKCO"
car1.printBrand()

در برنامه نویسی شی گرا، مفهومی به نام ارث بری یا Inheritance وجود دارد که به وسیله آن کلاس ها می توانند ویژگی های کلاس های دیگر را به ارث ببرند:

class Human:
  def __init__(me, name):
    me.name = name

class Programmer(Human):
  def __init__(me, name, skills):
    super().__init__(name)
    me.skills = skills

dev1 = Programmer("Reza", ["python", "html", "css"])
print(dev1.name)
print(dev1.skills)

در مثال بالا خط super().__init__(name) داخل کلاس Programmer در واقع تابع __init__ کلاس بالاتر یعنی Human را اجرا می کند، که به وسیله آن مقدار ویژگی name اختصاص داده می شود.

دامنه یا اسکوپ پایتون

به یک متغیر فقط داخل دامنه و حوزه ای که داخل آن تعریف شده است می توان دسترسی پیدا کرد. برای مثال کد زیر خطا می دهد چون نمی توانیم به متغیر x خارج از تابع دسترسی پیدا کنیم:

def myfunc():
  x = 300

myfunc()
print(x) # ⚠ خطا می دهد

البته می توانیم به متغیر های تعریف شده در اسکوپ (حوزه) های بالاتر دسترسی پیدا کنیم:

x = 300
def myfunc():
  y = 200
  def myinnerfunc():
    print(x)
    print(y)
  myinnerfunc()

myfunc()

اگر یک متغیر با همان اسم هم در اسکوپ محلی و هم در اسکوپ بالاتر تعریف شده باشد، اولویت با اسکوپ محلی است:

x = 300

def myfunc():
  x = 200
  print(x)

myfunc()

print(x)

ماژول های پایتون

می توانید ماژول (Module) ها را کتابخانه های کد تصور کنید، کدها و توابعی که از فایل های دیگر وارد برنامه خودمان می کنیم. برای وارد کردن یک ماژول از کلیدواژه import می توانیم استفاده کنیم. به عنوان مثال یک فایل با اسم speak.py (داخل فولدر فعلی) ایجاد کرده و داخل آن یک تابع مثل زیر قرار دهید:

def sayHi(name):
  print("Hello " + name)

حالا داخل example.py یا هر فایل تمرینی که داشتید، به این صورت می توانید فایل speak.py را اضافه کرده و تابع داخل آن را فراخوانی کنید:

import speak

speak.sayHi("Reza")

به متغیر ها، کلاس ها و کدهای دیگر این ماژول هم به همین صورت می توانیم دسترسی داشته باشیم. اگر فقط بخواهیم یک متغیر، کلاس یا تابع را از کل ماژول وارد کنیم، می توانیم به این صورت بنویسم:

from speak import sayHi

sayHi("Reza")

همچنین تعدادی ماژول داخلی در خود پایتون وجود دارد مثل math یا datetime که برای کار های مختلف می توانیم استفاده کنیم. مثل:

import datetime

x = datetime.date.today()
print(x)

کار با PIP در پایتون

همانطور که متوجه شدید ماژول ها این امکان را به ما می دهند که از کدهای قبلا نوشته شده، داخل کد خودمان استفاده کنیم. به همه فایل های موردنیاز یک ماژول، بسته یا Package گفته می شود. PIP نیز یک مدیر بسته (Package Manager) برای پایتون است که به وسیله آن می توانیم کتابخانه های مختلف را دانلود و داخل کد خودمان وارد نماییم.

برای اینکه بفهمیم PIP روی سیستم ما نصب شده یا نه (به صورت پیشفرض همراه با پایتون نصب می شود) می توانیم دستور زیر را اجرا کنیم:

pip --version

اگر نسخه PIP نمایش داده شود یعنی نصب شده است در غیر این صورت می توانید از آدرس https://pypi.org/project/pip آن را دانلود و نصب کنید.

برای نصب یک پکیج از طریق PIP می توانیم دستور pip install را اجرا کنیم، مثلا:

pip install jdatetime

با اجرای دستور بالا، ماژول jdatetime که یک کتابخانه برای کار با تاریخ شمسی است، برای ما دانلود و نصب می شود و به این صورت می توانیم از آن استفاده کنیم:

import jdatetime

x = jdatetime.date.today()
print(x)

برای حذف یک پکیج نیز می توانیم از دستور pip uninstall مثل بالا استفاده کنیم.

مدیریت خطا در پایتون

مدیریت خطا در پایتون با استفاده از بلوک try…except انجام می شود. به مثال زیر توجه کنید:

try:
  print(x)
except:
  print("An exception occurred")

کد بالا چون x تعریف نشده است، خطا می دهد ولی چون داخل try قرار دارد، با بروز خطا، بخش except اجرا می شود. یک بلوک try علاوه بر except می تواند شامل بخش های else و finally هم باشد. بخش else درصورتی اجرا می شود که هیچ خطایی رخ ندهد و بخش finally در هر صورت چه خطایی رخ دهد و چه ندهد، اجرا می شود.

همچنین داخل except می توانیم نوع خطا را نیز دریافت کنیم. مثال:

try:
  print(x)
except Exception as e:
  print("Error: " + str(e))
else:
  print("No Error")
finally:
  print("Finished")

اگر بخواهیم یک خطا به وسیله خودمان رخ بدهد می توانیم از کلیدواژه raise استفاده کنیم:

x = -1

if x < 0:
  raise Exception("Sorry, x can not be less than zero")

ترفند های کوچک ولی کاربردی

ترفندهای پایتون

  • لیست متد ها و ویژگی های یک آبجکت، ماژول و … می توانید از dir() استفاده کنید:

class Human:
  name = "Reza"
  job = "Developer"
  def startCoding():
    print("coding...")

man = Human()

print(dir(man))
  • برای دریافت ایندکس آیتم ها موقع حلقه for می توانید از enumerate() استفاده کنید:

data = ["apple", "banana", "orange", "cherry"]

for i, name in enumerate(data):
  print(i, name)
  • با تکنیک List Comprehension می توانید یک لیست را به سرعت فیلتر کنید:

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x for x in fruits if "a" in x]

print(newlist)

ترکیب این روش با dir() جهت فیلتر ویژگی های عمومی:

class Human:
  name = "Reza"
  job = "Developer"
  def startCoding():
    print("coding...")

man = Human()

print([ x for x in dir(man) if not x.startswith("_") ])
  • برای تعویض سریع مقادیر دو متغیر با یکدیگر می توانید از این تکنیک استفاده کنید:

x, y = 10, 20
print(x, y)
 
x, y = y, x
print(x, y)
  • با استفاده از sorted() می توانید لیست ها را به سرعت مرتب سازی کنید:

data = [3, 5, 1, 10, 9]

print(sorted(data, reverse=True))

برای مرتب سازی لیست های پیچیده تر می توانید از لامبدا استفاده کنید:

data = [{"name": "Max", "age": 6}, 
        {"name": "Lisa", "age": 20}, 
        {"name": "Ben", "age": 9}
        ]
sorted_data = sorted(data, key=lambda x: x["age"])

print(sorted_data)
  • برای حذف آیتم های تکراری از لیست می توانید آن را تبدیل به ست کنید چون یک ست نمی تواند آیتم های تکراری داشته باشد:

my_list = [1,2,3,4,5,6,7,7,7]

print(set(my_list))
  • برای ترکیب سریع متغیر ها با رشته ها می توانید از فرمت f-Strings استفاده کنید:

i = 10
print(f"{i} squared is {i*i}")
  • برای ترکیب دو دیکشنری با یکدیگر می توانید از ** استفاده کنید:

d1 = {'name': 'Alex', 'age': 25}
d2 = {'name': 'Reza', 'city': 'New York'}
merged_dict = {**d1, **d2}
print(merged_dict)

قدم بعدی و ادامه

تا این بخش از سری آموزشی پایتون، با نحوه نصب و راه اندازی محیط توسعه و همچنین با مفاهیم اولیه برنامه نویسی زبان پایتون آشنا شدیم. در ادامه این سری یک پروژه کامل با استفاده از پایتون برنامه نویسی و آپلود خواهیم کرد. اگر نظر یا پیشنهادی داشتید حتما با ما در میان بگذارید.


کامنت ها