اولین گام بسوی دنیای پایتون

سلام  ، من دانشجوی رشته ای تی هستم که نزدیک به ۲-۳ سالی هست که با پایتون آشنا شدم و علاقمندی شدید نسبت به اون پیدا کردم با توجه به اینکه هیچ منبع فارسی زبانی برای آموزش اون بطور حرفه ای پیدا نکردم تصمیم گرفتم خودم دست بکار بشم و از هرجایی می تونم اطلاعات کسب کنم اولین گامی که برداشتم ترجمه اسناد استاندارد درون خود بسته زبان بود که کمک بسیار زیادی کرد. حالا تصمیم گرفتم که تجربیاتم رو در اختیار دوستان دیگر بگذارم و همچجین فضایی برای یادگیری و تعامل بیشتر خودم با دیگر فعالین دنیای پایتون فراهم بیارم. تصمیم دارم تا اصول پایه ای پایتون تقریبا در ۱۰ فصل بیان کنم و سپس بسراغ بحث های پیشرفته تر برم. امیدوارم که از کیفیت مطالب رضایت داشته باشید .


 

 فصل۱

توضیح در پایتون با کاراکتر # آغاز می شود و تا پایان همان خط معتبر است

این اولین توضیح است#

این دومین توضیح است #spam =1

 string = “#این یک توضیح نیست چون یک رشته است”

استفاده از پایتون به عنوان ماشین حساب

اعداد:

 

از علامت های + – * و / مانند اکثر زبانها می توان به عنوان  عملگر های اصلی ماشین حساب استفاده کرد از پرانتز هم برای درست کردن یه گروه از عملوندها وعملگر ها استفاده کرد

>>> 2+2
۴
>>> # This is a comment
... ۲+۲
۴
>>> 2+2  # and a comment on the same line as code
۴
>>> (50-5*6)/4
۵٫۰
>>> 8/5 # یه عدد اعشاری بر می گردونه
۱٫۶۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱

>>> این عملگر یه عدد صحیح بر می گردونه  #    ۷//۳
۲
>>> 7//-3

 از علامت (“=”) برای مقدار دهی به یک متغیر استفاده می شه

>>> width = 20
>>> height = 5*9
>>> width * height
۹۰۰

یه مقدار ممکن به چند متغیر مقدار دهی شده باشه

>>> x = y = z = 0        # ایکس و وای و زد برابر صفر هستند
>>> x
۰
>>> y
۰
>>> z
۰

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

>>> # تلاش میکنه به متغیری دسترسی پیدا کنه که تعریف نشده
… n
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
NameError: name ‘n’ is not defined

 از ممیز شناور پشتیبانی کامل وجود دارد به این صورت که عملگر ها با استفاده از انواع ترکیبی از عمل وندها آنها را به ممیز شناور تبدیل می کنند

>>> 3 * 3.75 / 1.5
۷٫۵
>>> 7.0 / 2
۳٫۵

همچنین از اعداد مرکب نیز پشتیبانی کامل  وجود دارد اعداد موهمی با یک پسوند j یا J نوشته می شوند اعداد مرکب با یک جزء از عدد های اعشاری غیر صفر مثل ( real +imag j)  نوشته می شوند  و یا می توان آن ها را با تابع   زیر  درست کرد

complex( real, imag).

 

>>> 1j * 1J
(-۱+۰j)
>>> 1j * complex(0, 1)
(-۱+۰j)
>>> 3+1j*3
(۳+۳j)
>>> (3+1j)*3
(۹+۳j)
>>> (1+2j)/(1+1j)
(۱٫۵+۰٫۵j)

اعداد مرکب همیشه نماینده ۲ نوع از اعداد ممیز شناور هستند قسمت اعشاری و جزء موهمی- برای استخراج کردن این بخش ها از عدد مرکب از توابع زیر استفاده می کنیم

 complex.real و complex.imag.

>>> a=1.5+0.5j
>>> a.real
۱٫۵
>>> a.imag
۰٫۵

توابع تبدیل به ممیز سناور و عدد صحیح float(), int()j برای اعداد مرکب کار نمی کنند راه درستی برای تبدیل کردن عدد مرکب به عدد اعشاری وجود ندارد .اما استفاده از توابع زیر پیشنهاد می گردد :

برای به دست آوردن بزرگی عدد مرکب   abs(complex)

 complex.real برای به دست اوردن بخش اعشاری

>>> a=3.0+4.0j
>>> float(a)
Traceback (most recent call last):
File “<stdin>”, line 1, in ?
TypeError: can’t convert complex to float; use abs(z)

