python farsi
python farsi
تألیف:
دکتر جواد وحیدی (عضو هیات علمی دانشگاه علم و صنعت ایران)
@PythonForever
فنآورینوین
@PythonForever
:وحیدی ،جواد- 6900 ، سرشناسه
تالیفجوادوحیدی،رمضانعباسنژادورزی.
نامهنویسیپایتون/
آموزشگامبهگامبر عنوان و نام پدیدآور
6931 71/79QA /پ30و9 رده بندی کنگره
www.fanavarienovin.net
بابل،کدپستی38178-84337تلفن011-48867778:
فنآورینوین
@PythonForever
شابک378-122-7070-27-7 :
نشانی ناشر :بابل ،چهارراه نواب ،کاظمبیگی ،جنب مسجد منصور کاظمبیگی ،طبقه همکف
طراح جلد :کانون آگهی و تبلیغات آبان (احمد فرجی)
تلفکس: تهران ،خ اردیبهشت ،نبش وحید نظری ،پالک 6۳0 11۳226۳۳-11۳22002
@PythonForever
فهرست مطالب
فصل اول :آشنایی با زبان پایتون
.6 – 6مقدمهای بر زبان برنامه نویسی پایتون 3 ......................................................................................................................
.6-0مقایسهی زبان برنامهنویسی پایتون با سایر زبانهای برنامهنویسی 66 ................................................................................
.6-9از پایتون برای چه اپلیکیشنهایی میتوان استفاده کرد؟6۳ .....................................................................................................
.6-۳آموزش زبانهای برنامهنویسی60 ..........................................................................................................................................
.6-۳-6سطرها61 ..........................................................................................................................................................................
.6-۳-0بالک بندی 67 ..................................................................................................................................................................
.6-۳-9دستورات67
.6-۳-۳شناسهها68 ........................................................................................................................................................................
.6-۳-0متغیرها 63 ........................................................................................................................................................................
.6-۳-1انتساب چندگانه 02 ..........................................................................................................................................................
.6-0عملگرها 00 ...........................................................................................................................................................................
.6-0-6عملگرهای محاسباتی 00 ..................................................................................................................................................
.6-0-0عملگرهای رابطهای (مقایسهای) 09 ..........................................................................................................................
.6-0-9عملگرهای ترکیبی 09 .......................................................................................................................................................
.6-0-۳عملگرهای منطقی 09 .......................................................................................................................................................
.6-0-0عملگرهای بیتی0۳ ............................................................................................................................................................
.6-0-1اولویت عملگرها 01 ................................................................................................................................................
.6-1انواع دادهها(اشیای آماده) 07 .................................................................................................................................................
.6-1-6انواع دادههای عددی 07 ...................................................................................................................................................
.6-1-0رشته 90 ............................................................................................................................................................................
.6-7تبدیل نوع99 .........................................................................................................................................................................
.6-8تابع )(9۳. ..................................................................................................................................................................... print
.6-3تایپ ،ذخیره و اجرای برنامه در پایتون 90 .............................................................................................................................
.6-62خواندن داده 98 ..................................................................................................................................................................
@PythonForever
.6-66مسائل حلشده۳7 ................................................................................................................................................................
فصل دوم :ساختار تصمیم و تکرار
.0-6ساختارهای تصمیمگیری 0۳ ..................................................................................................................................................
.0-0ساختارهای تکرار12 ....................................................................................................................................................
.0-0-6دستور 12 ......................................................................................................................................................... for
.0-0-0دستور 11 ............................................................................................................................................................... while
.0-9دستور 18 ................................................................................................................................................................. break
.0-۳دستور 13 ............................................................................................................................................................. continue
.0-0مسائل حل شده 70 ......................................................................................................................................................
فصل سوم :توابع ..................... ................................ ................................ ................................
.9 – 6انواع توابع 88 ............................................................................................................................................................
.9 – 0توابعی که برنامه نویس مینویسد 88 ..........................................................................................................................
.9 – 0 – 6نوشتن تابع 88 .....................................................................................................................................................
.9 – 0 – 0فراخوانی تابع 32 .................................................................................................................................................
.9 – 9ارسال پارامترها 3۳ .....................................................................................................................................................
.9- 9 – 6ارسال پارامتر از طریق مقدار 3۳ ............................................................................................................................
.9 – ۳آرگومانهای تابع33 ...........................................................................................................................................................
.9 – ۳ – 6آرگومانهای اجباری33 .....................................................................................................................................
.9 – ۳ – 0آرگومانهای کلمه کلیدی 33 ............................................................................................................................
.9 – ۳ – 9آرگومانهای با مقدار پیش فرض 622 .................................................................................................................
.9 – ۳ – ۳تعریف و فراخوانی توابع با تعداد پارامترهای متغیر620 ..................................................................................................
.9 – 0توابع بی نام62۳ ....................................................................................................................................................................
.9 – 1طول عمر و محدود حضور متغیرها 621 ................................................................................................................................
@PythonForever
.9-7مسائل حل شده660 ................................................................................................................................................................
فصل چهارم :آرایهها و بسته ............................................................................................ NUMPY
.۳ – 6آرایههای یکبعدی 690 .............................................................................................................................................
.۳-6-6تعریف آرایه 690 ...............................................................................................................................................................
.۳-6-0دسترسی به عناصر آرایه 691 .............................................................................................................................................
.۳-6-9مقداردهی به عناصر آرایه 697 ..................................................................................................................................
.۳ – 6-۳نمایش عناصر آرایه 698 .........................................................................................................................................
.۳ – 0تولید اعداد تصادفی 693 .............................................................................................................................................
.۳ – 9مرتبسازی تعویضی 6۳0 ...........................................................................................................................................
.۳ – ۳جستوجوی مقدار در آرایه 6۳۳ ................................................................................................................................
.۳ – ۳ – 6جستوجوی خطی (ترتیبی) 6۳۳ .........................................................................................................................
.۳ – ۳ – 0جستوجوی دودویی 6۳۳ ...................................................................................................................................
.۳-0بسته 6۳8 ..................................................................................................................................................................NumPy
.۳-0-6آرایههای 6۳3 ......................................................................................................................................................NumPy
.۳-0-0ریاضیات در 611 ................................................................................................................................................. Numpy
.۳-1آرایههای دوبعدی (ماتریس) 613 ..................................................................................................................................
.۳-1-6تعریف آرایه دوبعدی 672 ........................................................................................................................................
.۳ – 1-0مقداردهی به عناصر آرایه دوبعدی 672 .................................................................................................................
.۳-1-9نمایش مقادیر عناصر آرایه دوبعدی 676 ..................................................................................................................
.۳-1-۳کار با ماتریس از طریق 676 ..................................................................................................................................numpy
.۳-1-0جبر خطی در 671 .................................................................................................................................................numpy
.۳-7مسائل حل شده682 ................................................................................................................................................................
فصل پنجم :رشتهها ................... ................................ ................................ ................................
@PythonForever
.0-6عملگرهای رشتهای630 ..........................................................................................................................................................
.0-0متدهای کار بر روی رشته 022 ................................................................................................................................................
.0-9کاربرد سه کتیشن (""")020 ..................................................................................................................................................
.0-۳نمایش کاراکتر \020 ..............................................................................................................................................................
.0-0رشتههای یونیکد 028 ...................................................................................................................................................
.0-1مسائل حل شده 023 .......................................................................................................................................................
فصل ششم :لیستها ،چندتاییها ،دیکشنریها و مجموعهها
.1-6لیستها 001 .....................................................................................................................................................................
.1-6-6عملگرهای کار بر روی لیست007 ...............................................................................................................................
.1-6-0متدهای کار با لیست 098 ............................................................................................................................................
.1-0تاپل (چندتایی) 0۳2 .........................................................................................................................................................
.1-9دیکشنری0۳9 ..................................................................................................................................................................
.1-9-6عملیات بر روی دیکشنری 0۳1 ...................................................................................................................................
.1-9-0کاربرد forبرای پیمایش دیکشنری006 .......................................................................................................................
.1-۳مجموعهها 001 ................................................................................................................................................................
.1-۳-6عملگرهای مجموعه 007 .............................................................................................................................................
.1-۳-0متدهای مجموعه 016 ..................................................................................................................................................
.1-۳-9نوع 011 ....................................................................................................................................................frozenset
.1-0مسائل حل شده 018 .........................................................................................................................................................
فصل هفتم :کالسها و وراثت ........................................ ................................ ................................
.7 – 6کالسها 079 ..............................................................................................................................................................
.7 – 6 – 6تعریف کالسها07۳ .....................................................................................................................................................
.7 – 6 – 0نمونهسازی کالسها070 ...............................................................................................................................................
@PythonForever
.7 – 0اعضای کالس 070 .....................................................................................................................................................
.7 – 0-6دسترسی به اعضای کالس 071 ...............................................................................................................................
.7 – 0-0انواع اعضای کالس 071 ........................................................................................................................................
.7 – 9سازندهها و مخربها 078 .....................................................................................................................................................
.7 – ۳وراثت و چندریختی081 ......................................................................................................................................................
.7 – 0وراثت087 ...........................................................................................................................................................................
.7 – 1تشخیص کالس پایه و مشتق083 ..........................................................................................................................................
.7 –7تعریف کالس مشتق083 .......................................................................................................................................................
.7 – 8سازندهها و مخربها در کالسهای مشتق 032 .....................................................................................................................
.7 – 3پیادهسازی مجدد عملگرها 039 ............................................................................................................................................
.7 – 62مسائل حل شده 926 ...........................................................................................................................................................
فصل هشتم :فایلها
.8- 6باز کردن فایل 969 ..........................................................................................................................................................
@PythonForever
مقدمه
هرگز به آنقدر که میپری قانع نباش .
هرگز نگو بیشتر از این ممکن نیست.
دائم از خودت عبور کن!
شاگردی که کمتر از معلمش بداند،
دنیا را به عقب میراند،
شاگردی که به قدر معلمش بداند دنیا را متوقف میکند.
این تویی که پیش میرانی...
عصر حاضر از نظر بسیاری از روشنفکران انقالب ارتباطات و اطالعات نام گرفته است.
در واقع کلیه کارهای روزمرهی انسان با سیستم های ارتباطی نوین و فناوری اطالعات گره
خورده است .لذا اهمیت علم کامپیوتر به عنوان نمود اصلی فناوری اطالعات و ارتباطات بر
کسی پوشیده نیست .در دنیای مدرن امروز تسلط و آشنایی با نحوه کار با سیستم های
کامپیوتری به عنوان یک سطح سواد مطلوب در جامعه شناخته می شود که اگر کسی آن را
نداشته باشد باید بهای عدم آشنایی با دنیای کامپیوتر در زندگی روزمره خویش با مراجعه به
کافی نت ها ،درخواست های الکترونیکی و موارد دیگر بپردازد.
بدون شک ،برنامه نویسی یکی از مهمترین مهارتهایی است که امروزه نه تنها برای
فارغ التحصیالن و دانشجویان رشته مهندسی کامپیوتر ،بلکه برای سایر رشتهها و زمینهها نیز
به شکل ضروری ،مورد نیاز است .هر ساله ،بر تعداد موقعیتهای شغلی که مرتبط با
برنامهنویسی هستند و یا پیشنیاز اصلی آنها برنامهنویسی است ،افزوده میشود .از طرفی،
بخشی جدا نشدنی از فرآیند تحقیق و پژوهش در اکثر رشتههای دانشگاهی امروزی ،کار با
@PythonForever
01فصل اول
پایتون یک زبان برنامهنویسی همه منظوره ،سطح باال ،شیءگرا و مفسر است که توسط
خودو فان روسوم در سال 6336در کشور هلند طراحی شد .فلسفه ایجاد آن تأکید بر دو
هدف اصلی خوانایی باالی برنامههای نوشته شده و کوتاهی و بازدهی نسبی باالی آن است.
کلمات کلیدی و اصلی این زبان به صورت حداقلی تهیه شدهاند و در مقابل کتابخانههایی
که در اختیار کاربر است بسیار وسیع هستند.
علی رغم استقبال گسترده دانش پژوهان عرصه کامپیوتر از زبان پایتون ،در زمینه آموزش
این زبان قدرتمند کتاب های زیادی به زبان فارسی منتشر نشده است که کتاب حاضر برای
پر کردن خالء موجود در زمینه نوشته شده و توسط انتشارات فن آوری های نوین به زیور
چاپ آراسته شده است .امید است اثر حاضر همانند سایر آثار مولفین مورد استقبال قرار
گیرد.
از تمامی اساتید و دانشجویان عزیز تقاضا داریم ،هر گونه اشکال ،ابهام در متن کتاب،
پیشنهاد و انتقادات را به آدرس پستالکترونیک [email protected]
ارسال نمایند.
مولفین
[email protected]
@PythonForever
آشنایی با زبان پایتون 00
فصل
آشنایی با زبان پایتون
1
1 2
. Simplicity . Low Learning Curve
@PythonForever
01فصل اول
به جزئیات زبان به او اجازه میدهد تا روی حل مسئله تمرکز داشته باشاد .هماین موضاوع سارعت کاد
نویسی و خوانایی این زبان را هم افزایش داده است.
.2منحنییادگیریکمشیب:8قطعاً عامل اصلی این موضوع که یادگیری پایتون بهعنوان قادم اول باه
مشتاقان برنامهنویسی و حتی کودکان توصیه میشود سینتکس فوقالعاده ساادهی آن اسات .هماانطاور
که گفتیم صراحت زبان پایتون نهتنها خوانایی آن را افزایش داده اسات ،بلکاه باا حاذف پیچیادگیهاا
سهولت یادگیری آن را نیز بیشتر کرده است.
.3رایگانومتنبازبودن:1توزیعهای مختلف زبان برناماهنویسای پاایتون کاامالً رایگاان باودهو هار
برنامااهنااویس ماایتوانااد سااورس کااد آن را بخوانااد ،آن را تغییاار دهااد ،و در برنامااههااای خااود از
اسکریپتهایآن استفاده کند.
.4سطحباالبودن:8پایتون ازجمله زباانهاای قدرتمناد ساطح بااال اسات کاه برناماهناویس را درگیار
جزئیات سطح پایین مثل مدیریت حافظه یا کار با ثباتها ( )Registerssو غیره نمیکند.
.5قابلحملبودن:3ماهیت متنباز پایتون موجب شده اسات کاه ایان زباان باا پلتفارمهاای مختلاف
سازگار باشد .بنا بر اعاالم رسامی ساایت پاایتون ،در حاال حاضار ایان زباان روی 06پلتفارم ازجملاه
،iOS ،Android ،Solaris ،Macintosh ،GNU/Linux ،Windowsو ...کااار ماایکنااد و برنامااههااای
نوشتهشده به این زبان بدون نیاز به تغییر یا با تغییرات بسیار جزئی روی تمام پلتفرمها اجرا میشوند.
.6زبانیمفسری:3برخالف زبانهای کامپایلری مانند Cیا جاوا ،زبان برناماهنویسای پاایتون یاکزباان
مفسری است و سورس کد برنامههای نوشتهشده به این زبان با استفاده از یک مفسر اجرا مایشاود کاه
همین موضوع قابل حمل بودن آن را افزایش میدهد.
.7شیءگرایی:6پایتون در مقایسه با زبانهایی مانند جااوا یاا ،C++روش قدرتمنادتر وساادهتاری را
برای اجرا برنامههای شیءگرا به کار میگیرد.
.8توسعهپذیری:7یکی از مشکالت زبان مفسری پاایتون سارعتپاایین اجارا در مقایساه باا زباانهاای
کامپایلری مانند Cیا جاوا است .حال اگر بخواهید قطعهای از کدها سریعتر اجرا شود یا اگر بخواهیاد
@PythonForever
آشنایی با زبان پایتون 01
بخشی از الگوریتم برنامهی خود را پنهان کنید میتوانید آن بخش را به زبان C++ ،Cیا جاوابنویساید
و آن را در میان کدهای پایتون برنامهی خود قرار دهید.
.9تعبیهپذیری:8عالوه بر اینکه میتوان کدهای زبانهای دیگر را در برنامههای نوشتهشده باه زباان
پایتون قرار داد ،میتوان قطعه کدهایی را به زبان پایتون نوشت و در سورس کد برنامههای C++ ،Cیا
جاوا نشاند و به این ترتیب قابلیتهای اسکریپتی به سورس کد مدنظر اضافه نمود.
:پااایتون از یااک کتابخانااهی اسااتاندارد غناای بهااره مایباارد و در کنااار ایاان .01کتابخانهههیگسههترد
کتابخانهی وسیع،کتابخانه هاای ساایر توساعهدهنادگاننیاز باه سارعت درحاالتوساعه مایباشاند کاه
درمجموع ابزارهای مناسبی را برای ایجاد اسناد ،رابط های گرافیکی کاربر ( ،)GUIمرورگرهاای وب،
رمزنگاری ،هوش مصنوعی ،پست الکترونیکی ،بازیسازی ،دادهکاوی ،ایجاد و مادیریت وبساایت،
و بسیاری کاربردهای دیگر در اختیار برنامه نویسان قرار میدهد.
بودن:1پایتون یکزبان برنامهنویسی با طیف گستردهای از کاربردها اسات کاه در .11همهمنظور
حوزههای مختلف و متنوع کاربرد داشته است کاه ازجملاه مهامتارین کاربردهاای آن در طای ساالیان
گذشته میتوان به موارد زیر اشاره کرد:
موتور جستجوگر گوگل و موتور گرافیکی یوتیوب
ساخت برنامههای کاربردی علمی در سازمان فضایی ناساFermilab ،
و بسیاری کاربردهای دیگر نظیر طراحای ساایتهاای دینامیاک ،تولیاد نارمافزارهاای دساکتاپ،
انیمیشنسازی ،بازیسازی ،شبکه ،امنیات ،پایگااه داده ،دادهکااوی ،سااخت برناماههاای محاساباتی و
کاربردی در رشتههای مختلف نظیر ریاضی ،فیزیکی ،آمار ،زیست و غیره.
1
. General-Purpose
@PythonForever
01فصل اول
درنهایت میتوان گفت که پایتون ابزاری مهیج و قدرتمند در اختیار برنامه نویسان است که کاار باا
آن ساده و سرگرمکننده میباشد و تسلط بر آن کاربران را وارد دنیایی شگفتانگیز و بینهایت میکند
که هرکس میتواند متناسب با تواناییهایش از امکانات آن برای حل مسائل خود بهرهمند شود.
.1-4-1سطرها
مفسر پایتون و همچنین کااربران ،کادهای درون هار ماالول را باهصاورت تعادادی ساطر مشااهده
ههی ،6سااطرهایی هسااتند کااه توسااط ماایکننااد .در پاایتون دو نااوع سااطر وجااود دارنااد .6 .سههطرهایفیکی
ویرایشگرهای متن شمارهگذاری میشوند و بهسادگی توسط کاربر قابلتشخیص میباشند .0 .سهطرهای
منطقی ،0برداشت مفسر از اجرای برنامه است .هر سطر بیانگر یک دستور پایتون اسات .باهعناوانمثاال،
دستورات زیر را در نظر بگیرید:
">>> name = "Fanavarienovin.net
)>>> print(name
دسااتور اول رشااته fanavarienovin.netرا بااه متغیاار nameنساابت ماایدهااد و دسااتور دوم ،عبااارت
fanavarienovin.netرا نمایش میدهد .در این دستورات ،هر سطر منطقی یاک ساطر فیزیکای در نظار
گرفتهشده است .با اجرای این دستورات خروجی زیر نمایش داده میشود:
Fanavarienovin.net
گاهی اوقات هر سطر فیزیکی می تواند شاامل چناد ساطر منطقای باشاد .در ایان حالات ،بایاد باین
سطرها ،کاراکتر ”;“ قرار داد .بهعنوانمثال ،دستورات زیر را ببینید:
)>>> name = "Fanavarienovin.net"; print(name
با اجرای این دستورات نیز خروجی زیر نمایش داده میشود:
Fanavarienovin.net
گاهی اوقات برای خوانایی بیشتر بهتر است دستورات یاک ساطر منطقای در چناد ساطر فیزیکای
تایپ شود؛ بهعنوانمثال ،دستورات زیر را مشاهده کنید:
\ >>> message ="Python is a
"good programing language
)>>> print(message
1 2
. Physical Lines . Logical Lines
@PythonForever
آشنایی با زبان پایتون 01
در این مثال ،خطوط اول و دوم یک دستور منطقی هستند کاه در دو ساطر آمادهاناد .بارای توساعه
یک دستور در چند سطر فیزیکی از کاراکتر ”\“ استفاده میشود.با اجرای این دستورات خروجی زیار
نمایش داده میشود:
Python is a good programing language
تعداد کاراکترهای هر سطر فیزیکی نباید از 73کاراکتر بیشتر شود.
سطرهایخالی ،6برای افزایش خوانایی برنامه به کار میروند که شامل فضای خالی ( Spaceیاا )Tab
هستند و توسط مفسر نادیده گرفته میشوند و به بایت کد ترجمه نمیگردند.
.1-4-2بالک بندی
بالکبندی ،یکی از امکاناتی است که برای افزایش خوانایی کاد پاایتون باه کاار مایرود .در زباان
پایتون برای ایجاد بالک از تورفتگی 0سطرها استفاده مایشاود .درواقاع ،تاورفتگی میازان فضاای خاالی
( Spaceیا )Tabاست که در ابتدای هر سطر فیزیکی قرار مایگیارد .تماام دساتورات موجاود در یاک
بالک باید به یک میزان نسبت به سرآیند خود تورفتگی داشته باشند .یعنای ،تعاداد فضاای خاالی تماام
دستورات آن بالک نسبت به سرآیند یکای باشاد .شاکل 6 – 6نموناهای از ایان باالک بنادی را نشاان
میدهد.
Block 1
]items = [5, 8, 1, 6, 7, 3, 4, 2, 9, 0
Header:
Block 2 def bubble_sort(seq):
Header:
)l=len(seq
Block 3
Header: for i in range(l):
Block 4
Header: for n in range(1, l):
Block 5 if seq[n] < seq [n-1]:
]seq[n-1], seq[n] = seq [n], seq[n-1
Block 2 return seq
))print (bubble_sort(items
Block 1
1 2
. Blank Lines . Indentation
@PythonForever
01فصل اول
.1-5-4عملگرهای منطقی
عملگرهای منطقی ،بر روی عبارات منطقی درست یا نادرسات عمال مایکنناد .نتیجاه عملگرهاای
(و 6- 1میبینید ،زمانی نتیجه عملگار and منطقی در جدول 6- 1آمده است .همانطور که در جدول
منطقی) درست است که هر دو عملوند نتیجه درسات داشاته باشاند .اماا نتیجاه عملگار ( orیاا منطقای)
هنگامی نادرست است که هردو عملوند نادرست باشند .عملگر ،notنتیجه درست را نادرسات و نتیجاه
نادرست را به درست تبدیل میکند.
اکنون دستورات زیر را ببینید.
>>> x = true
>>> y = false
>>> z1 = x and y
>>> z2 = x or y
>>> z3 = not y
دستور اول شیء trueو xرا تعریف کرده True ،را به xپیوناد مایدهاد ،دساتور دوم ،اشایاء yو
Falseرا ایجاد کرده ،بین yو falseپیوند برقرار میکند ،دستور ساوم ،نتیجاه ( x and yیعنای )falseرا
قرار میدهاد و ( x or yیعنی )trueرا در z2 در شیء ایجادشده z1قرار میدهد ،دستور چهارم ،نتیجه
قرار میدهد. دستور پنجم( not y ،یعنی )trueرا در z3
جدول1–3عملگرهایرابطهای(مقایسهای).
توضیحات نتیجه مثال نام عملگر
اگر عملوند اول بزرگتر از عملوند دوم باشد ،نتیجه درست اسات، False 0<9 بزرگتر >
@PythonForever
آشنایی با زبان پایتون 01
عملگرهایترکیبی.
جدول1-6
عمل رد نتیجه مثال روشاستفاد عملگر
x =x + y 8 x = 3; x += 5 x += y =+
جدول1-7عمل ردعملگرهایمنطقی.
not y not x x or y x and y x Y
True True False False False False
False True True False False True
True False True False True False
False False True True True True
.1-5-5عملگرهای بیتی
عملگرهای بیتای ،عملگرهاایای کاه بار روی بیاتهاای داده کاار مایکنناد و مایتوانناد آنهاا را
دستکاری کنند ،برخی از این عملگرها عبارتاند از:
.6عملگر&"،و"بیتی را انجام مایدهاد .ایان عملگار ،دو عملوناد را بیات باه بیات بااهم "و"بیتهی
مینماید (نتیجه و بیتی زمانی یک است که هر دو بیت 6باشند) .بهعنوانمثال ،دستورات زیر را ببینید:
>>> a, b = 3, 2
>>> z = a & b
a= 00000011
b=00000010
===========
@PythonForever
01فصل اول
z = 00000010
پس zبرابر با 2میشود.
.0عملگر|"،یا" بیتی را انجام میدهد .این عملگر ،دو عملوند را بیت به بیت بااهم "یابیتهی" نماوده
(نتیجه یا بیتی زمانی صفر است که هر دو بیت 2باشند) .بهعنوانمثال ،دستورات زیر را ببینید:
>>> a, b = 3, 2
>>> z = a | b
a= 00000011
b=00000010
===========
z = 00000011
پس zبرابر 3خواهد شد.
.9عملگر^(xor،یاانحصاری) بیتیرا انجام میدهد .این عملگر دو عملوند را بیت به بیت (بیتهاای
متناظر) را باهم یا انحصاری میکند (نتیجه یا انحصاری زمانی یک است که دو بیات مخاالف یکادیگر
باشند) .بهعنوانمثال ،دستورات زیر را ببینید:
7, 2= >>> a, b
= a ^ b>>> z
a= 00000111
b=00000010
===========
z = 00000101
.۳عملگر~،نقیضبیتی است .این عملکر قبل از یک عملوند قرارگرفته ،تمام بیتهای 1آن را باه 0
و تمام بیتهای 0را به 1تبدیل میکند .بهعنوانمثال ،دستورات زیر را مشاهده کنید:
= 10>>> a
~ a=b>>>
a= 00001010
b=11110101
.0عملگر>>،شیفتبهچپ را انجام میدهد.این عملگر بین دو عملوند قارارگرفتاه و مقادار عملوناد
سمت چپ را به تعداد عملوند سمت راست به سمت چپ شیفت میدهد .بهعنوانمثال ،دستورات زیر
را ببینید:
2, 3= >>> a, b
b<<= a>>>z
a= 00000010
@PythonForever
آشنایی با زبان پایتون 01
b=3
---------------------
z = 00010000
همانطور که مشاهده میشود z ،برابر با 61است .یعنی ،با هر شیفت به چپ ،مقادار aدر 0ضارب
میشود و در zقرار میگیرد .پس مقدار aدر 8ضرب شده ( )0 * 09تا 61به دست آماده ،در zقارار
میگیرد.
.1عملگر<< ،شیفتبهسمتراست را انجام میدهد .ایان عملگار باین دو عملوناد قرارگرفتاه و مقادار
عملوند اول را به تعداد عملوند دوم به سمت راست شیفت میدهد .بهعنوانمثال ،دستورات را مشاهده
کنید:
=12>>> a
2>>= az>>>
a= 00001100
b=00000011
همانطور که در این دستورت مشاهده کردید ،با هر شیفت به چپ عدد تقسیمبر 0میشود ،مقادار
60تقسیمبر ۳شده و مقدار ( 3یعنی، ) 00000011بهدستآمده است.
1 2
. Instance . Object
@PythonForever
11فصل اول
در پایتون گروهی از انواع اشیاء وجود دارند که برای کار با اعداد به کار میروند .ایان اناواع اشایاء
عبارتاند از:
.0دادههای ممیز شناور ()Float .6دادههای صحیح ()Integer
.۳دادههای دهدهی ()Decimal .9دادههای مختلط ()Complex
.1دادههای منطقی ()Boolean .0دادههای کسری ()Fraction
دادههای صحیح
این نوع داده ها برای معرفی اعداد صحیح مثبت و منفی (بدون ممیز اعشاار) نظیار -900 ،0 ،1785و
غیره به کار میروند .در پایتون نسخه 0دو نوع داده صحیح وجود دارد که عبارتاند از:
دادههای صحیح با محدودیت اندازه که intنامیده میشوند.
دادههای صحیح بدون محدودیت اندازه که longنامیده میشوند .در پایتون نسخه 0برای تعیین
دادههای صحیح با نوع ، longانتهای داده کاراکتر Lیا lقرار میگیرد.
چنانچه در نسخه 0پایتون دادهای را با نوع intدر نظر بگیرید ،سهرریک 6اتفااق افتاد(یعنای ،دادهای را
در آن متغیر قرار دهید که در متغیر جا نشود) ،خطایی رخ نخواهد داد و پایتون بهصورت خودکاار ناوع
تبدیل خواهد کرد. intرا به شیء با نوع long
دقت کنید که بیشترین مقدار و کمترین مقدار یک شیء نوع intرا میتوانید با sys.maxint - 1و
sys.maxintببینید .برای این منظور میتوانید دستورات زیر را اجرا کنید:
>> import sys
>>> print sys.maxint , sys.maxint-1
امّا در نسخه 9پایتون اعداد صحیح با یک نوع intارائه میگردند که ازلحاظانداز محدودیتیندارند.
لذا ،استفاده از کاراکترهای Lو lدر پایان این اعداد مجاز نمیباشد .چون در این نسخه محدودیت نوع
intحذفشده است ،لذا sys.maxint ،حذفشده است .امّا ،میتوان بهجای آن از دساتور sys.maxsize
استفاده کرد.
@PythonForever
آشنایی با زبان پایتون 10
@PythonForever
11فصل اول
اعداد میتوانند اعشاری باشاند .پاایتون بارای نگاهداری اعاداد اعشااری (نظیار 0.5 ،3.1415و )...از
اشیایی با نوع floatاستفاده میکند .عالوه بر نمایش اعداد اعشاری بهصورت ممیز شناور میتوان اعداد
اعشاری را بانمادعلمی1نمایش داد که در پایتون برای نمایش اعداد اعشاری با نمااد علمای از حارف E
به صاورتهاای)5e7(5E7 و یا eاستفاده میشود .بهعنوانمثال ،در پایتون اعداد
یا6E-10()6e-10نمایش داده میشوند.
اعداد مختلط
همانطور که در ریاضی دیدیم ،هر عادد مخاتلط 0از دو بخاش حقیقای 9و موهاومی ۳تشاکیلشاده
است .اعداد مختلط در پایتون با نوع شیء complexتعریف میشوند .عدد مختلط در پایتون بهصاورت
نمایش داده میشود که xنشاندهنده ،بخش حقیقای و yنشااندهناده بخاش موهاومی اسات. x + yj
3 + 5j یاک عادد مخاتلط اسات کاه بخاش حقیقای آن 9و بخاش موهاومی آن 5 بهعنوانمثال ،عادد
میباشد.
از کالس complexمی توان برای تعریف اعداد مختلط استفاده نمود که این کالس بهصاورت زیار
به کار میرود:
)complex (real, imag
که realبخش حقیقی و imagبخش موهومی عدد مختلط را مشخص میکناد .چنانچاه هریاک از
این بخشها بهعنوان آرگومان ارسال نشاوند ،باهصاورت پایشفارض صافر در نظار گرفتاه مایشاوند،
بهعنوانمثال ،دستورات زیر را ببینید:
>>> a = 5; b = -3
)>>> complex(a, b
دستور اول ،مقادیر 9و -۳را به ترتیب به اشیاء aو bتخصیص میدهاد و دساتور دوم ،یاک شایء
complexبا مقدار حقیقی 0و مقدار موهومی -9ایجاد مینماید(خروجی ) (5-3jنمایش داده میشود).
با دو صفت realو imagمیتوان بخشهای حقیقی و موهومی یک عدد مخاتلط را باهدسات آورد.
بهعنوانمثال ،دستورات زیر را ببینید:
>>> a = 4.5
@PythonForever
آشنایی با زبان پایتون 11
)>>> b = complex(a
>>> b.real
>>> b.imag
دستور اول ،متغیر aبا مقدار ۳.0را ایجاد کرده ،دستور دوم ،شایء 4.5+0.0jرا ایجااد ماینمایاد و
دستور سوم ،بخش حقیقای شایء مخاتلط ( bیعنای )۳.0را نماایش مایدهاد و دساتور چهاارم ،بخاش
موهومی شیء ( bیعنی )0.0را نمایش میدهد.
اعداد دسیمال(دهدهی)
همانطور که بیان گردید ،در پایتون اعداد اعشاری بهصورت شیء با نوع floatمعرفای مایگردناد.
Binary-Floatingاساتفاده ماینمایاد کاه مفسر پایتون برای ارائه نوع ممیز شاناور از کدگاذاری Point
برای محاسبات حسابداری مناسب نمیباشد .چون ،پایتون اعدادی از قبیل 0.2 ،0.1و 0.3را باهصاورت
0.2000000000000001 ،0.1000000000000001و 0.300000000000001نشان مایدهاد کاه دقیقااً
برابر 0.2 ،0.1و 0.3نمیباشند .این موضاوع در برخای از اوقاات موجاب خطاای منطقای خواهاد شاد.
بهعنوانمثال ،دستورات زیر را ببینید:
>>> a = 0.2 + 0.2 + 0.2
>>> a == 0.6
نشان داده می شود .یعنی 0.2 + 0.2 + 0.2 ،برابار 0.6نخواهاد شاد و با اجرای این دستورات False
این موضوع یک خطای منطقی برنامه است .اکنون اگار aرا نشاان دهایم ،یعنای ،دساتور زیار را تایاپ
کنیم ،خروجی 0.6000000000000001نشان داده میشود:
>>> a
را نشان میدهند: 0.3000000000000004 و دستورات زیر مقدار
>>> a = 0.1 + 0.1 + 0.1
>>> a
دستور اول ،سه بار 0.1را جمع کرده و در aقرار میدهد که انتظار میرود ،نتیجه 0.3شاود ،امّاا ،باا
نمایش aمایبینایم کاه aبرابار باا 0.3000000000000004مایباشاد کاه ایان انحاراف ناشای از نحاوه
کدگذاری اعداد اعشاری میباشد .به همین دلیل ،در پاایتون یاک ناوع شایء جدیاد باه ناام Decimal
@PythonForever
11فصل اول
طراحیشده است .این نوع در مالول decimalقرار دارد .بارای اساتفاده از ناوع Decimalابتادا بایاد باا
دستور زیر این مالول را به برنامه اضافه کنید:
>>> import decimal
را نشان میدهند: دستورات زیرTrue
.1-6-2رشته
در پایتون رشته ،1مجموعهای از کاراکترهای پشت سر هم است که در باین جفات کتیشان(" ") یاا
تککتیشن('') قرار میگیرند .بهعنوانمثال ،دستورات زیر را ببینید:
">>> a = "Python language
>>> a
)>>> print(a
دستور اول ،شیءایی به نام aبا نوع رشتهای تعریف میکند و شیء رشاتهای ' 'Python Languageرا
به آن تخصیص میدهد ،دستور دوم ،مقدار ( aیعنی )'Python language' ،را نمایش میدهاد و دساتور
سوم نیز مقدار ( aیعنی ) Python language ،را نمایش میدهد.
در پایتون برخالف برخی از زبانهای برنامهنویسی دیگر نوعکاراکتری 0وجود ندارد .یعنی ،در زبان
پایتون کاراکتر ،رشتهای با طول یک است.
در پایتون می توان از کاراکترهای کتیشن در داخل یکدیگر استفاده کرد .در این حالات فقاط بایاد
نوع کتیشن داخلی با بیرونی متفاوت باشد .امّا ،اگر بخواهید از کاراکتر کتیشان یکساان اساتفاده کنیاد،
باید از کاراکتر \ 9قبل از کتیشن استفاده کنید .بهعنوانمثال ،دستورات زیر را مشاهده کنید:
"'>>> "Python 'language
@PythonForever
آشنایی با زبان پایتون 11
تککتیشن دیگر استفاده میکند .برای این منظور ،از کااراکتر \ قبال از کااراکتر تاککتیشان داخلای
استفاده مینماید(عبارت " "I'm a studentرا نمایش خواهد داد).
عملگرهایرشته
عملگر ،+این عملگر برای اتصال (الحاق) دو رشته به کار میرود .بهطوریکه رشته سامت راسات
را به انتهای رشته سمت چپ اضافه میکند .بهعنوانمثال ،دستورات زیر را ببینید:
">>> s1 = "Fanavarienovin
">>> s2 = ".net
>>> s1 + s2
دستور اول ،رشته s1را ایجاد کرده ،شایء Fanavarienovinرا باه آن تخصایص مایدهاد ،دساتور
دوم شیء s2را ایجاد نموده ،رشته .netرا در آن قرار میدهد و دستور سوم ،رشته s2را به انتهای رشته
s1میچسباند .یعنی ' 'Fanavarienovin.netرا نمایش میدهد.
عملگر* ،برای تکرار یک رشته به کاار مایرود .ایان عملگار دو عملوناد یکای از ناوع رشاتهای و
دیگری از نوع عدد صحیح را دریافت کرده رشته را باه تعاداد عادد دریافات شاده تکارار مایکناد و
' 'Fanavarienovin Fanavarienovin Fanavarienovin برمیگرداند .بهعنوانمثال ،دستور زیر عبارت
را نمایش میدهند:
>>> "Fanavarienovin " * 3
.1-8تابع )(print
همان طور که قبالً بیان گردید ،زمانی که یک عبارت را در مفسر تایپ کارده باشاید و کلیاد Enter
را بزنید ،عبارت فوراً ارزیابی شده ،نتیجه ارزیابی عبارت نمایش داده میشود .بهعنوانمثال ،دستور زیار
را تایپ کرده تا نتیجه ارزیابی عبارت (یعنی ) 57.125 ،را ببینید:
>>> 8*(5+3)-110/6
@PythonForever
11فصل اول
این ویژگی برای زمانی به کار می رود کاه بخواهیاد نتیجاه یاک دساتور محاساباتی را حسااب
کرده یا بخواهید امالئی عبارت را ارزیابی کنید.
حال ،اگر این دستورات را دریک ماالول تایاپ کنیاد ،باا اجارای ایان دساتورات خروجای آنهاا
نمایش داده نمیشود .برای نمایش اطالعات در مالول میتوانید از تابع )( printاساتفاده کنیاد .در تاابع
)( ، printمیتوانید هر دنبالهای از عباراتی را بیآورید .این عبارات با کاما ( ),از هم جادا مایشاوند .در
هنگام استفاده از تابع )( printبه نکات زیر دقت کنید:
.6اگر تابع )( printرا بدون آرگومان استفاده کنید ،یک سطر خالی چاپ خواهد شد.
.0با هر بار اجرای تابع ،printیک سطر چاپ خواهد شد.
.9اگر آرگومان تابع )( ٬printرشتهای باشد ،عین رشته را در خروجی نمایش میدهد.
.۳اگر در آرگومان تابع )( ٬printیک عبارت آورده شاود ،نتیجاه عباارت در خروجای نماایش داده
میشود.
.0اگر در آرگومان تابع )( ٬printنام یک متغیر آورده شاود ،مقادار متغیار در خروجای نماایش داده
میشود.
بهعنوانمثال ،دستورات زیر را ببینید:
>>> x, y = 3, 5
)>>> print(x, " + ", y, " = ", x + y
دستور اول ،مقدار 9را در xو مقدار 0را در yقرار میدهد ،دستور دوم ،ابتدا مقدار ( xیعنای ،)9
سپس عالمت " ،"+در ادامه مقدار yیعنی ( ،)0در پایان عالمت = و نتیجاه عباارت ( x + yیعنای )8را
نمایش میدهد؛ یعنی ،خروجی زیر:
3+5=8
درواقع هر چیزی که در آرگومان تابع )( printاستفاده میشود ،برای نماایش باه ناوع رشاته تبادیل
میگردد ،بهعنوانمثال ،اگر متغیر nعددی صحیح باشاد کاه باه مقادار 62ارجااع مایدهاد ،امّاا وقتای
بهعنوان آرگومان )( printاستفاده میگردد ،درنهایت مقدار 62به یکرشته تبدیل میشود .بااینوجود،
باید دقت کنید که متغیر nهمچنان به یک عدد صحیح ارجاع میدهد .بهعنوانمثال ،دساتورات زیار را
ببینید:
@PythonForever
آشنایی با زبان پایتون 11
>>> n = 10
)>>> print("n is" + n
با اجرای این دستور انتظار داریم که عبارت زیر نمایش داده شود:
n is 10
درصورتیکه با اجرای این دستور خطای زیر صادر میگردد:
)Traceback (most recent call last:
@PythonForever
11فصل اول
.0برنامه) IDLE (python 3.5 64-bitرا اجرا کنید تا شکل 6- 9ظاهر شود.
.9گزینه ( File / New Fileیا کلیدهای ترکیبی )Ctrl+Nرا فشار دهید تا فایال جدیادی ایجااد شاود
(شکل.)6-۳
@PythonForever
آشنایی با زبان پایتون 11
.0گزینه ( File / Save Asیاا کلیادهای ترکیبای )Ctrl+ Shift+ Sرا اجارا کنیاد تاا پنجاره Save As
@PythonForever
11فصل اول
.1نام فایل را 1-1.pyانتخاب کرده ،ساپس Saveرا کلیاک کنیاد (هماانطاوری کاه در ایان شاکل
میبینید ،پسوند فایل .pyانتخابشده است که فایل sourceبرنامههای زبان پایتون میباشد).
.7برای اجرا گزینه ( Run / Run Moduleیا کلید )F5را انتخاب کنید تا خروجی زیر را ببینید(شاکل
.)6-7
.1-11خواندن داده
اکثر برنامههای واقعی باید اطالعاتی را از کاربر بخوانند .بارای ایان منظاور ،پاایتون از تاابع )(input
@PythonForever
آشنایی با زبان پایتون 10
وقتی کنترل اجرای برنامه به تابع )( inputبرسد ،ابتدا پیغام نمایش داده میشاود ،منتظار مایماناد تاا
کاربر رشتهای را وارد کرده ،کلید Enterرا فشار دهد .بهمحض اینکه کاربر کلید Enterرا فشار دهد،
رشته واردشده در متغیر قرار میگیرد .بهعنوانمثال ،دستور زیر را ببینید:
)”name = input(“Enter your name:
با اجرای این دستور عبارت زیر نمایش داده میشود:
Enter your name:
را فشااار دهااد ،عبااارت اکنااون کاااربر عبااارت fanavarienovinرا وارد کاارده ،کلیااد Enter
میباشد.
پس اگر بخواهید عددی را بخوانید ،ابتدا ،باا دساتور )( inputمایتوانیاد آن را باهصاورت رشاتهای
آن را به عدد تبدیل کنید .اکنون ،دستورات زیر را ببینید: بخوانید و با تابع )(int
@PythonForever
11فصل اول
Enter a:10
Enter b:20
Sum is 30
چون ،دستور اول ،رشته عددی 62را میخواند ،در aقرار میدهد ،دستور دوم ،رشته عاددی 02
قارار مایدهاد ،دساتور a را خوانده ،در bقرار میدهد ،دستور ساوم ،مقادار صاحیح (int(a)) aرا در
قارار ( bیعنای )30را در sum قرار میدهد ،دستور پنجم ،جماع aو b را در b چهارم ،مقدار صحیح
را نمایش میدهد. میدهد و دستور ششم ،عبارت Sum is 30
استفاده کرد .در این صاورت رشاته خوانادهشاده را باه تابع )( inputرا میتوان در داخل تابع )(int
عدد صحیح تبدیل کرده ،در متغیر قرار میدهد .بهعنوانمثال ،دستور زیر را مشاهده کنید:
))”n = int(input(“Enter n:
با اجرای این دستور عبارت زیر ظاهر میشود:
Enter n:
اکنون اگرکاربر جلوی ، n:مقادار رشاتهای 60را وارد کناد ،مقادار رشاتهای " "15باه عادد 60
تبدیل و در nقرار میگیرد .حال اگر کاربر بهجای یک عادد اشاتباهاً رشاتهای را وارد کناد کاه در آن
یا ''Aتا ''Zو غیره وجود داشته باشند ،مفسر پایتون پیغام خطاای کاراکترهای غیر عددی نظیر ' 'aتا ''z
' ValueError: invalid literal for int() with base 10: '12A12
این پیغام خطا به این دلیال اسات کاه آرگوماان تاابع )( intبایاد شاامل رشاتهای باشاد کاه فقاط از
کاراکترهای عددی تشکیل میشود .یعنی ،آرگومان تابع )( ،intرشته نمیتواند شامل کاراکترهای غیار
عددی باشد.
یدههد (ههد ایهنبرنامهه
حاصلجمعآنهارانمایشمه
برنامهایکهدوعددراخواند ،
مثال .1-8
آشناییبادستوراتورودی،خروجیوعملگر+است).
مراحلطراحیواجرا:
.6با گزینه ( File / New fileکلیدهای ) Ctrl + Nمالول جدیدی ایجاد کنید.
@PythonForever
آشنایی با زبان پایتون 11
دستور اول ،پیغام Please enter number1:را نماایش مایدهاد ،ساپس رشاتهای را خواناده ،در a
قرار میدهد ،دستور دوم ،مقدار موجود در رشته aرا به عادد تبادیل مایکناد و در aقارار مایدهاد،
دستور سوم ،پیغام Please enter number2:را نمایش داده ،یاکرشاته عاددی را خواناده ،در bقارار
را به عدد تبدیل میکند و در bقرار میدهاد و دساتور پانجم ،باا تاابع میدهد ،دستور چهارم ،رشته b
را در اداماه مقادار bو در پایاان عالمات = باه هماراه a + b ، printابتدا مقادار ،aساپس عالمات ،+
نمایش میدهد.
ذخیره کنید. .9با گزینه )Ctrl + Shift + S( File / Save Asمالول را به نام 1-2.Py
.۳با گزینه ( Run / Run Moduleکلید )F5مالول را اجرا کنید و دادههای ورودی را بهصاورت زیار
وارد نمایید:
Please enter number1: 12
Please enter number2: 15
12 + 15 = 27
مثال.1-4برنامهای کهشعاعدایر راخواند ،بهااسهتفاد ازفرمهولزیهرمسهاحتدایهر رانمهایش
میدهد:
مراحلطراحیواجرا:
@PythonForever
11فصل اول
دستور اول پیغامی را نمایش داده ،یکرشته را بهعنوان شعاع دریافت میکند و در شایء response
را به عدد اعشااری تبادیل مایکناد و در rقارار مایدهاد، قرار میدهد ،دستور دوم ،مقدار response
دستور سوم ،مساحت دایره را حساب کرده ،به areaتخصیص مایدهاد ،دساتور چهاارم ابتادا ،عباارت
The area isو سپس در ادامه آن مقدار متغیر( areaمساحت دایره) را نمایش میدهد.
.9مالول را به نام 1-3.Pyذخیره کنید.
مقدار 12.5را وارد کرده تاا خروجای زیار را .۳مالول را اجرا کنید .جلوی ? What is your radius
مشاهده نمایید:
What is your radius? 12.5
The area is 490.87343749999997
کهسنتانرابهسالدریافتکرد ،بههاانیهه،
است.برنامهای مثال .1-3هرسالبرابربا
دقیقهوساعتتبدیلکند.هردقیقه60اانیهوهرساعت60دقیقهاست(هرساعت4700اانیهاست).
مراحلطراحیواجرا:
را نمایش داده ،یکرشته را بهعنوان سنتان دریافت میکناد و دستور اول ،پیغام ٍEnter your age:
در متغیر ageقرار میدهد .دستور دوم ،رشته عددی ageرا به عدد صاحیح تبادیل مایکناد و در متغیار
Ageقرار میدهد(دقت داشته باشید که متغیر ageو Ageدو متغیر متفاوت هستند ،چون پاایتون نبسات
به حروف بازرگ و کوچاک حسااس اسات) ،دساتور ساوم ،مقادار متغیار Ageرا در ( 3156e4یعنای
) ضرب کرده تا سنتان را باه ثانیاه تبادیل نمایاد و ساپس آن را در متغیار secondقارار
میدهد ،دستور چهارم ،مقدار متغیر secondرا تقسیمبر 12میکند تا تعداد دقایق سانتاان را باه دسات
@PythonForever
آشنایی با زبان پایتون 11
آورده ،سپس آن را در متغیر minuteقارار مایدهاد ،دساتور پانجم ،مقادار secondرا تقسایمبار 9122
قارار مایدهاد ،دساتورات میکند تا تعداد ساعات سنتان را حساب کرده ،سپس آن را در متغیر hour
ششم تا هشتم با پیغامهای مناسب تعداد ثانیهها ،دقایق و ساعات سنتان را نمایش میدهند.
.0.6مالول را ذخیره و اجرا کنید .جلوی ،Enter your age:عدد ۳7را وارد کرده تا خروجی زیار را
مشاهده کنید:
Enter your age: 47
Second is 1487550000.0
Minute is 24792500.0
Hour is 413208.3333333333
مثال.1-6برنامهایکهیکعدددورقمیراخواند ،مقلهو آنرانمهایشمهیدههد(ههد برنامهه
آشناییباعملگرهای%و//است).
مراحلطراحیواجرا:
دستور اول ،با نمایش پیغام Enter a number:یک رشته عددی دورقمی را دریافت میکند و در a
قرار میدهد ،دستور دوم ،مقدار aرا به عدد صحیح تبدیل نموده ،به aنسبت مایدهاد (هماانطاور کاه
مشاهده کردید ،در زمان اجرا میتواند نوع شایء تغییار کناد ،یعنای aاز ناوع رشاتهای باه ناوع عاددی
قرار میدهاد ،دساتور صحیح تبدیل گردید) ،دستور سوم ،رقم یکان aرا با عملگر %جدا کرده ،در r1
چهارم ،با عملگر //رقم دهگان (عملگر //برای انجام تقسیم صحیح به کار مایرود) aرا جادا نماوده،
قرار میدهد و دستور پنجم ،ابتدا عبارت Reverse isو سپس r1* 10 +r2یعنی ،هماان مقلاوب )a در r2
@PythonForever
11فصل اول
Reverse is 74
یماند عهدداولبهرعهدددومرا
مثال.1-7برنامهایکهدوعددصحیحراخواند ،خارجقسمتوباق
باقیماند تقسیمصحیح)و(//تقسیمصحیح)است).
نمایشمیدهد(هد برنامهآشناییباعملگرهای (%
مراحلطراحیواجرا:
@PythonForever
آشنایی با زبان پایتون 11
.0مالول را ذخیره و اجرا کرده ،سپس جلاوی ،stringمقادار Pythonو جلاوی ،repeatمقادار 0را
وارد کنید تا خروجی زیر را مشاهده کنید:
Enter a string: Python
Enter repeat: 5
PythonPythonPythonPythonPython
برنامهایکهدوعددراخواند ،معادلمختلطآندوعددرانمایشمهیدههد (عهدداول
مثال.1-18
هااست. بخشrealوعدددومبخش imag
میباشد).هد اینبرنامهایجاداعدادمختلطونمایشآن
مراحلطراحیواجرا:
@PythonForever
11فصل اول
.0مالول را ذخیره و اجارا کارده ،جلاوی real partو image partمقاادیر 60و -۳را وارد کنیاد تاا
خروجی زیر را ببینید:
Enter real part: 12
Enter image part: -4
))j4 -12
.1-11مسائل حلشده
مثال.1برنامهایکهسهضلعمثلثراخواند ،بااستفاد ازفرمولهایزیرمحیطومسهاحتمثلهثرا
حسا میکند.
)p ( a b c
2
)s p( p a)( p b)( p c
مراحلطراحیواجرا:
.0مالول را ذخیره و اجرا کرده ،جلوی b: ، a:و c:به ترتیب 8 ،60و 3را وارد کنید تا خروجی زیار
را ببینید:
Enter a: 12
Enter b: 8
Enter b: 9
Perime is 29.0
Area is 35.99913193397863
برنامهایکهدوعدد aو bراخواند ،حاصلعبارتزیررامحاسبهکرد ونمایشمیدهد:
مثال.8
@PythonForever
آشنایی با زبان پایتون 11
مراحلطراحیواجرا:
.0مالول را ذخیره و اجرا کرده ،جلوی a:و b:به ترتیب 7و 2را وارد کنید تا خروجی زیر را ببینید:
Enter a: 7
Enter b: 2
f is 7.0
مثال.4برنامهایکهیکعدددورقمیراخواند ،حاصلرقماولبهتوانرقمدومورقمدومبهتوان
رقماولرانمایشمیدهد.
مراحلطراحیواجرا:
.0مالول را ذخیره و اجرا کرده ،عدد 9۳را وارد کنید تا خروجی زیر را ببینید:
Enter a: 34
4 ** 3 = 64
3 ** 4 = 81
میکند.
برنامهایکهدوعددراخواند ،بدوناستفاد ازمتغیرکم یمحتویآنهاراتعویض
مثال.3
مراحلطراحیواجرا:
@PythonForever
11فصل اول
.0مالول را ذخیره و اجرا کرده ،جلوی a:و b:به ترتیب اعداد 02و 60را وارد کنید تا خروجی زیر
را ببینید:
Enter a: 12
Enter b: 20
a = 20
b = 12
مثال.6برنامهایکهارتفاعوقاعد مثلهثراازورودیخوانهد ،مسهاحتآنرامحاسهبهمهیکنهدو
نمایشمیدهد.
ارتفاع قاعده
مساحت مثلث
مراحلطراحیواجرا:
.0مالول را ذخیره و اجرا کنید .اکنون به ترتیب اعداد 7و 3را جلوی a:و h:وارد کرده تا خروجای
زیر را ببینید:
Enter a: 7
Enter h: 9
Area is 31.5
مثال.7یکدوچرخهسوارباسرعتxکیلومتربرساعتشروعبهحرکهتمهیکنهدوپهاازnدقیقهه
سرعتآنبهkکیلومتربرساعتمیرسد.برنامهایکهبااستفاد ازفرمهولزیهرشهتا دوچرخههسهواررا
محاسبهکرد ،نمایشمیدهد:
هد متغیر
@PythonForever
آشنایی با زبان پایتون 10
.0مالول را ذخیره و اجرا کرده ،جلوی ،n: ،k: ،x:به ترتیب 9 ،60 ،62را وارد کنید تا خروجی زیار
را ببینید:
Enter x: 10
Enter k: 20
Enter n: 3
a is 200.0
برنامهایکهتوان،8توان4وتوان3اعداد1تا9راچاپکند.
مثال.8
مراحلطراحیواجرا:
@PythonForever
11فصل اول
همانطور که در کد این برنامه مشاهده مایشاود ،هریاک از اعاداد 6تاا 3را در یاک ساطر تایاپ
کردیم که با بیان حلقه تکرار در فصل بعدی نیازی به تکرار 3سطر نمیباشد.
یدههد.اگهر
مثال.7برنامهایکهمختصاتدونقطهراخواند ،فاصلهبیندونقطهرامحاسبهونمایشم
زیرمحاسبهمیشود:
دونقطه()x1 , y1و()x2 , y2باشند،فاصلهبیندونقطه
بهصورت
مراحلطراحیواجرا:
.0مالول را ذخیره و اجرا کرده ،اطالعات زیر را وارد کنید تا فاصله بین دونقطه را مشاهده نمایید:
Enter x1: 12
Enter y1: 14
Enter x2: 19
Enter y2: 24
distance is 24.43358344574123
مثال.9برنامهایکهسهمقدارراخواند ،نوعآنهارانمایشمیدهد.
مراحلطراحیواجرا:
.0پروله را ذخیره و اجرا کارده ،و باه ترتیاب مقاادیر 60 ،0 ،62و stringرا جلاوی b: ، a:و c:وارد
کنید تا خروجی زیر را ببینید:
@PythonForever
آشنایی با زبان پایتون 11
Enter a: 10
Enter b: 12.5
Enter c: string
>'Type a is <class 'int
>'Type b is <class 'float
>'Type c is <class 'str
شناساییایناشیاءرانمایشمیدهد.
برنامهایکهدومقدارراخواند ،شمار
مثال.10
مراحلطراحیواجرا:
.0مالول را ذخیره و اجارا کارده ،مقاادیر 62و Fanavarienovinرا وارد کنیاد تاا خروجای زیار را
ببینید:
Enter a: 10
Enter b: Fanavarienovin
ID a is 1498607696
ID b is 58207472
،ارقامعددرابافاصلهنمایشمیدهد.
برنامهایکهیکعدد6رقمیراخواند
پروژ برنامهنویسی:1
مراحلطراحیواجرا:
@PythonForever
11فصل اول
@PythonForever
11 آشنایی با زبان پایتون
print(num1, " and ", num2, " = ", num1 and num2)
print(num1, " or ", num2, " = ", num1 or num2)
print(num1, " & ", num2, " = ", num1 & num2)
print(num1, " | ", num2, " = ", num1 | num2)
print(num1, " ^ ", num2, " = ", num1 ^ num2)
print(bin(num1), " + ", bin(num2), " = ", bin(num1 + num2))
print(bin(num1), " - ", bin(num2), " = ", bin(num1 - num2))
print(bin(num1), " * ", bin(num2), " = ", bin(num1 * num2))
print(bin(num1), " // ", bin(num2), " = ", bin(num1 // num2))
print(bin(num1), " % ", bin(num2), " = ", bin(num1 % num2))
print(bin(num1), " ** ", bin(num2), " = ", bin(num1 ** num2))
print(oct(num1), " + ", oct(num2), " = ", oct(num1 + num2))
print(oct(num1), " - ", oct(num2), " = ", oct(num1 - num2))
print(oct(num1), " * ", oct(num2), " = ", oct(num1 * num2))
print(oct(num1), " // ", oct(num2), " = ", oct(num1 // num2))
print(oct(num1), " % ", oct(num2), " = ", oct(num1 % num2))
print(oct(num1), " ** ", oct(num2), " = ", oct(num1 ** num2))
print(hex(num1), " + ", hex(num2), " = ", hex(num1 + num2))
print(hex(num1), " - ", hex(num2), " = ", hex(num1 - num2))
print(hex(num1), " * ", hex(num2), " = ", hex(num1 * num2))
print(hex(num1), " // ", hex(num2), " = ", hex(num1 // num2))
print(hex(num1), " % ", hex(num2), " = ", hex(num1 % num2))
print(hex(num1), " ** ", hex(num2), " = ", hex(num1 ** num2))
: دو عدد را وارد کرده تا خروجی زیر را ببینید. مالول را ذخیره و اجرا کنید.0
Enter a number1:12
Enter a number2:5
12 + 5 = 17
12 - 5 = 7
12 * 5 = 60
12 / 5 = 2.4
12 // 5 = 2
12 % 5 = 2
12 ** 5 = 248832
12 and 5 = 5
12 or 5 = 12
12 & 5 = 4
12 | 5 = 13
12 ^ 5 = 9
0b1100 + 0b101 = 0b10001
0b1100 - 0b101 = 0b111
0b1100 * 0b101 = 0b111100
@PythonForever
فصل اول11
@PythonForever
آشنایی با زبان پایتون 11
فصل
ساختارهای تصمیم و تکرار
2
در برنامههایی که تاکنون نوشتهایم ،دستورات بهصورت پشت سارهم (از اولاین دساتور باه آخارین
دستور) اجرا میگردیدند .در برنامه های واقعی و پیچیده نیاز اسات بعضای از دساتورات تحات شارایط
خاصی اجرا شوند ،و برخی دیگر از دساتورات اجارا نشاوند یاا بعضای از دساتورات چنادین باار اجارا
گردند .برای پیادهسازی چنین برنامههایی از ساختارهای کنترلی استفاده مایشاود .سااختارهای کنترلای
دو نوع هستند که عبارتاند از:
.0ساختارهای تکرار .6ساختارهای تصمیمگیری
.2-1ساختارهای تصمیمگیری
این ساختارها برای مواقعی بهکار میروند که بخواهید با برقرار شذن شارط خاصای ،مجموعاهای از
دستورات اجرا شوند یا بعضی از دساتورات دیگار اجارا نشاوند .در اداماه سااختارهای تصامیم را مای-
آموزیم.
ساختار تصمیم if
6
ارزیابی میشود ،اگر نتیجه ارزیابی شرط درست ( )Trueباشد ،یک شرطی در این ساختار ابتدا
مجموعه از دستورات اجرا میشوند ،وگرنه ،مجموعه دیگری از
:شرط if دستورات اجرا خواهند شد .این ساختار به صورتهای زیر
مجموعهدستورات
بهکار میرود:
تکانتخابی ،این دستور یک دستور مرکب است که بهصورت زیر بهکار میرود: ساختارساد .6
1
Condition
@PythonForever
11فصل اول
مجموعه در این ساختار ،ابتدا شرط ارزیابی میشود ،اگر نتیجه ارزیابی شرط ( Trueدرست) باشد،
دستورات اجرا خواهند شد ،در غیر اینصورت ،از اجرای مجموعه دستورات صرف نظر خواهد شد و
اولین دستور بعد از ifاجرا خواهد شد.
در هنگام استفاده از ساختار ifبه نکات زیر دقت کنید:
.0در این ساختار شرط میتواند مرکب باشد .یعنی ،میتوان با عملگرهای or ،andشرطهای
مرکب را ایجاد نمود .به عنوان مثال ،شرط مرکب میتواند
.0مالول را ذخیره و اجرا کنید .اکنون جلوی ،number:عدد -62را وارد نمایید تا خروجی زیر را
ببینید:
Enter a number:-10
10
.0ساختارهایدوانتخابی ،ifدر ساختار ifمیتوان کلمه کلیدی elseرا بهکاربرد ،در این صورت
این ساختار بهصورت زیر استفاده میشود:
:شرط if در این ساختار ابتدا شرط ارزیابی میشود .اگر نتیجه
مجموعهدستورات1
else: ارزیابی شرط درست ( )Trueباشد ،مجموعه دستورات 1و
مجموعهدستورات8
False باشد) ،مجموعهدستورات گرنه (نتیجه ارزیابی شرط
8اجرا خواهند شد.
@PythonForever
آشنایی با زبان پایتون 11
ارزیابی میشود ،اگر شرط 8درست ( )Trueباشد ،مجموعهدستورات 8اجرا میشوند ،و سپس دستور بعاد
از مجموعهدستورات n+1اجرا میگردد ،اگر شرط 8درست نباشد ،شرط 4ارزیابی میشاود و ایان روناد تاا
شرط nادامه مییابد .اگر هیچ یاک از شارطهاای 6تاا nدرسات نباشاد ،مجموعههدسهتورات n+1اجارا
خواهند شد.
در هنگام استفاده از این ساختار به نکات زیر دقت کنید:
.6تعدا بخشهای elifاختیاری است و محدودیتی در آن وجود ندارد.
.0بخش elifنمیتواند قبل از ifیا بعد از elseقرار بگیرد.
.9در این ساختار وجود elseاختیاری است.
@PythonForever
11فصل اول
برنامهای که عددی را خواند ،تشخیص میدهد ،مثبت ،صفر یا منفی است(هد برنامه
مثال .8-4
آشناییباif – elif – elseاست).
مراحلطراحیواجرا:
توضیح :برای محاسبه ریشههاای معادلاه درجاه 0ابتادا ضارایب c ،b ،aرا مایخاوانیم .ساپس دلتاا
( )deltaرا به صورت زیر محاسبه میکنیم:
2
delta = b – 4*a*c
)x1 = x2 = -b / (2*a
وگرنه (اگر )delta > 0معادله دارای دو ریشه مختلف است و ریشههاای معادلاه باه صاورت زیار
محاسبه میشوند:
و
مراحلطراحیواجرا:
@PythonForever
آشنایی با زبان پایتون 10
aضریب x2
bضریب x
cعدد ثابت معادله
deltaمقدار دلتا
x1ریشه اول
x2ریشه دوم
))"a = int(input("Enter a:
))"b = int(input("Enter b:
))"c = int(input("Enter c:
delta = b ** 2 - 4 * a * c
if delta < 0:
)"print("Not root
elif delta == 0:
))print(" x1 = x2 = ", -b/ (2.0 * a
else:
))print(" x1 = ", (-b + delta ** 0.5) / (2.0 * a
))print(" x2 = ", (-b - delta ** 0.5) / (2.0 * a
.0مالول را ذخیره و اجرا کنید .اکنون جلوی ،b: ،a:و c:به ترتیب مقادیر ۳ ،0و 0را وارد
کرده تا خروجی زیر را مشاهده نمایید:
Enter a:2
Enter b:4
Enter c:2
x1 = x2 = -1.0
.2-5مسائل حل شده
مثال.1برنامهایکهنمر عددیدانشجوییرابرمبنای100خواند ،باتوجهبهجدولزیرنمر حرفهی
دانشجورانمایشمیدهد(دراینبرنامهمتغیرgradeنمر است):
پیغام نمر
Fail 0-70
Good 71-80
Very Good 81-90
Excellent 90-100
Invalid Grade <0, >100
مراحلطراحیواجرا:
@PythonForever
11فصل اول
.0مالول را ذخیره و اجرا کرده ،عدد 60را وارد نمایید تا خروجی زیر را مشاهده کنید:
Enter n:12
12 11 10 9 8 7 6 5 4 3 1
Multiply is 479001600
ترینرقمآنرانمایشمیدهد.
برنامهایکهعددیراخواند ،بکرگ
مثال.4
مراحلطراحیواجرا:
@PythonForever
آشنایی با زبان پایتون 11
.0مالول را ذخیره و اجرا کرده ،عدد 801۳326را وارد کنید تا خروجی زیر را ببینید:
Enter n:8564901
Max is 9
برنامهایکهعددی راخواند ،مشخصمینمایدکهآیاعددخواند شد اولاستیاخیر؟
مثال.3
نصفخودشبهجکیکبخشپذیرباشد،عدداولنیست.
عددکوچکتریامساوی
اگرعددیبریک
مراحلطراحیواجرا:
.0مالول را ذخیره و اجرا کرده ،اطالعات زیر را وارد کنید تا خروجی را ببینید:
Enter a string:One equal 1 and Seven equal 7.
Count is 2
مثال.7برنامهایکهتعدادیعددراخواند ،اعدادیکهههمههارقهامآنههابرابهرباشهندرانمهایش
میدهد.درپایان،میانگیناعدادیکهتمامارقامآنهابرابراسترانمایشمیدهد.کاربربرایخهروجاز
برنامهعدد-99راواردمیکند.
مراحلطراحیواجرا:
@PythonForever
11فصل اول
@PythonForever
11 آشنایی با زبان پایتون
مالول.0 print('Satarday')
elif n == 1:
را ذخیره و print('Sunday')
elif n == 2:
print('Monday ')
،کرده اجرا
elif n == 3:
print('Tuesday')
عدد n جلوی
elif n == 4:
print('Wednesday')
را وارد60
elif n == 5:
print('Thursday')
تا کنید
elif n == 6:
print('Friday')
خروجی زیر را
else:
print('Invalid number ')
:ببینید
Enter a number:12
Thursday
@PythonForever
11فصل اول
فصل
توابع
3
ساختار یک برنامه خیلی شبیه به ساختار یک سازمان اسات .یعنای ،در هار ساازمان سااختار سلساله
مراتبی حاکم است .در باالترین سطح سازمان ،مدیریت قرار دارد .هر مدیر میتواند چند معااون داشاته
باشد .هر یک از معاونین نیز میتوانند چندین کارمناد داشاته باشاند .ایان برناماههاا مانناد شارکتهاای
کوچک هستند که مدیر شرکت همه کارهای شرکت را انجام میدهد .ولی ،در بسایاری از ساازمانهاا
چنین وضعیتی حاکم نیست .برنامههای واقعی و کاربردی مانند سازمانهاای بازرگ طاوالنی و پیچیاده
هستند.
مدیر برای انجام هر وظیفهاش یکی از توابع (معاونین) خودش را صدا میزند و احتماالً پارامترهاای
(پروندههای) را در اختیار او قرار داده ،از او میخواهد کار را انجام داده ،نتیجه را برگرداند .هر یک از
توابع (معاونین) نیز خود توابع دیگر (کارمندان خودش) را صدا میزنناد تاا بخشای از کاار را باه آنهاا
محول نمایند و این روند تا انجام کار ادامه دارد .با این تفاسیر ،کاربری که از برنامه اساتفاده ماینمایاد،
نقش مشتری را بازی خواهد کرد که میتواند اطالعاتی را در اختیار سازمان (برنامه) قرار داده ،نتاایجی
را دریافت کند.
استفاده از تابع در برنامهنویسی دارای مزایای زیر است:
.0برنامهنویسی ساخت یافته را امکانپذیر میکند.
.2خوانایی برنامه را افزایش میدهد .همچنین تست ،اشاکالزدایای و خطایاابی برناماه نیاز آساانتار
خواهد شد .چون ،برنامهها به بخشهای کوچکتری تبدیل میشوند .لذا ،خطایابی و اصاال برناماه-
های کوچکتر آسانتر خواهد بود.
@PythonForever
آشنایی با زبان پایتون 11
.3میتوان توابع مورد نیاز را در یک برنامه نوشت و از آنها در برنامههای دیگار نیاز اساتفاده کارد.
مجدد 0نام دارد .بدین ترتیب ،کد نویسی کمتر خواهد شد و تولید نارمافازار ساریعتار این امر ،استفاد
انجام میشود.
.4توابع ،امکان کار گروهی را فراهم میکنند .زیرا ،پس از این که برنامه به بخشهای کوچکتاری
تقسیم شدند ،هر یک از اعضای گروه وظیفه نوشتن و تست توابع مشخص را بر عهده میگیرند .بدین
ترتیب ،اعضای گروه به صورت همزمان روی بخشهای مختلف برنامه کار میکنند (بادون ایان کاه
منتظر همدیگر باشند) .انجام کار به صورت گروهی موجب میشود تا برنامهها سریعتر آماده شوند.
.5توابع امکان استفاده از کارهایی که دیگران انجام دادهاناد ،را فاراهم مایکنناد .یعنای ،در برناماه-
هایتان میتوانید از توابعی که دوستانتان آماده کردهاند ،استفاده کنید.
.6توابع ،امکان ایجاد کتابخانه را فراهم میکنند .کتابخانه ،مجموعه توابعی هستند که ماورد نیازتاان
میباشند ( مجموعه توابعی که به هم مرتبطاند) .بنابراین ،میتوان مجموعه تواباع مارتبط باه هام را در
یک فایل کتابخانه (بسته) قرار داد و در برنامهها از این فایل کتابخانه استفاده نمود.
.3 – 0انواع توابع
در هر زبان برنامهنویسی دو نوع تابع وجود دارد که عبارتاند از:
.0توابعکتابخانهای ،توابعی میباشند که همراه کامپایلر یا مفسر وجود دارند .این تواباع را تواباع
عمومی نیز مینامند .زیرا ،کاربردهای زیادی دارند .توابع کتابخانهای را با توجاه باه کااربرد آنهاا
دستهبندی کردند و هر یک از دستهها را در فایل مالول خاصی قرار دادهاند .تااکنون باا برخای از
این توابع نظیر )( int() ،printآشنا شدید .در اداماه باا بعضای از تواباع مهام کتابخاناهای باه هماراه
کاربرد آنها آشنا خواهید شد.
@PythonForever
11فصل اول
.3 – 2 – 1نوشتن تلبع
برای نوشتن تابع باید آن را تعریف کرد:
تعریف تابع
قبل از این که تابعی را بنویسید باید تابع را تعریف کنید .تعریف تابع تعیین مایکناد ،ایان تاابع چاه
ورودیهای دارد ،چه چیزی را برمیگرداند (خروجای تاابع چیسات) و چاه عملای را انجاام مایدهاد.
الگوی (امضای) تابع ،به صورت زیر است:
(:لیستپارامترها)نامتابعdef
بدنهتابع
@PythonForever
آشنایی با زبان پایتون 11
;3. return
ساختار اول ،یک مقدار را برمیگرداند .به عنوان مثال ،دستورات زیر را ببینید:
;return False
;return 10
دستور اول ،مقدار Falseرا برمیگرداند و دستور دوم ،مقدار 62را برگشت خواهد داد.
اما ،ساختار دوم ،یک عبارت را ارزیابی کرده ،نتیجاه ارزیاابی عباارت را برگشات خواهاد داد .باه
عنوان مثال ،دستور زیر را مشاهده کنید:
)return (2 * i – 3
این دستور 0 ،را در iضرب کرده 9 ،واحد از این حاصل کم میکند و برمیگرداند.
ساختار سوم ،بدون این که تابع مقداری را برگرداند ،از تابع برمیگردد.
.3توابعیکهچندینمقداررابرمیگردانند .این نوع توابع را در ادامه میبینید.
نامتابع،از قانون نامگذاری شناسهها و متغیرها پیروی میکند و برای دسترسی به تابع به کار مای-
رود.
پارامترهایتابع،اطالعاتی هستند که در هنگام فراخوانی تابع باید به آن ارسال گردند .توابع مای-
توانند از لحاظ تعداد پارامترهایی که میپذیرند به گروههای زیر تقسیم گردند:
.0توابعبدونپارامتر ،این توابع معموالً برای چاپ پیغام مشخصی به کار میروند.
ناستیکپارامترداشتهباشد .در این صورت باید نام پارامتر تعیین گردد. تابعمم .2
برخی از این توابع عبارتاند از:
@PythonForever
11فصل اول
تابعی که دو عدد را دریافت کرده ،بزرگترین مقسوم علیه مشترک آنهاا را برمایگرداناد (ایان
تابع دارای دو پارامتر است).
تابعی که سه عدد را دریافت کرده ،کوچکترین عدد را برمیگرداند (این تابع سه پارامتر دارد).
تابعی که دو عدد را دریافت کرده ،اولین عدد را به توان عدد دوم رسانده و برمیگرداند.
تابعی که دو عدد را گرفته ،محتویات آنها را تعویض میکند.
و غیره.
بدنه تابع
عملی که تابع باید انجام دهد ،در بدنه تابع قرار میگیرد.بدنهتابع ،مجموعه دساتوراتی هساتند کاه
تابع باید اجرا کند.
.3 – 2 – 2فراخوانی تلبع
دستوری که تابع را صدا زده ،از آن استفاده میکناد،فراخهوانیتهابع ناام دارد .فراخاوانی تاابع باه
صورت زیر انجام میشود:
(لیستآرگومانها)نامتابع
درهنگامنوشتنواستفاد ازتوابعبایدبهن اتزیرتوجهکنید:
.0تعداد پارامترها (در هنگام تعریف تابع) بایاد باا تعاداد آرگوماانهاا (در هنگاام فراخاوانی)
یکسان باشد (ممکن است نام آنها یکی نباشد).
.2در پایتون میتوان تابعی را در داخل تابع دیگر تعریف کرد.
@PythonForever
آشنایی با زبان پایتون 10
برنامه ،مالول اصلی همه کاره است .یعنی ،دو عدد صحیح را از کاربر (مشتری) گرفته ،خودش حاصل
جمع دو عدد را محاسبه کرده ،چاپ میکند (در اختیار مشتری قرار میدهد) .این فرآیند در شاکل -6
9آمده است.
در روش دوم پیادهسازی ،مالول اصلی دو عدد aو bرا از کااربر گرفتاه ،در اختیاار تاابع addition
(کارمند خودش) قرار میدهد تا حاصل جمع این دو عدد را حساب کند .تابع additionپس از محاسبه
حاصل جمع دو عدد (مانند کارمند) نتیجه را در اختیار مالول اصلی (مدیریت) قرار مایدهاد و ماالول
اصلی این نتیجه را به کاربر (مشتری) میدهد .پیادهسازی این روش به صورت زیر است:
def addition (a, b):
return a + b
)"a = int (input("Enter a:
)"b = int (input("Enter b:
)c = addition (a, b
)print( a, " + ", b, " = ", c
مثال .3 –5برنامهایکهعددnراخواند ،اعدادکامل(تام)1تاnرانمایشمیدهد(ههد ایهنبرنامههبهه
کارگیریمجددتابع)(isPerfectنوشتهشد درمثال4-3میباشد).
مراحلطراحیواجرا:
@PythonForever
11فصل اول
توضیح :در این برنامه تابع )( factبرای محاسبه فاکتوریل پیادهسازی شده است.
مراحلطراحیواجرا:
n اصلی
عدد ورودی
شمارنده 9تا nبا گام افزایش 9 i
@PythonForever
آشنایی با زبان پایتون 11
.3-مسائل حل شده
مثال .1برنامه ایکهعددیراخواند ،رقماولازسمتچپرابتوانرقمدوم،نتیجهرابههتهوان
رقمسوموهمینروندراادامهمیدهد.
@PythonForever
11فصل اول
مراحلطراحیواجرا:
عددی که باید رقم آن باه تاوان رقام بعادی برساد(از سامت پااارا
راست) متر n powDi
gits
توان ارقام p
def reverse(n):
s=0
while n > 0:
s = s * 10 + n % 10
n = n // 10
return s
def powDigits(n):
p = n % 10
n = n // 10
while n > 0:
)p = p ** ( n % 10
n = n // 10
return p
))"x = int( input("Enter x:
)n = reverse(x
))print("Result:", powDigits(n
ماژولاصلی ،ابتدا عدد را خوانده ،آن را مقلوب میکند و در nقرار مایدهاد ،ساپس باا فراخاوانی
تابع )( ،powDigitsارقام مقلوب شده را از سمت راست به توان هم میرساند.
تابع)( ،reverseعدد nرا به عنوان پارامتر دریافت کرده ،آن را مقلوب مینمایاد و در sقارار مای-
دهد و sرا برمیگرداند.
@PythonForever
آشنایی با زبان پایتون 11
را دریافت کرده ،ارقام آن را از سمت راست جدا کرده ،هر رقم را به تابع)( ،powDigitsپارامتر n
توان رقم دیگر میرساند( در pقرار میدهد) و نتایج را به توان رقم بعادی مایرسااند .ایان عمال را تاا
آخرین رقم ادامه میدهد و در پایان p ،را برمیگرداند.
.2پروله را ذخیره و اجرا کرده ،عدد 0906را وارد کنید تا خروجی را به زیر ببینید:
Enter x:2351
Result: 32768
مثال .2برنامهایکهعددیراخواند ،تشخیصمیدهداولیاناماست.عددیاولاستکهمجموعمقسوم
علیههایکوچکترازخودشبرابریکباشدوعددیتام(کامل)استکهمجموعمقسهومعلیههههایکوچهکتهراز
خودشبرابرخودشباشد.
مراحلطراحیواجرا:
@PythonForever
11فصل اول
مجموع اعدادی که ص درفر رقم آنها نباشد و بار 7بخاش su ماااااالول
m
پذیرند اصلی
اعداد 6222تا 3333 i
@PythonForever
آشنایی با زبان پایتون 11
عددی که باید تعیین شود آیا رقم صفر در آن وجود دارد یاا n nonZero
نه؟
def nonZero(n):
while n > 0:
if n % 10 == 0:
return False
n = n // 10
return True
sum = 0
for i in range(1000, 10000):
if i % 7 == 0 and nonZero(i) == True:
sum += i
)print("Sum:", sum
ماژولاصلی،ابتدا sumرا برابر صفر قرار داده ،با استفاده از یک حلقه تکرار اعداد 6222تاا 3333
که در ارقام آنها صفر نباشد و بر 7بخش پذیرناد را باا sumجماع کارده ،در پایاان sum ،را نماایش
میدهد.
تابع)( ،nonZeroپارامتر nرا دریافت کرده ،اگر در ارقاام آن صافر نباشاد ،مقادار ،Trueوگرناه
مقدار Falseرا برمیگرداند.
.2مالول را ذخیره و اجرا کرده تا خروجی زیر را ببینید:
Sum: 5211759
@PythonForever
11فصل اول
فصل
آرایهها و بسته NumPy
4
تاکنون برنامههایی که نوشتهشدهاند ،هر متغیر حداکثر یک مقدار را در یاکلحظاه نگاهداری مای-
کرد .یعنی ،داده جدید جایگزین داده فعلی در یک مکان حافظه میشود .بهعنوانمثال ،دساتورات زیار
را در نظر بگیرید:
sum = 0
for i in range(5):
))"num = int(input("Enter a number:
sum += num
)print(sum / 5
این دستورات 0عدد را خوانده ،میانگین آنها را نمایش میدهند .حال ،اگر بخواهیاد اعادادی کاه
بزرگتر از میانگین هستند را نمایش دهید ،به دادههای خواندهشده قبلی نیاز دارید .در این برناماه داده-
های خواندهشده در numقرار میگیرند .بنابراین ،پس از خواندن 0عدد ،فقط پنجمین عادد در num
قرار دارد .جهت حل این مشکل باید دادههای خواندهشده را نگهداری نمود .برای این منظور ،مایتاوان
به دو طریق زیر عمل کرد:
.0میتوان پنج متغیر (با نامهای متفاوت) در نظر گرفت و هر داده را در یک متغیر ذخیره کارد .ایان
روش دو مشکل عمده دارد که عبارتاند از:
اگر تعداد مقادیر زیاد شود ،تعداد متغیرها نیز زیاد خواهد شد.
.2میتوان از ساختار داده جدیدی به نام آرایه 1استفاده کرد .آرایه ،مجموعهای از عناصر اسات کاه
دارای ویژگیهای زیر باشند:
1
.Array
@PythonForever
آشنایی با زبان پایتون 11
چند خانه از حافظه که داراییکنامباشند .اگر چند نام بارای خاناههاای حافظاه در نظار گرفتاه
شود ،همان مشکل تعریف متغیر و غیرقابلپردازش بودن توسط حلقههای تکرار وجود خواهد داشت.
دارای یکنوع باشند و بهصورتپشتسرهم در حافظه ذخیره شوند .چون ،اگر عناصر آرایه از
یک نوع نباشند و به صوت پشت سرهم ذخیر نشوند ،پیمایش عناصر مشاکل خواهاد شاد .بناابراین،
عناصر آرایه باید دارای یک نوع باشند و بهصورت پشات سارهم ذخیاره گردناد تاا باا داشاتن آدرس
شروع آرایه ( همان نام آرایه) ،بتوان آدرس هر خانه را بهسادگی حساب کرد .این عمل بهصورت زیر
انجام میشود:
;(نوعآرایه) + i * sizeofآدرسشروعآرایه =آدرسخانهiام
بهعنوانمثال ،اگار آدرس شاروع آرایاه aباا ناوع صاحیح 6222 ،باشاد ،آدرس شاروع خاناه ساوم
بهصورت زیر محاسبه میگردد:
= 1000 + 3 * sizeof (int) = 1000 + 12 =1012=100CHآدرسشروعخانهسوم
برای دسترسی به عناصر آرایه از اندیا( 6شماره خانه) استفاده میشود .باه هماین دلیال ،ناام دیگار
آرایهها متغیرهایاندیادار است .آرایهها میتوانند با توجه به تعداد اندیس آنها چند ناوع باشاند کاه
عبارتاند از:
هاییکبعدی،دارای یک اندیس هستند.
.0آرایه
.4 – 0آرایههای یکبعدی
همانطور که بیان گردید ،آرایههای یکبعدی ،یک اندیس دارند .برای استفاده از آرایهها بایاد دو
عمل زیر انجام شود:
.4-1-1تعریف آرایه
1
.Index
@PythonForever
11فصل اول
برای تعریف آرایه میتوانید از کالس arrayاستفاده کنید .این کالس در مالول arrayقارار دارد.
لذا ،برای استفاده از این کالس ابتدا باید مالول arrayرا با دستور زیر به برنامه اضافه کنید:
* from array import
این کالس دو پارامتر را دریافات مایکناد .پاارامتر ،typecodeناوع آرایاه را مشاخص مایکناد.
مقادیری که این پارامتر میپذیرد در جدول ۳ - 6آمدهاند و پارامتر ] ،[initalizerمقادیر اولیه آرایه را
تعیین میکند.
جدول3-1مقادیرپارامترTypeCodeبرایتعریفآرایه.
حداکثر نوعC م حداکثر نوعC م
انداز قدار انداز قدار
6بایت عاادد صاااحیح بااادون 'B 6بایت عاادد صاااحیح باااا 'b
' '
عالمت عالمت
0بایت عدد صحیح با عالمت ''h 0بایت کاراکتری یونیکد 'u
'
0بایت عدد صحیح با عالمت ''i 0بایت عاادد صااحیح باادون '
عالمت 'H
۳بایت عدد صحیح با عالمت ''l 0بایت عاادد صااحیح باادون ''I
عالمت
8بایت عدد صحیح با عالمت ''q ۳بایت عاادد صااحیح باادون 'L
عالمت '
@PythonForever
آشنایی با زبان پایتون 10
دستور اول ،مالول arrayرا به برنامه اضاافه مایکناد ،دساتور دوم ،آرایاهای باه ناام aبادون هایچ
عضوی با نوع صحیح 61بیتی تعریف میکند.
پس از ایجاد آرایه ،اکنون میتوانید با متدهای آن اعمالی را روی آرایه انجام دهیاد .برخای از ایان
متدها و خواص کالس arrayعبارتاند از:
متد)( ،appendبرای اضافه کردن مقداری به انتهای آرایه به کار میرود .بهعنوانمثاال ،دساتورات
زیر را ببینید:
* >>> from array import
)][ >>> a = array('i',
)>>> a.append(12
)>>> print(a
این دستورات ابتدا ،آرایهای به نام aبا نوع صحیح 61بیتی تعریف کرده 60 ،را به انتهای آن اضاافه
میکند و دستور آخر مقدار آرایه ( aیعنی٬)]array('i', [12)را نمایش میدهد.
متد)(،buffer_infoتاپلی را برمیگرداند که آدرس و طول آرایه میباشد.
متد)( ،tobytesمقادیر آرایه را به بایت تبدیل میکند .بهعنوانمثال ،دستورات زیر را ببینید:
* >>> from array import
)][ >>> a = array('I',
>>> for i in range(65, 80):
)a.append(i
))(>>> print(a.tobytes
این دستورات ،آرایهای به نام aبا نوع عدد صحیح بدون عالمت تعریف کرده ،مقادیر 10تاا 73باه
آرایه اضافه میکند و در پایان ،اعضای آرایه را به بایت تبدیل میکند و نمایش میدهد(خروجی زیر):
\b'A\x00\x00\x00B\x00\x00\x00C\x00\x00\x00D\x00\x00\x00E\x00\x00\x00F\x00\x00
x00G\x00\x00\x00H\x00\x00\x00I\x00\x00\x00J\x00\x00\x00K\x00\x00\x00L\x00\x00\x0
'0M\x00\x00\x00N\x00\x00\x00O\x00\x00\x00
متد)( ،extendیک سری عناصر را به انتهای آرایه اضافه میکند .بهعنوانمثاال ،دساتورات زیار را
ببینید:
* >>> from array import
)]>>> a = array('i', [1, 2, 3
)]>>> a.extend([3, 4
))>>> print(str(a
@PythonForever
11فصل اول
این دستورات ،ابتدا آرایهای با نوع صحیح به ناام aباا مقاادیر اولیاه ] [1, 2, 3ایجااد کارده ،ساپس
مقادیر ] [3, 4را به انتهای آن اضافه کرده و در پایان آرایه aرا به صورت زیر نمایش میدهند:
)]array('i', [1, 2, 3, 3, 4
متد)( ،countتعداد تکرار مقداری را در آرایه شمارش میکند .باهعناوانمثاال ،دساتورات زیار را
ببینید:
* >>> from array import
)]>>> a = array('b', [1, 2, 3, 1, 4, 1
))>>> print(a.count(1
این دستورات ،ابتدا آرایهای به نام aبا نوع بایت با مقادیر اولیه ] [1, 2, 3, 1, 4, 1تعریف میکنناد
و در پایان ،تعداد عناصر آرایه را شمارش کرده( ،یعنی )9نمایش میدهد.
متد)( ،indexمکان اولین وقوع مقداری را برمیگرداند .اگر مقدار در آرایه موجاود نباشاد ،پیغاام
خطای صادر خواهد شد .بهعنوانمثال ،دستورات زیر را ببینید:
* >>> from array import
)]>>> a = array('b', [1, 2, 3, 1, 4, 2
))>>> print(a.index(2
))>>> print(a.index(5
این دستورات ،ابتدا آرایهای به نام aبا نوع بایت تعریف کارده ،مقاادیر اولیاه ] [1, 2, 3, 1, 4, 2را
به آن تخصیص میدهند ،سپس مکان اولین وقوع مقدار ( 0یعنای )6 ،را نماایش مایدهناد و در پایاان،
چون مقدار 0در آرایه وجود ندارد ،پیغام خطای زیر را صادر میکنند:
Traceback (most recent call last):
>File "<pyshell#57>", line 1, in <module
))print(a.index(5
ValueError: array.index(x): x not in list
متد)( ،insertعنصری را در مکان خاصی از آرایه اضافه میکند .این متد دو پاارامتر را مایگیارد،
پارامتر اول ،مکانی است که مقدار پارامتر دوم باید قبل از آن درج شود .اگر مقدار پارامتر اول ،بیش-
تر از تعداد عناصر آرایه باشد ،مقدار پارامتر دوم را به انتهای آرایه اضاافه مایکناد .دساتورات زیار را
ببینید:
* >>> from array import
)]>>> a = array('B', [1, 2, 3, 1, 4, 2
)>>> a.insert(1, 45
@PythonForever
آشنایی با زبان پایتون 11
)>>> print(a
)>>> a.insert(10, 45
)>>> print(a
این دستورات ،ابتدا آرایه aرا با نوع بدون عالمت تعریف میکنند ،سپس مقادیر [1, 2, 3, 1, 4,
] 2را به آن تخصیص میدهند ،در ادامه ،مقدار ۳0را به قبل از مقدار ( 0اندیش یک) اضافه کرده،
آرایه ( aیعنی )]array('B', [1, 45, 2, 3, 1, 4, 2) را نمایش میدهند و در پایان ،مقدار ۳0را به انتهای
آرایه aاضافه نموده و آرایه ( aیعنی )] ) array('B', [1, 45, 2, 3, 1, 4, 2, 45را نمایش میدهند.
متد)( ،removeمقداری را از آرایه حذف میکند (اولین وقوع مقدار را از آرایه حذف میکناد).
اگر مقدار در آرایه وجود نداشته باشد ،پیغام خطای صادر خواهد شد .بهعنوانمثال ،دساتورات زیار را
در نظر بگیرید:
* >>> from array import
)]>>> a = array('d', [1, 2, 3, 1
)>>> a.remove(1
)>>> print(a
)>>> a.remove(4
این دستورات ،ابتدا آرایهای به نام aبا نوع اعشاری با دقت مضاعف کرده ،مقادیر ] [1, 2, 3, 1را
به اعضای آن تخصیص میدهند ،سپس اولین مقدار 6را حذف کرده ،آرایه ( aیعنی array('d', [2.0,
)] ) 3.0, 1.0را نمایش میدهند .دستور آخر ،میخواهد مقدار 0را از آرایه aحذف کند ،چون در
آرایه وجود ندارد ،پیغام خطای زیر را صادر میکند:
Traceback (most recent call last):
>File "<pyshell#71>", line 1, in <module
)a.remove(4
ValueError: array.remove(x): x not in list
متد)( ،popمقدار عنصری از آرایه را با توجه به اندیس آن برمایگرداناد و آن عنصار را از آرایاه
حذف میکند .اگر اندیس که برای برگرداندن عناصر آرایه به کاار رود بازرگتار یاا مسااوی تعاداد
عناصر آرایه و کوچکتر از صفر باشد ،پیغام خطای صادر میشود .باهعناوانمثاال ،دساتورات زیار را
ببینید:
* >>> from array import
)]>>> a = array('d', [1, 2, 3, 4
))>>> print(a.pop(2
@PythonForever
11فصل اول
))>>> print(a.pop(5
)>>> print(a
دستور دوم ،آرایهای به نام aبا نوع عدد اعشاری با دقت مضاعف تعریف کرده ،مقادیر [1.0, 2.0,
] 3.0, 4.0را به آن تخصیص میدهد .دستور سوم ،عنصر ساوم (یعنای ،عنصار باا انادیس ) 0آرایاه را
برمیگرداند و از آرایه حذف مینماید (مقادار 3.0را نماایش مایدهاد) ،دساتور چهاارم ،مایخواهاد
عنصری با اندیس 0را برگرداند و از آرایه حاذف کناد ،چاون ایان عنصار در آن وجاود نادارد ،پیغاام
خطای زیر را صادر مینماید:
Traceback (most recent call last):
>File "<pyshell#75>", line 1, in <module
))print(a.pop(5
IndexError: pop index out of range
در پایان ،عناصر آرایه aرا نمایش میدهد(خروجی زیر):
)]array('d', [1.0, 2.0, 4.0
متد)( ،reverseعناصر آرایه را معکوس میکند .بهعنوانمثال ،دستورات زیر را در نظر بگیرید:
* >>> from array import
)]>>> a = array('d', [1, 2, 3, 4
)(>>> a.reverse
)>>> print(a
این دستورات ،آرایهای به نام با نوع اعشاری با دقت مضاعف و مقادیر اولیاه ][1.0, 2.0, 3.0, 4.0
] 4.0تعریف کرده ،اندازه هر عنصر آرایه ( aیعنی ) 8 ،را نمایش میدهند.
خاصیت ،typecodeمقدار typecodeآرایهای را برمایگرداناد .باهعناوانمثاال ،دساتورات زیار را
ببینید:
* >>> from array import
)]>>> a = array('I', [1, 2, 3, 4
@PythonForever
آشنایی با زبان پایتون 11
))>>> print(str(a.typecode
این دستورات ،آرایهای به نام aبا نوع عددی صحیح 61بیتی بدون عالمت تعریاف کارده ،مقاادیر
] [1, 2, 3, 4را به آن تخصیص میدهند ،در پایان ،مقدار typecodeآرایه (یعنی ،هماان )Iرا نماایش
میدهند.
اندیس ،شماره خانه آرایه را تعیین میکند .اندیس آرایه در پایتون از صفر شروع میشود .بناابراین،
حداکثر مقداری که اندیس میتواند بپذیرد ،برابر با]-1تعدادعناصرآرایه[ اسات .یعنای ،آرایاهای باا 0
عنصر ،بهصورت زیر نمایش داده میشود:
همانطور که در شکل میبینید ،آخرین خانه آرایه دارای اندیس ۳است .اکناون دساتورات زیار را
ببینید:
@PythonForever
11فصل اول
مراحلطراحیواجرا:
@PythonForever
11 آشنایی با زبان پایتون
@PythonForever
11فصل اول
متد)( ،findSecondMinآرایه aو تعداد عناصر آن ( )nرا بهعنوان پارامتر دریافت کارده ،دوماین
عدد ازلحاظ کوچکی و مکان آن را برمیگرداند .برای این منظور ،ابتادا اولاین عادد آرایاه )] (a[0باا
دومین عدد آرایه )] (a[1مقایسه میکند ،عدد کوچکتر را در min1و مکان آن را در lMin1و عادد
بزرگتر را در min2و مکان آن را در lMin2قرار میدهد .در ادامه ،با یک حلقه forاز ساومین عادد
تا nامین عدد ،ابتدا عدد iام را با min1مقایسه میکند ،اگر کوچاکتار از min1باشاد ،عادد min1را
در ،min2مکان (lMin1)min1را در lMin2قرار داده ،عادد iام را در min1و iرا lMin1قارار مای-
دهد .وگرنه ،اگر عدد iام کوچکتر از min2باشاد ،عادد iام را در min2و iرا در lMin2قارار مای-
دهد .در پایان min2 ،و lMin2را برمیگرداند.
Enter n:8
Orginal array
@PythonForever
آشنایی با زبان پایتون 11
.4-5بسته NumPy
عملیات پایهای مورداستفاده در برنامهنویسی علمی ،آرایهها ،ماتریسها ،حلکنندههای معاادلهاای
دیفرانسیل ،آمار و غیره را در برمیگیرد که بهصورت پیشفارض باهجاز شاماری از عملگرهاای سااده
ریاضیاتی که تنها بر روی یک متغیر ،و نه آرایهها و ماتریس ،قابلاستفادهاند .پایتون چنین قابلیاتهاایی
را بهطور ذاتی در اختیار ندارد .با بسته NumPyمیتوان برخی از این قابلیتها را به زبان پاایتون اضاافه
نمود NumPy .مختص پردازشهای عددی بهوسیلهی آرایههای چندبعادی narraysاسات کاه در آن
آرایهها میتوانند محاسبات درایه به درایه را انجام دهند .بدون اینکه نیاز به تغییر یا اصاال آرایاههاای
Numpyباشد ،میتوان از فرمولهای جبر خطی نیز استفاده کرد .عالوه بر این انادازهی آرایاه را مای-
توان بهصورت پویا تغییر داد.
دقت داشته باشید که بسته Numpyیک افزونه است که بایاد بار روی مفسار پاایتون نصاب
گردد .یعنی ،در هنگام نصب نرمافزار پایتون ،این بسته باهطاور خودکاار بار روی پاایتون نصاب
نمیشود .فرآیند نصب Numpyبر روی سیستمعامل مختلاف ،متفااوت اسات .لاذا ،مایتوانناد
فرآیند نصب مالول Numpyرا از سایت انتشارات فناوری نوین دانلود کنید.
.4-5-1آرایههای NumPy
،Numpyیک بسته بنیادی پایتون برای محاسبات علمی است .این بسته قابلیتهای آرایه Nبعادی،
عملیات درایه به درایه ،عملیات اصلی مانند جبر خطی توانایی فراخوانی کادها C ،ّFortranو C++را
جمعآوری کرده است .عملیات بر روی آرایهها از طریق Numpyتقریبااً حادود 00برابار ساریعتار از
حالت معمولی انجام میشود .به همین دلیل ،در این بخش بسته Numpyرا میآموزیم.
@PythonForever
11فصل اول
مهمترین شیء تعریفشده در ،Numpyیک نوع آرایه Nبعادی کاه ndarrayنامیاده مایشاود،
است .آرایه ،ndarrayمجموعهای از عناصر هم نوع هستند .اندیس شاروع عناصار صافر اسات .انادازه
همه عناصر یکی است .هر عنصر در ndarrayیک شیء از شایء ناوع داده ( dtypeنامیاده مایشاود)،
است.
Numpyپایه با استفاده از تابع arrayدر Numpyبهصورت زیر ایجاد میشود:
Numpy.array
برای ایجاد آرایه میتوانید از متد arrayبهصورت زیر استفاده کنید:
)Numpy.array(object, dtype = none, copy = tyue, order = none, subok = false, ndmin=0
پارامتر ،objectشی مربوطه را تعین میکند.
پارامتر ،dtypeنوع عناصر آرایه را تعیین میکند.
پارامتر ،copyتعیین میکند آیا شیء کپی شود یا نه؟
پارامتر ،orderروش ذخیاره آرایاه را تعیاین مایکناد ،'C' ،ذخیارهساازی باهصاورت ساطری،'F' ،
ذخیرهسازی بهصورت ستونی و '( 'Aهر دو) میباشد.
پارامتر ،ndminحداقل تعداد ابعاد آرایه را مشخص میکند.
@PythonForever
آشنایی با زبان پایتون 10
دستور اول مالول numpyرا با نام npبه برنامه اضافه میکناد ،دساتور دوم ،آرایاه دوبعادی باا دو
سطر و دو ستون باه برناماه اضاافه مای کناد و دساتور ساوم ،اطالعاات آرایاه دوبعادی را نماایش مای-
دهد(خروجی زیر):
][[1 2 ]][3 4
دستورات زیر یک آرایه ایجاد میکنند که نوع هر عنصر آن مختلط میباشد و سپس
)[ 1.+0.jرا نمایش میدهند: خروجی (یعنی ]2.+0.j 3.+0.j 4.+0.j
(نوع صحیح پیشفرض 90یا 1۳بیتی)( intc ،ناوع صاحیح زباان ( intp )cعادد صاحیح کاه
برای شاخص گذاری استفاده میشود)( int8 ،بایت)( int16 ،عادد صاحیح 61بیتای)int32 ،
(عدد صحیح 90بیتی) ( int64عدد صحیح 1۳بیتی) ( floatعدد اعشاری 1۳بیتی)float16 ،
(عدد اعشاری 61بیتی)( float32 ،عدد اعشاری 90بیتی)( float64 ،عدد اعشاری 1۳بیتی)،
( complexعدد مختلط 608بیتی)( complex64 ،عدد مختلط 1۳بیتی(دو عدد 90بیتی)) و
( complex128عدد مختلط 608بیتی) باشد.
متد)( ،dtypeاین متد یک شیء نوع داده ایجاد میکند که بهصورت زیر به کار میرود:
)numpy.dtype (object, align, copy
پارامتر ،objectبرای تبدیل شیء به نوع داده به کار میرود.
پارامتر ،alignاگر trueباشد ،الیه گذاری اضافه میکند تا ساختار شبیه Cرا به وجود آورد.
پارامتر ،copyاگار trueباشاد ،یاک کپای جدیاد از شایء dtypeایجااد مایکناد ،وگرناه ارجااع
ایجادشده در شیء نوع داده را برمیگرداند.
بهعنوانمثال ،دستورات زیر را ببینید:
>>> import numpy as np
)>>> dt = np.dtype(np.int32
)>>> print(dt
)'>>> dt1 = np.dtype('i4
)>>> print(dt1
@PythonForever
11فصل اول
(صحیح 90بیتی) در نظر میگیرد ،دستور سوم ،مقادار dtرا نماایش مایدهاد (هماان ،)int32دساتور
چهارم dt1 ،را با نوع int32در نظر میگیرد ( زیارا باهجاای int32 ،int16 ،int8و int64باه ترتیاب
میتاوان معاادل آنهاا ' 'i3' ،'i2' ،'i1و ' 'i4را جاایگزین کارد) ،دساتور پانجم ،مقادار )int32( dt1را
نمایش میدهد ،دستور ششم ،یک نوع داده ساخته یافته ایجااد کارده ،در dt2قارار مایدهاد و دساتور
هفتم ،مقدار )[('age', 'i1')]( dt2را نمایش میدهد.
اکنون دستورات زیر را ببینید:
>>> import numpy as np
)])>>> dt = np.dtype([('age', np.int8
)>>> a = np.array([(5, ), (10, ), (15, )], dtype = dt
)]'>>> print(a['age
دستور اول ،مالول numpyرا با نام npباه برناماه اضاافه مایکناد ،دساتور دوم ،سااختاری از ناوع
دیکشنری ایجاد کرده ،در dtقرار میدهد ،دستور سوم ،آرایهای با سه عنصر به ناام aباا ناوع dtایجااد
مینماید و دستور چهارم ،اطالعات آرایه )[ 5 10 15]( aرا نمایش میدهد.
خاصیت ،ndarray.shapeاین خاصیت تاپلی را برمیگرداند که شاامل ابعااد آرایاه اسات .از ایان
خاصیت میتوان برای تغییر اندازه آرایه نیز استفاده کرد .بهعنوانمثال ،دستورات زیر را ببینید:
][[1 3
][5 2
@PythonForever
آشنایی با زبان پایتون 11
]][4 6
متد)( ،reshapeبرای تغییر ابعاد آرایه به کار میرود .این متد بهصورت زیر استفاده میشود:
)' .reshape (shape, order = 'cنام آرایه
پارامتر ،shapeتعاداد ابعااد را مشاخص مایکناد .عملکارد پاارامتر orderرا در متاد arrayدیدیاد.
بهعنوانمثال ،دستورات زیر را ببینید:
][[1 3
][5 2
]][4 6
خاصیت ،rdarray.ndimتعداد ابعاد آرایه را برمیگرداند.
خاصیت ،ndarray.itemsizeاندازه عناصر آرایه را برمیگرداند .بهعناوانمثاال ،دساتورات زیار را
ببینید:
>>> import numpy as np
)>>> a = np.array([[1, 3, 5], [2, 4, 6], [3, 7, 8]], dtype=np.float32
)>>> print(a.ndim
)>>> print(a.itemsize
دستور اول ،مالول numpyرا با نام npبه برنامه اضافه میکند ،دستور دوم ،آرایهای 9 × 9به نام باا
نوع float32ایجاد میکند ،دستور سوم ،تعداد ابعاد آرایه ( aیعنی )0را نمایش میدهد ،دستور چهارم،
اندازه هر عنصر (یعنی ۳برای )float32را نمایش میدهد.
متد)( ،numpy.emptyیک آرایه بدون مقدار اولیه ایجاد میکند که بهصورت زیار باه کاار مای-
رود:
)numpy.empty (shape, dtype, order
@PythonForever
11فصل اول
@PythonForever
آشنایی با زبان پایتون 11
متد)( ،numpy.asarrayآرایهای ایجاد کرده ،عناصر آن را با دادهای موجود پر میکند .ایان متاد
بهصورت زیر به کار میرود.
)numpy.asarray (a, dtype, order
،aپارامتری است که داده ورودی را تعیین میکند که آرایه باید با آن پر شود .این داده میتواناد
لیست تاپلی ،تاپلی از تاپل یا تاپلی از لیست باشد .با پارامترهای dtypeو orderدر متد )( arrayآشنا
[ 1. 4. شدید .بهعنوانمثال ،دستورات زیر اطالعات لیست xرا در آرایه aقرار میدهند و آرایاه ( a
)6.را نمایش میدهند: ]8.
@PythonForever
11فصل اول
فصل
رشتهها
5
رشته ،یکی از پرکاربردترین انواع داده در پایتون است .رشتهها ،دنبالهای از کاراکترها هستند که
در داخل تک کتیشن(') یا جفت کتیشن(") قرار میگیرند .بهعنوانمثال ،دستوارت زیر را ببینید:
'>>> url = 'www.fanavarienovin.net
">>> language = "Python programming
دستور اول ،رشتهای به ناام urlتعریاف کارده ،مقادار ` `www.fanavarienovin.netرا در آن قارار
میدهد ،دستور دوم ،متغیری به نام languageبا مقدار " "Phython.Programmingایجاد میکند.
.5-1عملگرهای رشتهای
جدول6–1عملگرهایرشتهای.
هد نام عملگر
@PythonForever
آشنایی با زبان پایتون 11
عملگرهایی وجود دارند که برای کار بر روی رشتهها استفاده میشوند .خالصه این عملگرها در
جدول 0-6آمدهاند .در ادامه شر کامل این عملگرها را میبینید.
عملگر ،+برای اتصال دو رشته به کار میرود .بهعنوانمثال ،دستورات زیر را ببینید:
">>> name = "fanavarienovin
">>> url = "www." + name + ".net
)>>> print(url
دستور اول ،رشتهای به نام nameبا مقدار " "fanavarienovinایجاد میکند ،دستور دوم ،رشتههای
" "www.و ` `.netرا به ترتیب به ابتدا و انتهای رشته nameاضافه میکند تا رشته urlرا تولید کند و
دستور سوم ،محتوی ( urlیعنی)www.fanavarienovin.net"" ،را نمایش میدهد.
عملگر* ،رشتهای را چندین بار تکرار میکند .بهعنوانمثال ،دستورات زیر را ببینید:
>>> s1 = "Python" * 5
)>>> print(s1
دستور اول ،رشته " "Pythonرا پنج بار تکرار کرده ،در متغیر رشتهای به نام s1قرار میدهد،
دستور دوم ،محتوی رشته ( s1مقدار )PythonPythonPythonPythonPythonرا نمایش میدهد.
عملگر] [ ،کاراکتر خاصی از رشته را برمیگرداند .بهعنوانمثال ،دستورات زیر را ببینید:
">>> s = "Python
)]>>> print(s[3], s[4], s[1
دستور اول ،رشته sرا با مقدار " "Pythonتعریف میکند .اکنون کاراکترهای رشته بهصورت زیر
اندیس گذاری میشوند:
P y t h o n
]s[0 ]s[1 ]s[2 ]s[3 ]s[4 ]s[5
دستور دوم ،مقادیر اندیسهای )`0`( 4 ،)`h`( 3و )`y`( 1را به ترتیب نمایش میدهد(مقدار
.)hoy
دقت کنید که اگر بخواهید به اندیسی دسترسی داشته باشید که وجود ندارد ،از طرف مفسر پایتون
خطا صادر میشود .بهعنوانمثال ،دستور زیر را ببینید:
@PythonForever
11فصل اول
)]>>> print(s[10
چون اندیس 62برای رشته sوجود ندارد ،پیغام خطای زیر صادر خواهد شد:
Traceback (most recent call last):
>File "<pyshell#13>", line 1, in <module
)]print(s[10
IndexError: string index out of range
برشرشتهها) ،برای برش رشته به کار میرود ،بهطوریکه از کاراکتر nرشته تا
عملگر]([n:m
کاراکتر mآن را جدا میکند .قبل از اینکه به برش رشته بپردازیم ،نحوه ذخیرهسازی و اندیس
گذاری رشته را شر میدهیم .بهعنوانمثال ،دستور زیر را مشاهده کنید:
">>> s = "www.fanavarienovin.net
در هنگام برش رشته ،اندیسها میتوانند مثبت یا منفی باشند .اگر اندیسها مثبت باشند ،با توجه به
مقادیر nو mکاراکترهای اندیس nتا mرشته را برمیگرداند(کاراکتر اندیس mرا برنمیگرداند).
بهعنوانمثال ،دستور زیر را ببینید:
)]>>> print(s[5:12
>>> print(s[8:19]).
دستور اول ،کاراکترهایی از اندیس 0تا 66رشته sرا نمایش میدهد (یعنی ،از کاراکتر aتا
کاراکتر iهمان رشته " ) "anavariو دستور دوم ،از کاراکتر 8تا کاراکتر 68رشته ( sیعنی ،همان
رشته " )"varienovin.را برمیگرداند .در هنگام برش رشته میتوان mرا حذف کرد ( یعنی بهصورت
] [n:استفاده نمود) .در این صورت ،از nامین کاراکتر تا انتهای رشته را برمیگرداند .بهعنوانمثال،
دستورات زیر را ببینید:
)]>>> print(s[15:
)]>>> print(s[13:
@PythonForever
آشنایی با زبان پایتون 11
دستور اول از کاراکتر 60رشته sتا انتهای آن (یعنی 7 ،کاراکتر آخر رشته همان " )"vin.netرا
نمایش میدهد و دستور دوم ،از کاراکتر 69رشته sتا انتهای آن (یعنی ،رشته " )"novin.netرا نمایش
میدهد.
در هنگام برش رشته میتوان nرا حذف کرد (یعنی بهصورت ] [:mاستفاده کرد) .در این صورت،
از شروع رشته تا قبل از کاراکتر mآن را برمیگرداند .بهعنوانمثال ،دستورات زیر را ببینید:
)]>>> print(s[:8
>>> print(s[:4]).
دستور اول ،از کاراکتر شروع تا کاراکتر 8رشته (یعنی ،همان ` ) `www.fanaرا نمایش میدهد و
دستور دوم ،از کاراکتر شروع تا کاراکتر چهارم (یعنی ` )`www.را نمایش میدهد.
در هنگام برش رشته میتوان mو nرا دو عدد منفی وارد کرد .در این صورت ،بهجای استفاده از
اندیسهای پایین رشته از اندیسهای باالی رشته شکل فوق استفاده میکند .بهعنوانمثال ،دستورات
زیر را ببینید:
)]>>> print(s[-4:-1
)]>>> print(s[-17:-10
دستور اول ،کاراکترهای از اندیس -4تا اندیس -2رشته را جدا کرده (یعنی ` )`.neو نمایش
میدهد و دستور دوم ،کاراکترهای از اندیس -17تا -11را جدا کرده (یعنی ) `anavari` ،و نمایش
میدهد .مانند حالتهای قبل میتوان اندیسهای mو nرا حذف کرد .درصورتیکه اندیس mحذف
شود و nمنفی باشد ،از اندیس –nتا انتهای رشته را برمیگرداند .بهعنوانمثال ،دستور زیر را ببینید:
)]>>> print(s[-4:
این دستور از اندیس -4تا انتهای رشته (یعنی " )".netرا نمایش میدهد.
اگر اندیس nحذف شود ،از کاراکترهای ابتدای رشته تا اندیس – m - 1را برمیگرداند.
بهعنوانمثال ،دستور زیر را ببینید:
)]>>> print(s[:-10
این دستور از ابتدای رشته (یعنی ،اندیس )-22تا اندیس -11آن را نمایش میدهد (یعنی ،رشته
` `www.fanavariرا نمایش میدهد).
@PythonForever
11فصل اول
در هنگام برش رشته ،چنانچه اندیس اول بزرگتر یا مساوی اندیس دوم باشد ،نتیجه برش
یکرشته تهی خواهد بود .بهعنوانمثال ،دستورات زیر را ببینید:
)]>>> print(s[12:11
)]>>> print(s[-11:-12
)]>>> print(s[14:14
دستور اول ،میخواهد از اندیس 60تا 66را برش دهد ،چون 60بزرگتر از 66است ،یکرشته
تهی (خالی) را نمایش میدهد ،دستور دوم ،نیز یکرشته تهی را برمیگرداند .چون -11بزرگتر از -
12است و دستور سوم ،همچنین یکرشته تهی را برمیگرداند ،چون 14برابر 14است.
عملگر ،inرشتهای را در رشته دیگر جستوجو میکند .چنانچه رشته اول در رشته دوم باشد،
،Trueوگرنه Falseرا برمیگرداند .بهعنوانمثال ،دستورات زیر را ببینید:
">>> s = "Python
)>>> print("th" in s
دستور اول ،رشته sرا با مقدار ` `Pythonتعریف میکند و دستور دوم ،رشته ` `thرا در s
جستوجو میکند و نتیجه را نمایش میدهد ،چون ` `thدر sوجود دارد ،نتیجه Trueنمایش داده
میشود.
عملگر،not inرشتهای را در رشته دیگر جستوجو میکند ،چنانچه رشته اول در رشته دوم موجود
نباشد ، True ،وگرنه Falseرا برمیگرداند .دستورات زیر را مشاهده کنید:
">>> s = "Python
)>>> print("th" not in s
دستور اول ،رشته sرا با مقدار " "Pythonتعریف میکند و دستور دوم ،مقدار Falseرا نمایش
میدهد ،چون رشته thدر رشته sوجود دارد.
ایکهرشتهایراخواند ،اعمالزیرراانجاممیدهد(هد اینبرنامهآشناییبا
برنامهمثال.6-1
عملگرهایرشتهاست):
جایگکینمیکند.
.6قبلازرشتهعبارت""Helloراقرارداد وبارشتهخواند شد
@PythonForever
آشنایی با زبان پایتون 10
مراحلطراحیواجرا:
sرشته ورودی
nاندیس کاراکتری که باید برگردانده شود یا اندیس شروع کاراکتری که باید برگردانده شود.
s1رشتهای که باید جستوجو گردد.
iشمارنده 6تا 0
mاندیس پایان کاراکتری که باید برگردانده شود.
.0مالول را ذخیره و اجرا کنید .نمونه خروجی این مالول در زیر آمده است:
Enter a string:python
Hello python
Enter n:7
y
Enter a string for search:llo
Yes
Enter n:1
Enter m:3
el
Enter n:-7
Enter m:-4
@PythonForever
11فصل اول
py
Enter n:3
Enter m:9
lo pyt
Enter n:-4
Enter m:-6
Enter n:6
Enter m:6
شروعمیشوند.
جدول6-8کاراکترهایچاپنشدنیکهبا\
هد معادلمبنای16 متغیر
نشانگذاری مبنای 61را انجام میدهد که در آن nبین 2تا ،`C` ،`B` ،`A` ،3 \xnn
عملگر\ ،کاراکترهای غیرقابلچاپ (چاپ نشدنی) را ارائه میدهد که هریک از کاراکترها مفهوم
خاصی دارند .تاکنون با نمونه این کاراکترها ` `\tآشنا شدید .در جدول 0-0برخی از کاراکترهای
چاپ نشدنی و مفهوم آنها که با کاراکتر \ شروع میشوند ،آمدهاند.
@PythonForever
آشنایی با زبان پایتون 11
عملگر ،%یکی از عملگرهای جالب پایتون است که برای قالببندی رشته به کار میرود.
کاراکترهای که بعدازاین عملگر قرار میگیرند ،هریک برای قالببندی دادههای خاصی به کار
میروند .برخی از این کاراکترها و عملکردهای آنها در جدول 0-9آمدهاند.
میروند.
ییکهبرایقالببندیبهکار
کاراکترها جدول6-4
هد متغیر
@PythonForever
11فصل اول
>>> a = 20
)))>>> print( %10i, %18d, %E" %(a, -a, float(a
با اجرای این دستورات aبرابر 22شده و خروجی زیر نمایش داده میشود:
20, -20, 2.000000E+01
همانطور که در این خروجی میبینید ،قبل از عدد 02هشت فاصله نمایش دادهشده است .چون،
02با فرمت %62iچاپ شد که در چاپ به شکل زیر عمل میکند:
2 0
بیست را به سمت چپ انتقال داده و 8فاصله قبل از آن نمایش داده است .سپس ،یک کاما نمایش
داده است و عدد )-20( –aرا با فرمت %18dچاپ کرده است که 60فاصله قبل از آن قرار میگیرد
(بهصورت زیر عمل میکند):
- 2 0
سپس یک عالمت کاما نمایش داده است و معادل عدد اعشاری aرا بهصورت 20000000E+01با
فرمت %Eنمایش داده است.
اکنون دستورات زیر را در نظر بگیرید:
>>> a = 125
))>>> print("%d\t%o\t %x\t%X\n%08i" % (a, a, a, a, a
دستور اول a ،را برابر 600قرار میدهد و دستور دوم ،خروجی زیر را نمایش میدهد:
125 175 7d 7D
00000125
همانطور که در این خروجی مالحظه میشود ،عدد 125با فرمت %dنمایش داده میشود ،سپس
چون کاراکتر \tآمده است ،مکاننما به تب بعدی انتقال مییابد و عدد صحیح 125به مبنای 8
تبدیلشده و خروجی 175نمایش داده میشود ،با کاراکتر ` `\tمکاننما به تب بعدی میرود و مقدار
125با فرمت %xبه عدد مبنای 61یعنی 7dتبدیلشده و نمایش داده میشود ،در ادامه کاراکتر ``\t
مکاننما را به تب بعدی انتقال میدهد و عدد 125با فرمت %xبه مبنای 61تبدیلشده و مقدار 7D
نمایش داده میشود ،در پایان ،کاراکتر ` `\nمکاننما را به سطر بعدی انتقال میدهد و عدد 125با
@PythonForever
آشنایی با زبان پایتون 11
فرمت %08iبهصورت 00000125نمایش داده میشود که بهجای کاراکتر Spaceقبل از عدد با صفر
پر میشود.
.5-6مسائل حل شده
کندونمایشمیدهد.
ایرادررشتهدیگرپیدامی برنامهایکهباتابعیکهتعدادت راررشته
مثال .1
مراحلطراحیواجرا:
mainStrرشته ورودی
subStrرشتهای که باید جستجو شود مالول اصلی
قرار len2 و طول رشته اصلی ( )strرا در len1 دریافت کرده ،طول رشته مورد جستوجو را به
قرار میدهد و تعداد تکرار رشته را برابر صفر قرار -1 میدهد .اندیس پیمایش رشته iرا برابر
@PythonForever
11فصل اول
میدهد ،اگر طول رشته مورد جستوجو ( )len1بیش از طول رشته اصلی ( )len2باشد ،یک پیغام را
برمیگرداند ،وگرنه ،تا زمانی که iکوچکتر یا مساوی len2 - len1 + 1باشد ،ابتدا به iیک واحد
اضافه میکند و substrرا با ]( str[i : i + len1یعنی مکان فعلی رشته تا طول رشته مورد جستوجو
جلو میرود .بدین معنی که به طول رشته مورد جستوجو از رشته اصلی جدا میکند) مقایسه کرده و
اگر این دو مقدار برابر باشند ،به countیک واحد اضافه میکند ،سپس شرط حلقه را بررسی میکند.
عمل مقایسه را برای رشتههای بعدی که از مکانهای بعدی رشته اصلی جدا میگردد ،انجام میدهد.
در پایان count ،را برمیگرداند.
.0مالول را ذخیره و اجرا کرده ،اطالعات زیر را وارد کنید تا خروجی را ببینید:
Enter a string:C++ is a very good language. Python is a good language.
Enter a string for find:good
Count is 2
ایکهرشته ایراخواند ،تمامکاراکترهایکوچکرشتهرابهبکرگوکاراکترهای
برنامهمثال.8
بکرگرابهکوچکتبدیلمیکند.
مراحلطراحیواجرا:
def charChange(str):
"" = s
for i in range(0, len(str)):
if str[i].islower() == True:
)(s += str[i].upper
else:
)(s += str[i].lower
return s
)"str = input("Enter a string:
)str = charChange(str
)print("Result is ", str
@PythonForever
آشنایی با زبان پایتون 11
تابع)( ،charChangeرشته strرا بهعنوان پارامتر دریافت کرده ،ابتدا رشته ( sرشته تغییریافته) را
خالی میکند ،سپس با حلقه forهر کاراکتر رشته strرا پیمایش میکند ،اگر کاراکتر رشته حرف
کوچک باشد ،آن را به حرف بزرگ تبدیل کرده ،به انتهای رشته sاضافه میکند ،در غیر این
صورت ،حرف کوچک ] str[iرا به انتهای رشته sاضافه میکند .در پایان ،رشته sرا برمیگرداند.
.0مالول را ذخیره و اجرا کرده ،نمونه خروجی برنامه را بهصورت زیر ببینید:
Enter a string:Python Is A gooD lanGuage.
Result is pYTHON iS a GOOd LANgUAGE.
فصل
لیستها ،چندتاییها ،دیکشنریها و مجموعهها
6
تاکنون در فصلهای 6تا 0با انواع دادهها از قبیل اعداد ،رشتهها و آرایهها آشنا شدید .در این
فصل انواع دادهای جدیدی از قبیل لیستها ،چندتاییها ،6دیکشنریها و مجموعهها را میآموزیم.
.6-1لیستها
یکی از انواع آماده دیگر در پایتون نوع لیست 0است .لیست در پایتون مجموعهای از مقادیر هستند
که در یک متغیر قرار میگیرند .یعنی ،لیست مانند رشته از دنبالهای از مقادیر تشکیل میشود ،اما
برخالف رشته ،یک نوع تغییرپذیر4است .هر عضو لیست میتواند هر نوع داده باشد .یعنی ،اعضای
لیست میتوانند انواع مختلف داشته باشند .بهعبارتدیگر ،یک عضو رشتهای باشد و عضو دیگر
عددی باشد .حتی گاهی اوقات اعضای آن میتوانند از نوع لیست باشند .اعضای لیست با کاما ( ),از
یکدیگر جدا میشوند .برای تعریف لیست از عملگرهای ] [ استفاده میشود .بهعنوانمثال ،دستور زیر
را ببینید:
][ = >>> list1
@PythonForever
11فصل اول
این دستور یک لیست خالی بهنام list1ایجاد میکند .بهجای این دستور میتوان از دستور زیر
استفاده کرد:
)(>>> list1 =list
@PythonForever
آشنایی با زبان پایتون 11
دستور اول ،یک لیست خالی به نام wordsایجاد میکند ،دستور دوم ،با یک پیغام یکرشته را
میخواند ،در sقرار میدهد ،دستور سوم ،کلمات رشته را جدا کرده ،در لیست wordsقرار میدهد و
دستور چهارم ،محتوای لیست wordsرا نمایش میدهد.
را وارد www fanavarienovin net .0مالول را ذخیره و اجرا کنید .اکنون جلوی string:عبارت
کرده تا خروجی زیر را ببینید:
Enter a string:www fanavarienovin net
[']'www', 'fanavarienovin', 'net
@PythonForever
011فصل اول
این دستور اعضای دو لیست را نظیر به نظیر را باهم مقایسه کرده ،چون برابرند ،خروجی زیر را
نشان میدهد:
True
اکنون دستورات زیر را ببینید:
]'>>> ['Python', 'Program'] == ['PYTHON', 'Program
این دستور دو لیست را باهم مقایسه میکند ،چون عضو ` `Pythonاز لیست اول با عضو
PYTHONاز لیست دوم برابر نیست ،پس خروجی زیر را نمایش میدهد:
False
عملگر ،inبرای بررسی عضویت یک مقدار در یک لیست به کار میرود .چنانچه مقدار عضو
لیست باشد ،این عملگر ،Trueوگرنه Falseرا برمیگرداند .بهعنوانمثال ،دستورات زیر را ببینید:
]]>>> list1 = [1, [2, 3], [4,5
>>> [4, 5] in list1
>>> 5 in list1
دستور اول ،یک لیست به نام list1را تعریف میکند و اعضای آن را مقدار میدهد ،دستور دوم،
تعیین میکند ] [4, 5در لیست list1وجود دارد یا نه؟ چون ،این عضو در list1وجود دارد ،خروجی
این دستور Trueمیباشد .دستور سوم ،تعیین میکند که آیا 5در list1وجود دارد یا نه؟ چون 5عضو
list1نیست ،خروجی Falseنمایش داده میشود ( 0بهتنهایی عضو list1نیست ،بلکه لیست ][4, 5
عضو list1است).
9 0
است. مقدار و نوع همانطور که بیان گردید ،هر شیء در پایتون شامل شناسه،6 عملگر ،is
عملگر== دو شیء را ازلحاظ یکسان بودن مقدار آنها بررسی میکند .درحالیکه عملگر isدو شیء
را ازلحاظ یکسان بودن شناسه (خروجی تابع )( )idمقایسه میکند .بهعنوانمثال ،دستورات زیر را
ببینید:
]>>> list1 = [1, 2, 3
>>> list2 = list1
>>> list1 == list2
1 2 3
.Identity . Type . Value
@PythonForever
آشنایی با زبان پایتون 010
@PythonForever
فصل اول011
وcount()،reverse()،sort()،remove()،insert()،append()هد اینبرنامهآشناییبامتدهای
.بررویلیستاستindext()
:مراحلطراحیواجرا
حذف شود یا مکان آن و تعداد تکرار آن پیدا، درج،عنصری که باید اضافه x مالول اصلی
.گردد
. در آن قرار داردx درج شود یا اندیسی کهx مکانی که باید index
def menu():
print ( "1: Append ")
print ( "2: Insert")
print ( "3: Remove")
print ( "4: Sort")
print ( "5: Reverse")
print ( "6: Count")
print ( "7: Index")
print ( "8: Exit")
choose = int(input("Select 1 to 8:"))
return choose
list1= []
s=input("Enter list elements:")
list1=s.split()
print(list1)
while 1:
choose=menu()
if choose == 8 :
break;
elif choose == 1:
x = input("Enter a element for append:")
list1.append(x)
print("List is ", list1)
elif choose == 2:
x = input("Enter a element for insert:")
@PythonForever
011 آشنایی با زبان پایتون
@PythonForever
فصل اول011
@PythonForever
آشنایی با زبان پایتون 011
فصل
کالسها و وراثت
7
برنامههایی که در فصلهای 6تا 1نوشتهایم ،همه شامل کاالسهاای آمااده بودناد کاه قابالً توساط
مفسر زبان ایجاد گردیدند .گاهی نیاز است کالسهای جدیدی ایجاد کنید .در این فصال روش ایجااد
کالس جدید و استفاده از آن را میآموزیم.
.7 – 0کالسها
دنیای واقعی پر از اشیا است .کافی است به اطاراف خودتاان نگااه کنیاد ،اطرافتاان از اشایایی نظیار
دانشگاهها ،هواپیماها ،انسانها ،حیوانات ،ماشینها ،ساختمانها ،موبایلها ،رایانهها و غیره تشاکیل شاده
است .در زبانهای برنامهنویسی ساختیافته نظیر ،Cپاسکال ،برناماهنویساان بار روی اعمهال(6کارهاا یاا
وظایف ( ))Tasksبهجای شیء 0تمرکز میکردند ( برنامهنویسان در دنیای واقعی زندگی مایکنناد ،اماا
تفکر آنها شیءگرایی نیست) .این امر موجب میگردد تا برنامههای نوشتهشده دارای مشکالت زیار -
باشند:
.0واحدهای تشکیلدهنده برنامه نمیتوانند بهسادگی نشاندهناده اشایای دنیاای واقعای باشاند .لاذا،
مجدد 9مناسبی نخواهند داشت. بخشهای تشکیلدهنده برنامه قابلیتاستفاد
.2بخشهای تشکیلدهنده برنامه اشیای دنیای واقعی را مدلسازی نمیکنند .لذا ،پیچیدگی افازایش
مییابد.
.3امکان تغییرپذیری دادهها و توابع سخت است.
.4نگهداری و پشتیبانی برنامهها مشکلتر خواهد شد.
اما ،در برنامهنویسیشیگراء ،کالسها ایجاد میشوند .چون کالسها ،اشایای دنیاای واقعای را مادل-
سازی میکنند .لذا ،مزایای زیر را در پی خواهند داشت:
@PythonForever
011فصل اول
نمود.
.2بهکارگیریاشیاءراحتترخواهدبود ،زیرا ،این اشیا ،اشیای دنیای واقعی را مدلسازی خواهناد کارد.
بنابراین ،موجب کاهش پیچیدگی خواهند شد.
.3قابلیتنگهداریاشیاءراحتتراست .در ادامه خواهید دید که هر یک از اشایاء باهطاور مساتقل نگاه-
داری میشوند .لذا ،تغییرپذیری ،توسعه و نگهداری آنها آسانتر خواهد شد.
همانطور که بیان گردید ،کالسها برای مدلسازی اشیای دنیای واقعای باه کاار مایروناد .اشایای
دنیای واقعی یکسری ویژگیهایی از قبیل رنگ ،وزن ،اندازه ،نام ،جنس و غیره دارند کهشه لظهاهری
آنها را تعیین میکنند .این ویژگیها صفاتاشیاء نام دارند .صافات اشایاء هماان اعضاای دادهای آنهاا
میباشند .اشیاء عالوه بر صفات ،یکسری رفتارها نیز از خودشان نشان میدهند .این رفتارهاا ،تهابععضهو
(متد) نام دارند .متدها ،عملیاتی هستند که بر روی اعضای دادهای قابلاجرا هستند.
برای درک بهتر این موضوعات به طرز کار کالسهاا مایپاردازیم .در حالات عاادی هار شایء در
دنیای واقعی به سه جنبه زیر شناخته میشود:
.9رفتار شیء .0وضعیت شیء .6نام شیء
بهعنوانمثال ،شیء پخاشکنناده CDرا در نظار بگیریاد .ناام ایان شایء پخاشکنناده CDاسات.
پخشکننده CDمیتواند CDرا پخش کند ،بین آهنگها سوئیچ کند و اعماالی دیگاری انجاام دهاد.
اینها رفتارهای یک پخشکننده CDهستند .منظور از وضعیت این شیء ایان اسات کاه پخاشکنناده
میزان بلندی صدا را کنترل میکند یا میداند که اکنون چه مقدار از ادامه آهنگ باقیمانده است.
سانمیباشهند .باهعناوانمثاال ،کاالس ماشاین کالس ها،الگوهاییبرایاشیاءباصفاتمشترکورفتارهایی
خواصی مانند رنگ ،وزن ،تعداددرها،تعدادچرخها و غیره دارد که شکل ظاهری ماشین را تعیین میکنند.
روشنشدن،خاموششدن،سهرعتگهرفتنوترمهککهردن ماشینها عالوه بر صفات یکسری متدهای از قبیل
دارند .بنابراین ،برای استفاده از ماشین باید از متدهایش استفاده نمود .برای استفاده از کالسهاا دو کاار
باید انجام گردد که عبارتاند از:
.8نمونهسازیازکالسها .1تعریفکالسها
@PythonForever
آشنایی با زبان پایتون 011
.7 – 1 – 1تعریف کالسها
بیان گردید که کالسها برای مدلسازی اشیاء به کاار مایروناد .بارای تعریاف کاالس ابتادا بایاد
اعضای دادهای آن را مشخص کرد .سپس اعضای تابعی آن را پیادهسازی نماود .ناام کاالس ،از قاانون
نامگذاری شناسهها پیروی میکند و اعضای تشکیلدهنده کالس ،متغیرها و متدهایی هستند که کالس
از آنها تشکیل میشود .اعضای تشکیلدهنده کالس عبارتاند از:
.۳متدها . 9مخربها .0سازندهها .6فیلدها
بهعنوانمثال ،دستورات زیر را ببینید:
>>> class Circle:
PI = 3.1415
این دستور کالس Circleبا یک عضو به نام PIایجاد میکند.
در ادامه در مورد هر یک از اعضای کالس بهطور مفصل بحث خواهیم کرد.
.7 – 1 – 2نمونهسازی کالسها
همانطور که در فصل اول دیدید ،برای استفاده از انواعی نظیر char ،double ،intو ...میبایسات
نمونهای از این انواع تعریف میگردید .برای استفاده از کالس باید نمونهای (شیایی) از کاالس ایجااد
کنید .برای این منظور ،بهصورت زیر عمل میشود:
()نامکالس = نامنمونه
ساختار اول ،برای دسترسی به اعضای معمولی کالس به کار میرود و ساختار دوم ،برای دسترسای
به اعضای نوع staticکالس استفاده میشود که در ادامه خواهید دید.
اکنون دستورات زیر را ببینید:
)(>>> c1 = Circle
@PythonForever
011فصل اول
این دستور نمونهای به نام c1از نوع Circleایجاد میکند .اکنون c1.را تایپ کرده و کلید ctrl +
@PythonForever
آشنایی با زبان پایتون 011
و کالساستاد دیدهاید ،مقدار ثابت ،شعاع دایره ،قطر دایره، همانطور که در مثالهای کالسدایر
محیط و مساحت دایره اعضای کالس دایره هستند .اما ،کد استادی ،نام ،نام خاانوادگی ،تعاداد سااعت
حقالتدریس ،مبلغ حقالتدریس به ازای هر ساعت و مبلغ دریافتی حقالتدریس ،اعضاای کاالس اساتاد
هستند .پابرایتعییناعضایکالسبایدببینیمکهیککالسچهاطالعاتیدارد.
کالس دایره دارای دو عضو دادهای است .عضو دادهای اول PIاست کاه عادد 3.14159مایباشاد و
عضو دادهای دوم شعاع ( )rاست که شعاع دایره در آن قرار میگیرد.
@PythonForever
001فصل اول
اعضایمتدی ،اعمالی را تعیین میکنند که کالس میخواهد انجام دهاد .اعضاای متادی مایتوانناد
سازندهها ،مخربها و متدهای کالس باشند .بهعنوانمثال ،دایره دارای متدهایی جهت محاسابه محایط
و مساحت میباشد .بنابراین کالس میتواند اعضای زیر را داشته باشد:
.0و غیره .۳متدها .9مخربها .0سازندهها .6فیلدها
فیلدها
فیلدها ،اعضایی از کالس هستند که مقدار دادهای کالس را نگهداری میکنند (مانند شعاع دایاره).
اعضای فیلد کالس ،همان متغیرهای کالس هستند.
بهعنوانمثال ،دستورات زیر را ببینید:
>>> import math
>>> class Circle:
PI = math.pi
r=0
دستور اول ،مالول mathرا به برنامه اضافه میکند و دستور دوم ،کالسی به نام Circleایجاد
و ،rشعاع دایره میباشد. می-نماید که دو عضو دادهای PIو rدارد ،PI .عدد ثابت
متدها
همانطور که بیان گردید ،کالس عالوه بر اعضای دادهای مایتواناد دارای متاد نیاز باشاد .متادها،
اعمالی هستند که میخواهید بر رویداده انجام دهید .متد بهصورت زیر تعریف میشود (به فصل ساوم
مراجعه کنید):
(:لیستپارامترهاو)selfناممتدdef
دستوراتپیاد سازیمتد
]مقدار[ return
@PythonForever
آشنایی با زبان پایتون 000
@PythonForever
001فصل اول
Enter r:10
R : 10 Area : 314.1592653589793 Perime : 62.83185307179586
.7 – 3سازندهها و مخربها
سازندهها برای مقداردهی اولیه به اعضای کاالس باه کاار مایروناد .باا دو روش زیار مایتاوان باه
اعضای کالس مقدار اولیه تخصیص داد:
ایکالسدربدنهآن ،در هنگام تعریف کالس در بدناه کاالس مایتاوان باه .0مقداردهیبهاعضایداد
اعضای دادهای آن مقدار اولیه داد .این عمل بهصورت زیر انجام میشود:
مقداراولیه=نامعضوداد ای
بهعنوانمثال ،در کالس Circleبه PIمقدار اولیه math.piتخصیص داده شاد و باه rمقادار اولیاه
صفر تخصیص داده شد.
،در پایتون هار کاالس یاک متاد ساازنده باه ناام .2مقداردهیاولیهبهاعضایکالسازطریقمتدسازند
)( __ __initدارد کاه بارای مقاداردهی اولیاه باه اعضاای دادهای کاالس باه کاار مایرود .ایان متاد
بهصورت زیر پیادهسازی میشود:
):لیستپارامترها def __init__ (self,
دستوراتبدنهمتد
.7 – 11مسائل حل شده
مثال.1برنامهایکهکالسدانشجوراپیاد سازیمیکند.هردانشجودارایاعضایکد(شمار دانشجویی)،نهام،
نامخانوادگی،معدلوآیامشروطشد استیاخیر؟میباشد.
مراحلطراحیواجرا:
@PythonForever
001 آشنایی با زبان پایتون
معدل avera
ge
Student نمونهای از کالس s
class Student:
def __init__(self, code, fname, lname, average):
self.code = code
self.fname = fname
self.lname = lname
self.average= average
def __del__(self):
print("object is deleted")
def isPass(self):
if self.average >= 12 :
return "Yes"
else :
return "No"
def __str__(self):
s = "Code : "+ self.code
s += "\t\tFirst name : " + self.fname
s += "\t\tLast name : " + self.lname
s += "\nAverage : "+str(self.average)
s += "\t\tPassed : "+str(self.isPass())
return s
code = input("Enter code:")
fname = input("Enter First name:")
lname = input("Enter Last name:")
average = float(input("Enter average:"))
s = Student(code, fname, lname, average)
print(str(s))
@PythonForever
فصل اول001
del s
: اطالعات زیر وارد را نمایید تا خروجی را ببینید، مالول را ذخیره و اجرا کرده.0
Enter code:931216049
Enter First name:Ramin
Enter Last name:Baboli
Enter average:12.75
Code : 931216049 First name : Ramin Last name : Baboli
Average : 12.75 Passed : Yes object is deleted
@PythonForever
آشنایی با زبان پایتون 001
@PythonForever
001فصل اول
)]histogram([3, 6, 4, 3, 6, 5
.0مالول را ذخیره و اجرا کرده تا نمونه خروجی را بهصورت زیر ببینید:
@PythonForever
آشنایی با زبان پایتون 001
***
******
****
***
******
*****
رانمایشمیدهد.
ترینمقسومعلیهمشترک()GCOآنها
برنامهایکهدوعددراخواند ،بکرگ
.8
مراحلطراحیواجرا:
@PythonForever
001فصل اول
@PythonForever
آشنایی با زبان پایتون 001
@PythonForever
فصل اول011
http://ktbr.ir/b29984
@PythonForever
آشنایی با زبان پایتون 010
@PythonForever
فصل اول011
@PythonForever
آشنایی با زبان پایتون 011
@PythonForever
فصل اول011
@PythonForever
آشنایی با زبان پایتون 011
@PythonForever
فصل اول011
@PythonForever