آموزش پایتون
2 subscribers
3 photos
35 links
Download Telegram
تابع split() در ماژول re پایتون رشته را بر اساس الگوی مطابقت به لیستی تبدیل می‌کند.

برای مثال:

import re

txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)

➡️
['The', 'rain', 'in', 'Spain']



این دستور متن را بر اساس فواصل در یک لیست قرار می‌دهد.

می‌توان تعداد جداسازی‌ها را با پارامتر maxsplit کنترل کرد:

import re

txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)

➡️
['The', 'rain in Spain']

این دستور متن را فقط بر اساس اولین فاصله به دو زیررشته تقسیم می‌کند
تابع sub() در ماژول re پایتون، موارد مطابقت را با رشته مورد نظر جایگزین می‌کند.

برای مثال:
import re

txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)

➡️
The9rain9in9Spain


این دستور همه فواصل را با عدد 9 جایگزین می‌کند.

تعداد جایگزینی‌ها را می‌توان با آرگومان count مشخص کرد:

import re

txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)

➡️
The9rain9in Spain


این دستور تنها دو مورد اول را جایگزین می‌کند.
یک "شیء مطابق" (Match Object) یک شیء است که حاوی اطلاعاتی درباره جستجو و نتیجه آن است.

توجه: اگر مطابقتی وجود نداشته باشد، به جای شیء مطابق، مقدار None برگردانده خواهد شد.

برای مثال، جستجویی را انجام دهید که یک شیء مطابق برگرداند:

import re

txt = "The rain in Spain"
x = re.search("ai", txt)
print(x)

➡️
<re.Match object; span=(5, 7), match='ai'>


شیء مطابق دارای ویژگی‌ها و روش‌هایی است که برای بازیابی اطلاعات درباره جستجو و نتیجه آن استفاده می‌شود:

- .span()
یک tuple حاوی موقعیت شروع و پایان مطابقت را برمی‌گرداند.
- .string
رشته‌ای که به تابع منتقل شده را برمی‌گرداند.
- .group()
قسمتی از رشته که مطابقت داشته را برمی‌گرداند.

برای مثال، موقعیت (شروع و پایان) اولین وقوع مطابقت را چاپ کنید.

عبارت منظم به دنبال هر کلمه‌ای است که با "S" حروف بزرگ شروع می‌شود:

import re

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())

➡️
(12, 17)


برای مثال، رشته‌ای که به تابع منتقل شده را چاپ کنید:
import re

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)

➡️
The rain in Spain


برای مثال، قسمتی از رشته که مطابقت داشته را چاپ کنید.

عبارت منظم به دنبال هر کلمه‌ای است که با "S" حروف بزرگ شروع می‌شود:
import re

txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())

➡️
Spain


توجه: اگر مطابقتی وجود نداشته باشد، به جای شیء مطابق، مقدار None برگردانده خواهد شد.
پایپ (PIP) چیست؟

پایپ (PIP) مدیریت بسته های پایتون است. بسته ها شامل تمام فایل هایی هستند که برای اضافه کردن یک ماژول (کتابخانه کد) به پروژه پایتون نیاز دارید.

ماژول ها کتابخانه های کد هستند که می توانید در پروژه خود استفاده کنید.

تشخیص نصب شدن پایپ

برای تشخیص اینکه آیا پایپ نصب شده است یا خیر، می توانید به مسیر اسکریپت های پایتون بروید و دستور زیر را وارد کنید:

مثال:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip --version

که نسخه پایپ را چک می کند.
نصب PIP

اگر پایپ روی سیستم شما نصب نیست، می‌توانید آن را از این صفحه دانلود و نصب کنید: https://pypi.org/project/pip/

دانلود ماژول

دانلود کردن یک بسته بسیار ساده است. باید خط فرمان را باز کنید و به پایپ بگویید که بسته مورد نظر را دانلود کند.

به مسیر اسکریپت‌های پایتون بروید و دستور زیر را وارد کنید:

مثال:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip install camelcase

با این دستور، بسته‌ای به نام "camelcase" دانلود و نصب می‌شود. این اولین بسته‌ای است که شما دانلود و نصب کرده‌اید.
استفاده از بسته

پس از نصب بسته، آماده استفاده از آن هستید. برای استفاده از بسته "camelcase" باید آن را در پروژه خود وارد کنید:

مثال:
وارد کردن و استفاده از بسته "camelcase":

import camelcase

c = camelcase.CamelCase()

txt = "lorem ipsum dolor sit amet"

print(c.hump(txt))

➡️
Lorem Ipsum Dolor Sit Amet


برای پیدا کردن بسته‌های بیشتر می‌توانید به آدرس https://pypi.org/ مراجعه کنید.


حذف بسته