>>> a.real
۳٫۰
>>> a.imag
۴٫۰
>>> abs(a)  #    مربع (a.real**2 + a.imag**2)     
۵٫۰
>>>

نکته : a.real *2 یعنی قسمت اعشاری  ضرب در ۲ و  a.real**2 یعنی قسمت اعشاری بتوان ۲

رشته ها

در کنار اعداد- پایتون می تونه همچینین رشته هارو دستکاری کنه که به چندین روش میتونه بیان شه – رشته ها می تونند میان یه جفت  یا ۲ جفت علامت Apostrophe اپستروف قرار بگیرند.

>>> ‘iraj jelodari’
‘iraj jelodari’
>>> ‘doesn\’t’            دقت کنین
doesnt
>>> “doesn’t”
“doesn’t”
>>> ‘”Yes,” he said.’
‘”Yes,” he said.’
>>> “\”Yes,\” he said.”       دقت کنین
‘”Yes,” he said.
>>> ‘”Isn\’t,” she said.’
‘”Isn\’t,” she said.’

 رشته های زیر برابر هستند

‘ iraj’  = =  ” iraj “

تابعprint()h یه خروجی خواندنی را چاپ میکنه

رشته های حرفی  می تونن در چندین خط بیان بشند برای این کار چند روش وجود دارد   با یه بک اسلیش همچون  آخرین کاراکتر روی خط فعلی می شه خط بعدی رو ادامه خط فعلی تعریف کرد

hello = “This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
Note that whitespace at the beginning of the line is\
significant.”

print (hello)

در بالا یک رشته تقریبا طولانی را داریم چندین خط متن همانطوری که توی زبان سی تمایل دارین . توجه کنین که فضای سفید آغاز خط ها مهم هستن

رشته ها میتونن با کاراکتر + به هم دیگه متصل بشن یا با علامت * تکرار بشن

>>> word = 'Help' + 'A'
>>> word
'HelpA'
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA>'
>>> 'iraj'*5
'irajirajirajirajiraj'
>>> '*'*40
'****************************************'

دو رشته نردیک به هم اتوماتیک به هم پیوند داده می شوند اولین خط از مثال بالایی میتونه به صورت word = 'Help' 'A' نیز نوشته بشه این طوری فقط با دوتا رشته کار میکنه

>>> 'str' 'ing'                   # <- این ممکنه
'string'
>>> 'str'.strip() + 'ing'   # <- این هم ممکنه - دات استریپ یه تابعه .. که بعدن باهاش آشنا میشیم
'string'
>>> 'str'.strip() 'ing'    # <- ولی این نا معتبره
 File "<stdin>", line 1, in ? 'str'.strip() 'ing' ^ SyntaxError: invalid syntax

رشته ها می تونن زیر نویس دار ( ایندکس دار) بشن . مثل زبان سی . اولین کاراکتر رشته دارای ایندکس ۰ می باشد کاراکتر مجزای دیگه ای وجود نداره یه کاراکتر به سادگی یه رشته به طول یک است زیر رشته ها می تونن با دو بخش شدن ایندکس و قرار دادن یه علامت(:) بین دو ایندکس مشخص بشن

>>> word[4]
'A'
>>> word[0:2]
'He'
>>> word[2:4]
'lp'

هر کدام ار این بخش ها ( ایندکس اول و دوم) مقدار پیش فرض مفیدی دارند اولین ایندکس که از قلم افتاده مقدار پیش فرض ۰ دارد دومین ایندکس طول پیش رونده رشته را مشخص می کند

>>> word[:2]    # دو کاراکتر اول-از صفر به طول دو
'He'
>>> word[2:]    # همه به جز دو کاراکتر اول- از کاراکتر دوم تا آخر
'lpA'

 بر عکس زبان سی- رشته های پایتون نمی تونن تغییر کنن نشان گذاری کردن در یه اندکسی که در رشته قرار دارد خطا می دهد

>>> word[0] = 'x'
Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: 'str' object does not support item assignment
>>> word[:1] = 'Splat'
Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: 'str' object does not support slice assignment

اگرچه خلق یه رشته جدید با روش ترکیب کردن محتویات هم آسان است و هم کارآمد

>>> 'x' + word[1:]
'xelpA'
>>> 'Splat' + word[4]
'SplatA'

اینجا هم یه روش یکسان و مفید وجود داره : s[:i] + s[i:]

 

>>> word[:2] + word[2:]
'HelpA'
>>> word[:3] + word[3:]
'HelpA'

 یه ایندکس بیش از اندازه بزرگ که ایندکس اول قرار داده بشه و یا اینکه ایندکس دوم از ایندکس اول کوچکتر باشه یه رشته خالی رو بر می گردونه

