در دنیای برنامه نویسی فقط چاپ کردن سلام دنیا کافی نیست، این طور نیست؟ کارهای بیشتری را میخواهید انجام دهید، مانند گرفتن ورودی و دستکاری کد و خیلی از کارهای دیگر. پایتون این قابلیت را دارد که از ثابتها و متغییرها استفاده کنیم. همچنین با بعضی از مفاهیم دیگر در این فصل اشنا خواهیم شد.
نظرات
هر متنی که سمت راستاش علامت هشتگ #
باشد، عمدتا به عنوان یاداشت برای خواننده از کد برنامه است.
برای مثال :
print('hello world') # Note that print is a function
<div dir=rtl>
(این تابع برای چاپ است)
یا :
# Note that print is a function
print('hello world')
<div dir=rtl>
(این تابع برای چاپ است)
کد به شما می گوید، چگونهوچطوری، نظرات یا توضیحات باید به شما بگوید ، چرا
این یک ابزار بسیار مفید است برای خواندن کدهای که نوشتهاید. دیگران نیز به راحتی درک میکنند، این برنامه چه می کند. بخاطر داشته باشید که فردی بعد از شش ماه قطعا از برنامهی که خود نوشته است سر در نخواهد آورد.
یک مثال از ثابتهای لفظی مثل یک شماره مانند ، 5
، 1.23
، یا یک رشته مانند 'This is a string'
یا "It's a string!"
ثابتهای لفظی هستند.
چرا لفظ صدایش می کنیم؟ به خاطر انکه لفظی است بخاطر انکه ارزش معنای واقعی ان کلمه استفاده میکینم(شما ارزش ان را به طور لفظی استفاده میکنید). شمارهی 2
همیشه به خودی خود نشان دهنده دو است و هیچ چیز دیگر - این یک مقدار _ ثابت _ است و ارزش ان را نمی توان تغییر داد. از این رو همهی اینها به عنوان ثابتهای لفظی تلقی میشوند.
شمارهها عمدتا دو نوع است صحیح (integer) و اعشاری (float).
برای مثال عدد 2
یک عدد صحیح است که یک عدد کامل(منظور از کامل ، کامل ریاضی نیست) است.
برای مثال نمونهی از اعداد ممیزی یا همان اعشاری 3.23
و 52.3E-4
هستند. نماد E
قدرت ۱۰ را نشان می دهد توی این مورد ، 52.3E-4
معنی این 52.3 * 10^-4^
می شود.
** برنامه نویسان باترجبه توجه داشته باشند **
نوعی
long
متمایز دیگری وجود ندارد . نوعint
که میتواند یک عدد صیحیح , با هر اندازهی باشد.
یک رشته _ دنبالهی از حروف (توالی از حروف) است ( کاراکترها (characters)) .رشتهها اساسا از گروهی از حروف یا کلمات ساده هستند.
من تقریبا مطئن هستم که احتمالا برنامههای که شما در پایتون می نویسید ، از رشتهها ، استفاده خواهید کرد ، پس بنابراین بهتر است به جزئیات بخش زیر توجه کنید.
چگونگی استفاده رشته در پایتون اینجاست:
رشته ها را با استفاده از تک نقل قول میتوانید نمایش دهید. مانند : 'Quote me on this'
تمامی فضای سفید یا همان فاصله (space) ، فاصله و (Tabs) همان طور که هست نمایش داده خواهد شد.
رشته ها در دو تا نقل قول همانند تک نقل قول کار می کنند برای مثال : "What's your name?"
.
برای رشتههای چند خطی از سه نقل قول - ("""
یا '''
) میتوانید استفاده کنید. از تک و دو نقل قول میتوانید ازدانه وبه طور دلخواه در سه نقل قول استفاده کنید برای مثال :
'''This is a multi-line string. This is the first line.
This is the second line.
"What's your name?," I asked.
He said "Bond, James Bond."
'''
این بدان معنا است وقتی یک رشته را ایجاد میکنید، امکان تغییر دادن ان را ندارید. شاید این به نظر یک کار اشتباه به نظر برسد ولی این طور نیست.
شاید تفکر کنید این موضوع دست پاگیر باشد ولی اینطور نیست. این محدویت محسوب نمیشود.
تذکر برای برنامه نویسی سی و سی پلاس پلاس
در پایتون هیچ نوع دادهی
char
متمایز دیگری وجود ندارد. واقعا نیاز نیست و من مطئن هستم که شما دربارهاش از من سوال نمی کنید و کمبود ان را احساس نخواهید کرد.
تذکر برای برنامه نویسی پریل/پی اچ پی
بخاطرداشته باشید که تک نقل قول و دونقل قول در رشته ها یکسان هستند و به هیچ وجه متفاوت نیستند.
گاهی اوقات ممکن است, ساخت یک رشته از اطلاعات دیگر را بخواهیم. در این حالت از ()format
استفاده میکنیم.
خطهای زیر را در همچین فایلی str_format.py
ذخیره کنید.
age = 20
name = 'Swaroop'
print('{0} was {1} years old when he wrote this book'.format(name, age))
print('Why is {0} playing with that python?'.format(name))
خروجی :
$ python str_format.py
Swaroop was 20 years old when he wrote this book
Why is Swaroop playing with that python?
چگونه و چطوری
با روش format
یک رشته میتواند از مشخصات خاص استفاده کند. در روش format
ارگومان های مشخص شده تعویض میشوند با مشخصات از قبل تعیین شده.
این نشان {0}
مربوط به متغییر name
است, که همان ارگومان اول در روش format میباشد، همان طور که در بالا مشاهد کردید. پس خیلی ساده نشانهی دوم {1}
مربوط به متغییر age
است ،که همان ارگومان دوم در روش format می باشد. توجه داشته باشید که , پایتون شمارش را از صفر 0 شروع میکند, که اولین موقعیت شاخص از صفر و دومی یک است وبه همین ترتیب ادامه دارد.
توجه داشته باشید که با استفاده از الحاق رشته میتوانید به همان نتیجه برسید :
name + ' is ' + str(age) + ' years old'
ولی در روش بالا امکان خطا خیلی است، بجای تبدیل صریح رشته، در روش format
تبدیل رشته به طور خودکار انجام میشود. زمانیکه از روش format استفاده میکنیم میتوانیم بدون نیاز به متغیر و یا بالعکس، پیام را تغییر بدهیم.
توجه داشته باشید که اعداد اختیاری هستند و شما می توانید این طوری بنویسید:
age = 20
name = 'Swaroop'
print('{} was {} years old when he wrote this book'.format(name, age))
print('Why is {} playing with that python?'.format(name))
که دقیقا همان خروجی را میدهد، مانند برنامهی قبلی.
پایتون چیکار می کند ، روش format
این است که ارزش را به جای مشخصات جایگزین میکند.
مشخصات بیشتر و دقیق وجود دارد مانند:
# decimal (.) precision of 3 for float '0.333'
print('{0:.3f}'.format(1.0/3))
# fill with underscores (_) with the text centered
# (^) to 11 width '___hello___'
print('{0:_^11}'.format('hello'))
# keyword-based 'Swaroop wrote A Byte of Python'
print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
خروجی:
0.333
___hello___
Swaroop wrote A Byte of Python
ا از انجا که بحث ما در مورد قالب بندی است.
توجه داشته باشید که print
همیشه با یک کاراکتر نامرئی( (n\
) " (خط جدید) new line" ) جمله را به پایان میرساند. به طوری که صدا زدن مکرر print
همه را در یک خط جداگانه چاپ
میکند. برای جلوگیری از کاراکتر newline (خط جدید) در چاپ ، شما میتوانید با مشخصهend
از این کار جلو گیری کنید.
print('a', end='')
print('b', end='')
خروجی :
ab
یا شما میتوایند end
با فضایه خالی (space) استفاده کنید:
print('a', end=' ')
print('b', end=' ')
print('c')
خروجی:
a b c
فرض کنید میخواهید یک رشته داشته باشید که در ان تک نقل قول ('
) داشته باشید , چگونه این رشته را مشخص میکنید ؟
به عنوان مثال رشتهی به این شکل 'What's your name'
دارید. شما نمیتواند به این روش گفته شده عمل کنید. زیرا پایتون نمیتوانید محل شروع وپایان رشته را تشخیص بدهد. پس باید مشخص کنید, این فقط یک نقل قول است و انتهای رشته را نمایش نمیدهد. این کار را به وسیلهی چیزی که به نام توالیهای گریز مینامند میتوانید انجام دهید. برای این کار با استفاده از بکاسلش قبل از نقل قول '\
میتوایند این کار را انجام دهید. حالا میتوانید این را 'What\'s your name'
به عنوان یک رشته بنویسید.
روشی دیگر برای رشتههای که داری نقلقول هستند وجود دارد. به طور مشابه، میخواهید از رشتهها متوالی استفاده کنید که در ان نقل وجود دارد، که با دونقل قول مانند این مثال "What's your name"
میتوانید این کار را انجام دهید. همچنین برای مشخص کردن یک بکاسلش باید از \\
رشته متوالی استفاده کنید.
اگر بخواهیم رشتهی دوخطه را مشخص کنیم (دارای چندین خط) چه کار کنیم؟ یک روش این است که از سه نقل قول استفاده کنیم، همان طور که قبلا گفتیم. یا اینکه با استفاده از توالیهای گریز ( استفاده از کاراکتر - n\
نشان دهنده خط جدید است) این کار را انجام دهیم.
برای مثال:
python
'This is the first line\nThis is the second line'
یکی دیگر ازتوالیهای گریز مفید t\
است (به اندازی یک TAB فاصله می دهد). رشتههای متوالی دیگری وجود دارد من سعی کردم فقط مفیدترین انها را ذکر کنیم.
به یاد داشته باشید که در یک رشته با یک بکاسلش در انتهای خط به معنای ان است که رشته ادامه دارد ولی در خروجی خط جدیدی نمایش نمیدهد. برای مثال:
"This is the first sentence. \
This is the second sentence."
این معادل :
"This is the first sentence. This is the second sentence."
اگر شما نیاز به مشخص کردن برخی از رشتههای که دران هیچ پردازش خاصی صورت (توالیهای گریز) نمیگیرد. برای این کار نیاز به استفاده از رشتههای raw میباشید. کافی است به اول رشته پیشوند r
یا R
را اضافه کنید. برای مثال:
r"Newlines are indicated by \n"
** یاداشت برای کاربران عبارتهای با نظم وقاعده (Regular Expression) **
همیشه از raw strings در عبارتهای با نظم قاعده استفاده کنید. برای مثال بازگشت منبع (backreferences) را میتوان به عنوان
'\\1'
یاr'\1'
در نظر گرفت.
فقط استفاده از الفاظ ثابت ممکن است, بعد از مدتی خسته کننده شود و ما نیاز به برخی راههای دیگر برای ذخیرهسازی اطلاعات و دستکاری ان داریم. در اینجا است که بحث متغیرها به گوش میاید. متغیرها دقیقا همان چیزی است که از اسم پیدا است - ارزش متغیر میتواند متفاوت باشد یعنی شما میتوایند هر چیزی را در متغیر ذخیره کنید. متغیرها قسمتی ازحافظهی کامپیوتر شما هستند که میتوانید در ان اطلاعات را ذخیره کنید. برخلاف الفاظ ثابت شما نیاز به دسترسی به این متغیرها را دارید این کار با دادن نام به انها امکان پذیرخواهد شد.
متغیرها مثالی از شناسهها هستند. شناسهها نامی برای مشخص کردن چیزی هستند. قوانین وجود دارد برای نام گذاری متغیرها:
-
حروف اول متغیر با از الفبا باشند. (حروف بزرگ و کوچک اسکی (ASCII) یا یونیکد (Unicode)) ویا تاکید (
_
) (منظور همان خط زیرین است). -
دیگر قسمت میتواند از حروف دیگر باشند. (حروف بزرگ و کوچک اسکی (ASCII) یا یونیکد (Unicode)) ویا تاکید (
_
) (منظور همان خط زیرین است) و یا از ارقام (0-9) باشند. -
متغیرها به حروف بزگ و کوچک حساس هستند. برای مثال:
myname
وmyName
_ یکسان_ نیستند. همچنین این موضوع برای یک حروف هم همین طور است , حرف کوچکn
با حرف بزرگN
فرق میکند. -
برای مثال: متغیرهای معتبر اینها هستند
i
,name_2_3
. متغیرهای غیر معتبر اینها هستند2things
,این فاصله است
,my-name
و>a1b2_c3
پس این نکات را در نظر داشته باشید.
متغیرها میتوانند مقادیر مختلف و انواع داده را در خود نگه داری کنند. اساس انواع ها همان رشتهها و اعداد هستند که الان در مورد ان بحث می کنیم. در فصل بعدی ما خواهیم دید که چگونه نوع دادهی خود را ایجاد کنیم و به چگونگی استفاده از ان میپردازیم.
به یاد داشته باشید که پایتون به هر چیزی که اشاره میکند در یک برنامه به عنوان یک شی استفاده میشود. این به این معنا است ، به طور کلی. به جای گفتن "the something"'، we say "the object" (_چیزی ، ما میگوییم _ شی است).
تذکر برای کاربران برنامه نویسی شی گرایی
پایتون به شدت شی گرایی است و این شامل تمامی اعداد و رشتهها وتوابع هستند.
حالا چگونگی استفاده از متغیرها همراه با لفظهای ثابت را ببینید. مثالهای زیررا ذخیره و برنامه را اجرا کنید.
از این پس روش استاندار ذخیره سازی برنامه و اجرای ان در پایتون به شرح زیر است.
۱. PyCharm را باز کنید.
۲. ایجاد فایل با نام ذکر شده .
۳. نوع کد برناهی داده شده در مثالها
۴. کیک راست کنید و اجرای فایل فعلی
نکته: هر زمانکه یک خط از دستور ارگومانها را دارید، کلیک کنید بر روی Run
-> Edit Configurations
و نوع ارگومان را در قسمت Script parameters:
مشخص کنید و بر روی دکمهی OK
کلیک کنید.
۱. ویراستار خود را بازکنید.
۲. برنامهی داده شده را مانند مثالها بنویسید.
۳. فایل با نام داده شده ذخیره کنید.
۴. برای اجرای دستور و مترجم برنامه از دستور python program.py
استفاده کنید.
برنامهی زیر را بنویسید و اجرا کنید:
# Filename : var.py
i = 5
print(i)
i = i + 1
print(i)
s = '''This is a multi-line string.
This is the second line.'''
print(s)
خروجی:
5
6
This is a multi-line string.
This is the second line.
چگونه کار می کند
این طور این برنامه کار میکند. در گام اول مقدار ثابت 5
را در متغیر i
اختصاص می دهیم. این خط را با نام بیانیه صدا میزنیم ان هم به این دلیل چیزی که باید انجام شود. در اینجا ما متغیر i
را به ارزش 5
اتصال دادیم. گام بعدی مقدار i
را با استفاده ازprint
چاپ میکنیم. جای تعجبی ندارد که مقدار متغیر را در صفحه نمایش نشان میدهد.
حال با اضافه کردن 1
به متغیر i
و ذخیره ان , جای تعجبی نیست که با مقدار 6
در صفحه نمایش روبه رو خواهیم شد.
شما با اختصاص دادن الفاظ ثابت به یک متغیر+s+ ان را ذخیره و چاپ میکنید.
نکته برای برنامه نویسان ایستا (static)
متغیرها تنها با اختصاص دادن ان یه یک ارزش مورد استفاده قرار میگیرد. هیچ نوع تعریف داده لازم نیست.
خطهای فیزیکی چیزی است که شما میبینید زمانی که شما برنامه مینویسید. خطهای منطقی چیزی است که پایتون میبیند یک بیانه است. پایتون به طور ضمنی فرض میکند که هر خط فیزیکی مربوط به خط منطقی است.
برای مثال از خط منطقی بیانهی شبیه print 'hello world'
اگر این روی یک خط باشد (چزی که در ویرایشگر خود میبینید), سپس همچنین این مشابه خط فیزیکی است.
ضمنا, پایتون توسعه میکند از تک بیانه در هر خط استفاده شود که باعث میشود کدهایتان خواناتر شود.
اگر شما میخواهید بیشتر از یک خط منطقی روی یک تک خط فیزیکی مشخص کنید برای این کار شما باید به صراحت با استفاده از نقطه و ویرگول (;
) مشخص کنید. که نشان دهنده پایان یک خط منطقی است. برای مثال:
i = 5
print(i)
به طور موثر
i = 5;
print(i);
مشابهاش
i = 5; print(i);
دیگر ان
i = 5; print(i)
ولی من توصه میکنم که شما طبق این چارچوب نوشتن یک خط منطقی روی هر خط فیزیکی این کار را انجام دهید. رازش اینجاست که شما هیچ وقت نباید ازویلگول استفاده کنید. در حقیقت من هیچ وقت یا هرگز از ویلگول در برنامهی پایتون استفاده نمیکنم.
در حقیقت من هیچ وقت یا هرگز از ویلگول در برنامهی پایتون استفاده نمیکنم.
در این موقعیت یک راهحل است جایی که مفهوم واقعا مفید بود را مشخص میکند. اگر شما یک کد طولانی یا بزرگ دارید، میتوانید روی چند خط فیزیکی جدا کنید با استفاده از (backslash) این کار را انجام دهید.این روش به نام _الحاق صریح خط _ مینامند.
s = 'This is a string. \
This continues the string.'
print(s)
خروجی:
This is a string. This continues the string.
مشابهاش,
i = \
5
این همان است
i = 5
گاهی اوقات این واضح است که نیاز به استفاده از backslash نداریم .در این مورد خاص خط منطقی زمانی که پرانتز دارد، با براکت یا اکولاد استفاده میکنیم(برای پایان دادن استفاده نمیکنیم). این موضوع با نام خط پیوستن ضمنی مینامند. شما میتوانید این موضوع را در عمل ببینید وقتی در برنامههایمان از کارکترهای list استفاده میکنیم(در فصول بعدی).
فاصلهها در پایتون مهم است. درواقع فضای خالی در ابتدی خطها مهم است. این به نام فرورفتگیها شناخته میشود. فضای سفید (فضاها و زبانهها)در اغاز خط منطقی برای تعیین سطح دندانه از خط منطقی، که به نوبه خود برای تعیین گروهبندی بخشها استفاده میشود.
این بدان معنی است که بخشها باید تورفتگیهای همانند همان داشته باشند. هرکدام از این اپروتورها را به نام بلوک میشناسند. ما خواهیم دید که بلوکها چه نقش مهم دارند(در فصول بعدی).
این چیز را، باید شما باید درک کنید. تورفتگی نادرست باعث بروز خطا میشود برای مثال:
i = 5
# Error below! Notice a single space at the start of the line
print('Value is', i)
print('I repeat, the value is', i)
وقتی شما این را اجرا میکنید، شما خطای زیر را دریافت میکنید:
File "whitespace.py", line 3
print('Value is', i)
^
IndentationError: unexpected indent
فضای اولی که در ابتدای خط دوم وجود دارد، خطای نمایش داده شده که پایتون به ما میگوید، خطا برنامه نامعتبر است، یعنی برنامه به درستی نوشته نشده است. این بدان معنا است که شما نمیتوانید برنامه را اجرا کنید(پس خودسرانه بلوکها و بخشها را نمیتوان به صورت دلخواه نوشت(البته به جز بلوک پبیشفرض که همه را با هم استفاده میکنیم، این یک استثنا است)). دربارهی این موضوع به طور دقیق در فصل کنترلگردش بحث خواهیم کرد، که چه زمانهای میتوانید ازبلوکهای جدید استفاده کنید.
چگونگی تورفتگیها
استفاده از چهار دندانه (یا همان چهار بار فاصله زدن) این توسعه رسمی پایتون است. اگر از ویرایشگر خوب استفاده کنید این کار را ویریشگر به جای شما انجام میدهد. مطمئن باشید که تعداد فاصلهها با هم یکی باشند. در غیر این صورت برنامه شما کار نمیکند یا خطای غیره منتظره میدهد.
نکات برای برنامههای استاتیک
پایتون همیشه از تورفتگیها در بلوک استفاده میکند وهیچ وقت از پرانتز استفاده نخواهد کرد. اجرا کنید
from __future__ import braces
برای یادگیری بیشتر.
حال که ما از بسیاری جزئیات گذشتیم، ما میتوانیم به قسمتهای جالبتر برسیم، مانند کنترل جریان حرکتها در بخشها. حتما با این نکات اشنا خواهیم شد،با چیزهایی که در این فصل خواندهاید.