برای حذف بسته از دستور uninstall استفاده کنید:

مثال:

حذف بسته به نام "camelcase":

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip uninstall camelcase

پی اچ پی برای تایید حذف بسته سوال می‌کند.



لیست بسته‌های نصب شده

برای لیست گرفتن از بسته‌های نصب شده در سیستم، از دستور pip list استفاده می‌کنیم.

مثال:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>pip list

این دستور فهرستی از تمام بسته‌های نصب شده در سیستم را به همراه نسخه‌ آن‌ها نمایش می‌دهد.

Package Version
-----------------------
camelcase 0.2
mysql-connector 2.1.6
pip 18.1
pymongo 3.6.1
setuptools 39.0.1

با استفاده از این دستور می‌توان لیست کامل بسته‌های نصب شده را مشاهده کرد.
در پایتون، بلاک try-except برای مدیریت استثناء‌ها (خطاها) استفاده می‌شود.

▫️ بلاک try: این بلاک به شما امکان می‌دهد یک بلاک کد را برای بررسی خطاها تست کنید. در این بلاک، قسمتی از کد که ممکن است خطا ایجاد کند قرار می‌گیرد.

▫️ بلاک except: این بلاک به شما امکان می‌دهد خطاها را مدیریت کنید. وقتی یک خطا در بلاک try رخ می‌دهد، کنترل به بلاک except منتقل می‌شود و کد موجود در این بلاک اجرا می‌شود.

▫️ بلاک else: این بلاک به شما امکان می‌دهد کدی را اجرا کنید که در صورت عدم وجود خطا در بلاک try قرار دارد. به عبارت دیگر، اگر هیچ خطایی در بلاک try رخ ندهد، بلاک else اجرا می‌شود.

▫️ بلاک finally: این بلاک به شما امکان می‌دهد کدی را اجرا کنید که باید در هر صورت، بعد از اجرای بلاک try و except، اجرا شود. بدون توجه به وجود یا عدم وجود خطا، بلاک finally همیشه اجرا می‌شود.

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

ما می‌توانیم استثناها را با استفاده از دستور try-except هندل کنیم:


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


خروجی:


An exception occurred


در این مثال، دستور print(x) در بلوک try یک استثنا ایجاد می‌کند چون x تعریف نشده است. در نتیجه بلوک except اجرا می‌شود و پیام "An exception occurred" چاپ می‌کند.

با استفاده از دستور try-except ما می‌توانیم استثناها را بگیریم و رفتار مناسبی برای هندل کردن آنها تعریف کنیم تا برنامه متوقف نشود.
بدون بلوک try-except، دستور print(x) مستقیماً یک خطا ایجاد می‌کند چون x تعریف نشده است:


print(x)


خروجی:


Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined


همانطور که مشاهده می‌کنید، یک خطای NameError رخ می‌دهد چون متغیر x تعریف نشده است. این خطا باعث می‌شود برنامه متوقف شود.

اما اگر همین دستور را در بلوک try قرار دهیم، بلوک except اجرا می‌شود و پیام خطا را چاپ می‌کند. بنابراین ادامه برنامه اجرا می‌شود:


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


خروجی:


An exception occurred


با استفاده از try-except می‌توانیم خطاها را بگیریم و از خراب شدن برنامه جلوگیری کنیم.
می‌توانیم بلاک‌های except متعددی تعریف کنیم تا برای انواع خطاها، کدهای متفاوتی اجرا شود.

به عنوان مثال:


try:
print(x)
except NameError:
print("Variable x is not defined")
except:
print("Something else went wrong")


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

- اگر خطای NameError رخ دهد، پیام "Variable x is not defined" چاپ می‌شود

- برای سایر خطاها، پیام "Something else went wrong" چاپ می‌شود

خروجی:


Variable x is not defined


در اینجا چون خطای NameError رخ داده، بلاک اول except اجرا می‌شود.

به این ترتیب می‌توانیم برای انواع خطاها، کدهای جداگانه‌ای اجرا کنیم تا رفتار برنامه مناسب‌تر باشد.
می‌توانیم از کلمه‌ی else برای تعریف بلوکی از کد استفاده کنیم که اگر در بلوک try خطایی رخ نداد، اجرا شود


try:
print("Hello")
except:
print("Something went wrong")
else:
print("Nothing went wrong")


خروجی:


Hello
Nothing went wrong


همچنین می‌توانیم از بلوک finally استفاده کنیم که صرف‌نظر از بروز خطا در بلوک try، همیشه اجرا می‌شود


try:
print(x)
except:
print("Something went wrong")
finally:
print("The 'try except' is finished")


خروجی:


Something went wrong
The 'try except' is finished


استفاده از finally مفید است برای بستن منابع و پاکسازی بعد از اتمام بلوک try-except.

مثلا در این مثال، فایل بعد از نوشتن یا خطا بسته می‌شود:


try:
f = open("demofile.txt")
try:
f.write("Lorum Ipsum")
except:
print("Something went wrong when writing to the file")
finally:
f.close()
except:
print("Something went wrong when opening the file")


با استفاده از else و finally می‌توانیم کنترل بیشتری روی برنامه در بلوک‌های try-except داشته باشیم.
می‌توانیم با استفاده از کلمه‌ی raise یک استثنا ایجاد کنیم


x = -1

if x < 0:
raise Exception("Sorry, no numbers below zero")


خروجی:


Exception: Sorry, no numbers below zero


کلمه‌ی raise باعث می‌شود یک استثنا ایجاد شود و برنامه متوقف شود.

همچنین می‌توانیم نوع خطا و متن آن را مشخص کنیم:


x = "hello"

if not type(x) is int:
raise TypeError("Only integers are allowed")



خروجی:


TypeError: Only integers are allowed


با استفاده از raise می‌توانیم در شرایط خاصی استثناهایی را ایجاد کنیم تا رفتار برنامه کنترل شود. این کار باعث می‌شود کد پاک‌تر و خطاها بهتر هندل شوند.
می‌توانیم از کاربر ورودی دریافت کنیم.

روش دریافت ورودی در پایتون 3.6 با 2.7 متفاوت است.

پایتون 3.6 از متد input() استفاده می‌کند.

پایتون 2.7 از متد raw_input() استفاده می‌کند.

مثال زیر ابتدا نام کاربری را درخواست می‌کند، سپس نام کاربری وارد شده را چاپ می‌کند:

پایتون 3.6
username = input("Enter username:")
print("Username is: " + username)

خروجی
Enter username:Alice
Username is: Alice

پایتون 2.7
username = raw_input("Enter username:")
print("Username is: " + username)

خروجی
Enter username:Bob
Username is: Bob

پایتون زمانی که به تابع input() می‌رسد متوقف می‌شود تا کاربر ورودی بدهد، سپس پس از دریافت ورودی اجرا را ادامه می‌دهد.
برای اطمینان از نمایش درست یک رشته، می‌توانیم خروجی را با استفاده از متد format() فرمت کنیم.


فرمت کردن رشته با format()

متد format() به ما اجازه می‌دهد بخش‌های مشخصی از یک رشته را فرمت کنیم.

گاهی اوقات بخش‌هایی از متن وجود دارد که کنترل آن در دست ما نیست، مثلا از پایگاه داده یا ورودی کاربر آمده باشند.

برای کنترل این مقادیر، می‌توان نگهدارنده های مکان (آکولاد {}) در متن اضافه کرد و مقادیر را از طریق متد format() عبور داد:

مثال

price = 49
txt = "The price is {} dollars"
print(txt.format(price))


خروجی:
The price is 49 dollars


می‌توان پارامترهایی درون آکولادها مشخص کرد تا نحوه تبدیل مقدار را تعیین کنیم:

مثال
price = 49
txt = "The price is {:.2f} dollars"
print(txt.format(price))

خروجی:
The price is 49.00 dollars
مقادیر چندگانه

اگر بخواهیم از مقادیر بیشتری استفاده کنیم، کافی است مقادیر بیشتری را به متد format() بدهیم:

print(txt.format(price, itemno, count))

و نگهدارنده مکان بیشتری اضافه کنیم:

مثال

quantity = 3
itemno = 567
price = 49
myorder = "I want {} pieces of item number {} for {:.2f} dollars."
print(myorder.format(quantity, itemno, price))


خروجی:
I want 3 pieces of item number 567 for 49.00 dollars.


پس با اضافه کردن مقادیر بیشتر به متد format() و آکولاد بیشتر، می‌توان مقادیر متعددی را در رشته جایگذاری کرد.
می‌توان از شماره‌های اندیس (عدد داخل آکولاد {0}) برای اطمینان از قرار گرفتن مقادیر در جای درست استفاده کرد

مثال
quantity = 3
itemno = 567
price = 49
myorder = "I want {0} pieces of item number {1} for {2:.2f} dollars."
print(myorder.format(quantity, itemno, price))


خروجی:
I want 3 pieces of item number 567 for 49.00 dollars.


همچنین اگر بخواهیم به یک مقدار بیش از یکبار ارجاع دهیم، از شماره اندیس استفاده می‌کنیم:

مثال
age = 36
name = "John"
txt = "His name is {1}. {1} is {0} years old."
print(txt.format(age, name))


خروجی:
His name is John. John is 36 years old.

پس با شماره‌های اندیس می‌توانیم مطمئن شویم که مقادیر در جای درست قرار می‌گیرند.