>>> word[1:100]
'elpA'
>>> word[10:]
''
>>> word[2:1]
''

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

>>> word[-1]    # آخرین کاراکتر را بر می گرداند
'A'
>>> word[-2]     #یه کاراکتر مونده به آخر را بر می گرادند
'p'
>>> word[-2:]    # دو کاراکتر آخر را چاپ می کند
'pA'
>>> word[:-2]    #همه کاراکتر ها بجز دو کاراکتر آخر را بر می گرداند
'Hel'

 اما نکته اینکه ۰- واقعن مثل ۰ می باشد بنابراین اون از راست محاسبه نمیشه

>>> word[-0]    # (since -0 equals 0)
'H'

ایندکس های اول  منفی خارج از دسترس بی انتها هستند و رشته رو کامل چاپ می کنند اما این رو برای ایندکس های تکی امتحان نکن خطا می دهد

Out-of-range negative slice indices are truncated, but don’t try this for single-element (non-slice) indices:

>>> word[-100:]
'HelpA'
>>> word[-10]    # error
Traceback (most recent call last): File "<stdin>", line 1, in ? IndexError: string index out of range

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

>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
۳۴

یونی کد یه مزیتی که داره اینه که یه نظمی برای تمام کارکتر ها ی به کاربرده شده در اسکریپت های به کار رفته در متن های جدید و قدیمی فراهم می کنه . سابقن فقط ۲۵۶ ترتیب ممکن برای کاراکترهای اسکریپتی وجود داشت متن ها به طوری محدود به یه صفحه کد بودند که با آن ترتیب ها کارکتر های اسکریپتی به هم متصل شده بودند این نوع هدایت کردن خیلی گیج کننده بود مخصوصا با بین المللی شدن نرم افزار( شکل معمولی I18N ——–> ‘I’ +18 Characters + ‘n’f) . یونی کد این مسائل رو با تعریف یه صفحه کد حل کرد

اگر شما کاراکتر های به خصوصی رو داخل یه رشته خواستید می تونین ازPython Unicode-Escape encoding استفاده کنین مثال زیر چطوریش رو نشون میده

>>> 'Hello\u0020World !'
'Hello World !'

رشته اصلی   u0020\    اشاره می کند یه قرار دادن کاراکتر Unicode  (استانداردی برای کاراکتر ها) در جایی ازجمله که کد   x0020  (فضای خالی-اسپیس)  قرار داده شده است

کاراکتر های دیگر نیز د به همان ترتیبی که در یونی کد هستند تفسیر می شوند اگر شما  جمله هایی از رشته های استاندارد لاتین که در بیشتر کشور های غربی مورد استفاده قرار می گیرد دارید باید یونی کد مناسبی را پیدا کنید که ۲۵۶ کاراکتر اولیه اش با ۲۵۶ کاراکتر استاندارد لاتین مشابه باشد

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

برای تبدیل کردن یک رشته به رشته ای از بایت های رمز گذاری شده (یونی کد شده) از متد  encode()  استفاده میکنم یه این صورت که رشته ای ر ا که  می خواهیم رمز گذاری کنیم قبل از متد می نویسیم و درون پرانتز از اسم  یونی کد های شناخته شده استفاده می کنیم

>>> "Äpfel".encode('utf-8')
b'\xc3\x84pfel'

لیست ها

پایتون تعداد  انواع داده های مرکب را می داند بیشتر چند بعدی ها  (ماتریس ها) به صورت لیست نوشته می شوند که اعداد به وسیله کما از هم مجزا می شوند و بین ۲ براکت  قرار می گیرند اشیای یه لیست لازم نیست حنمن هم نوع باشند

>>> a = ['spam', 'eggs', 100, 1234]
>>> a
['spam', 'eggs', 100, 1234]

مثل ایندکس رشته ها – ایندکس لیست ها نیز از ۰ شروع میشه و لیست ها هم می تونند بخش بخش بشن و به هم متصل بشن و…

>>> a[0]
'spam'
>>> a[3]
۱۲۳۴
>>> a[-2]
۱۰۰
>>> a[1:-1]
['eggs', 100]
>>> a[:2] + ['bacon', 2*2]
['spam', 'eggs', 'bacon', 4]
>>> 3*a[:3] + ['Boo!']
['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boo!']

بر خلاف رشته ها که تغییر ناپذیر هستن برای لیست ها این ممکنه یعنی تک تک اشیا می تونن تغییر کنن

>>> a
['spam', 'eggs', 100, 1234]
>>> a[2] = a[2] + 23
>>> a
['spam', 'eggs', 123, 1234]

جایگزینی بخش ها هم ممکنه و این می تونه اندازه لیست رو عوض کنه یا به کلی لیست رو پاک کنه

>>> # Replace some items:
... a[0:2] = [1, 12]
>>> a
[۱, ۱۲, ۱۲۳, ۱۲۳۴]
>>># Remove some:
... a[0:2] = []
>>> a
[۱۲۳, ۱۲۳۴]
>>> # Insert some:
... a[1:1] = ['bletch', 'xyzzy']
>>> a
[۱۲۳, 'bletch', 'xyzzy', 1234]
>>> # Insert (a copy of) itself at the beginning
>>> a[:0] = a
>>> a
[۱۲۳, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]
>>> # Clear the list: replace all items with an empty list
>>> a[:] = []
>>> a
[]

تابع   len()همچنین طول لیست را بر میگرداند

 

>>> a = ['a', 'b', 'c', 'd']
>>> len(a)
۴

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

>>> q = [2, 3]
>>> p = [1, q, 4]
>>> len(p)
۳
>>> p[1] # اشیای درون کیو را چاپ میکنه
[۲, ۳]
>>> p[1][0] # انم که واضحه
۲

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

>>> p[1].append('xtra')

شی  ‘extrsa’ را به شی دوم لیست پی که همان لیست کیو است اضافه می کنه #

>>> p
[۱, [۲, ۳, 'xtra'], 4]
>>> q
[۲, ۳, 'xtra']

نکته ای که توی این مثاله اینه که : شی در واقع به یک شی مشابه اشاره میکنند که بعدن ما لیست کیو را چاپ کردیم    p[1]  و  q

اولین گام بسوی برنامه نویس

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

>>> # Fibonacci series:
... a, b = 0, 1     # به متغیر آ مقدار ۰ و به بی مقدار ۱ می دهد
>>> while b < 10:
...     print(b)
...     a, b = b, a+b  # مجموع این ۲ عنصر عنصر سوم را به دست می دهد 
...
۱
۱
۲
۳
۵
۸

 این مثال ما را با چند ویژگی جدید آشنا کرد اولین خط از برنامه (توضیحات نه) شامل یه عملگر انتصاب برای متغیر هاست که هم زمان آ و بی را مقدار های ۰ و ۱ می دهد آخرین خط برنامه نیز دوباره تکرار شد

حلقه while نیز به اندازه ای تکرار می شه  که شرط(اینجا بی کوچکتر از ده ) درست باشه پایتون هم مثل زبان سی هر عدد غیر صفر ارزش درست و صفر ارزش نادرست دارد شرط می تونه یه رشته یا لیست از اعداد باشه در حقیقت هر رشته ای می تونه باشه. ومورد دیگه علائم کوکتر بزرگتر مساوی هاست که مثل زبان سی هستند :

< (less than)و > (greater than)و == (equal to)و<= (less than or equal to)و >= (greater than or equal to) و != (not equal to).

تابع پرینت ارزش عبارتی که به آن داده شده است را چاپ می کند رشته های چاپ شده بدون علامت رشته ها هستند و فضا های خالی بین اشیای رشته جای گذاری شده اند بنابر این شما می تونید اشیا را فرم دهی کنید مثل :

>>> i = 256*256
>>> print('The value of i is', i)
The value of i is 65536

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

>>> a, b = 0, 1
>>> while b < 1000:
...     print(b, end=' ') # جمله های فیبوناچی را پشت هم تو یه خط جای گذاری میکنه
...     a, b = b, a+b
...
۱ ۱ ۲ ۳ ۵ ۸ ۱۳ ۲۱ ۳۴ ۵۵ ۸۹ ۱۴۴ ۲۳۳ ۳۷۷ ۶۱۰ ۹۸۷

اگر از end استفاده نکنیم : خروجی بصورت:

>>> while b < 1000:
	print(b)
	a, b = b, a+b

۱
۱
۲
۳
۵
۸
۱۳
۲۱
۳۴
۵۵
۸۹
۱۴۴
۲۳۳
۳۷۷
۶۱۰
۹۸۷

در پایتون ۲ تنها با یک ویرگول پس از تابع پرینت:

while b < 1000:
	print(b),
	a, b = b, a+b
 پایان فصل اول

8 دیدگاه برای «اولین گام بسوی دنیای پایتون»

    1. با درود بر شما دوست عزیزم. سعی می کنم مطالب کامل و پربار باشه بعضی جا هم خودم مثال های بیشتر و نکته هایی که توی تجربه های شخصی کسب کردم رو هم قرار می دم 🙂

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *