<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های saeedtajik</title>
        <link>https://virgool.io/feed/@saeedtajik</link>
        <description>هر چه می خوانم می فهمم بیشتر نمی دانم - دانش آموخته برق و کامپیوتر سابق</description>
        <language>fa</language>
        <pubDate>2026-06-17 06:00:24</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/48910/avatar/33AQ7b.png?height=120&amp;width=120</url>
            <title>saeedtajik</title>
            <link>https://virgool.io/@saeedtajik</link>
        </image>

                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (جمع بندی گام دوم)</title>
                <link>https://virgool.io/hooshteam/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AC%D9%85%D8%B9-%D8%A8%D9%86%D8%AF%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-debyuawhvy3k</link>
                <description>سلام رفقاگام دوم آموزش پایتون با هفت درس تمام شد! آموزش پایتونی رو که شروع کردم یکم با بقیه آموزش های پایتون فرق داره فرقشم اینکه که سعی کردم اول با مفاهیم آشنا بشید و از برنامه نویسی خسته نشید و همینطور که جلو تر می ریم دوباره مباحث مرور شده و نکته های بیشتری یاد می گیریم.اگر تازه می خواهید شروع کنید از گام اول شروع کنید که لیست درس ها اینجا هست و قسمت اول هم از اینجا می تونید شروع کنید. آموزش پایتون ارائه شده به مشارکت شما نیاز داره که می تونه دعوت دوستاتون به این سری نوشته ها باشه و یا اینکه مشکلات خودتون رو با اجرای برنامه ها کامنت کنید. این طوری هم یاد می گیرید هم یه چیزی هم یاد بقیه می دین. حمایت شما باعث می شه بتونم گام های بعدی رو هم ایجاد کنم (:قلب)گام اول آموزش پایتون هدفش این بود که شما از برنامه نویسی نترسین و بیاین جلو. شروع کنید یه چیزایی بنویسید هر چند ساده. این که با مفاهیم اولیه برنامه نویسی پایتون هم آشنا شدین. گام دوم آموزش پایتون با مطالب جدید تر و تکمیلی تر از پایتون آشنا شدید. درس های گام اول و دومتوی این نوشته می خواهیم ببینیم چیا  توی گام دوم گفتیم و الان کجا هستیم.قسمت دوازدهم (لینک) - مجموعه هامجموعه ها در پایتون دقیقا عین مجموعه ها در ریاضی هستن.توی این آموزش در موردشون صحبت می کنیم. قسمت سیزدهم(لینک) - تاپل هاخصوصیات تاپل ها به لیست ها نزدیکه و به همین خاطر کار باهاشون راحته اگه هیچی راجبشون نمی دونی در درس چهارم راجبش صحبت کردیم که اینجا می تونی بخونیقسمت چهاردهم(لینک) - لیست ها قسمت اولدر واقع لیست ها مثل تاپل ها هستند با این تفاوت که تغییر پذیرند.قسمت پانزدهم(لینک) - لیست ها قسمت دومدر واقع لیست ها مثل تاپل ها هستند با این تفاوت که تغییر پذیرند.قسمت شانزدهم(لینک) - دیکشنری هاتوی این قسمت از آموزش پایتون راجب این که متغیر هامون از چه نوعی هستن و چطوری بهم تبدیل میشن حرف زدیم . ادامه قسمت قبلی هست.قسمت هفدهم(لینک) - کار با توابع. توی این قسمت از آموزش پایتون میریم سراغ تابع ها در قسمت ششم یک مختصری راجبش صحبت کردیم اینجا مفصل تر می گیمقسمت هجدهم(لینک) - کار با فایلتوی این قسمت در مورد فایل ها صحبت کردم که می تونید کامل کار باهاش را یاد بگیرید و استفاده کنید </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Thu, 30 Sep 2021 11:37:57 +0330</pubDate>
            </item>
                    <item>
                <title>چطوری عادت جدید بسازیم ؟ تجربه شخصی</title>
                <link>https://virgool.io/ketabaz/%D8%B2%D9%86%D8%AF%DA%AF%DB%8C%D8%AA%D9%8F-%D8%A8%DA%A9%D9%88%D8%A8-%D8%A7%D8%B2-%D8%A7%D9%88%D9%84-%D8%A8%D8%B3%D8%A7%D8%B2-%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D8%B4%D8%AE%D8%B5%DB%8C-%D8%AE%D9%88%D8%AF%D9%85-%D8%B9%D8%A7%D8%AF%D8%AA-%D8%A8%D8%B3%D8%A7%D8%B2-rbhmfgiuyqyl</link>
                <description>سلام یه ضرب بریم سراغ اصل داستان! من می خوام هر ماه (یا هر مدت که لازمه) یک کتاب کاربردی بخونم و اونُ در زندگیم به کار ببرم و تجربه شخصیمُ بهتون بگم. ازتون یه خواهشی دارم اونم اینه که  نظرتونُ در مورد کتاب و احیانا تجربه هایی که داشتید را برام کامنت کنید. چون اینطوری بیشتر موضوعش جا می افته. همین طور توی انتخاب کتاب هم می تونی بهم کمک کنی :)بکوب دوباره بساز  کتاب اولی که انتخاب کردم کتاب عادت های اتمی جیمز کلیر هست. این کتاب حرفش اینه که چطوری عادت خوب ایجاد کنیم و چطوری عادت های بدمونُ ترک کنیم. رُخِ کتاباینکه عادت ها چقدر در زندگیمون تاثیر دارنُ که هر بنی بشری میدونه. یه نکته دیگه که کتاب می گه اینه که باید بجای نتیجه، روی هویت تمرکز کنید. خلاصش اینه برای اینکه بخواهید ورزش کنید باید ذاتا ورزش کار بشید مثلا رفتارهایی انجام بدین که هر ورزشکاری انجام میده. از نظر من این قسمتش سخته و قاعدتا نمیشه در مدت کوتاه اجراش کرد به خاطر همین عادتی که برای خودم انتخاب کردم، عادتی هست که به زندگیم بخوره و مثلا یه چیزی نباشه که در حد فیل هوا کردن باشه. خب من بیش از ده سالی هست که ورزش می کنم ولی بخاطر کرونا بی خیالش شدم و چند ماهی هست که ورزش نمی کنم. حالا می خوام این عادت ورزش کردنُ با شرایط جدید ایجاد کنم. پس اون بخش هویت که همون ورزشکار بودن هست یه جورایی شکل گرفته فقط می خوام در همین راستا (کلمه باحالیه) عادت ورزش روزانه ایجاد بشه. یک قسمت دیگه کتاب می گه که عادت از سه قسمت تشکیل شده : اولی سرنخه، دومی روتین، سومی هم جایزه.سرنخ اون چیزی هست که شما اونُ می بینید یادتون می افته که باید اون عادتُ انجام بدین. روتین که همون انجام دادن عادت هست. جایزه هم که مشخصه چیزی که در قبال انجام اون عادت بدست میاری. مثلا سرنخ عادتی که من ایجاد کردم، پشت بومِ خونمونِ! (یعنی هر وقت می رم اونجا عادت پیاده روی را انجام میدم) روتین که همون پیاده روی هست جایزه هم هورمون سرخوشی بعد از ورزش هست. نمونه از چرخه سرنخ و روتین و پاداش جیمز برای ایجاد عادت می گه که چهار تا کار باید انجام بدین که من این چهار تا کار را در مورد اضافه کردن ورزش به زندگی شخصیم انجام دادم و نتیجشُ می گم. 1. آن را شفاف و آشکار کنید این قسمت منظورش اینکه که باید دقیق بگیم چی می خوایم. مثلا من می خوام روزی یک ساعت پیاده روی داشته باشم. اولش فکر کردم اگر صبح باشه که عالیه ولی دیدم همون اول صبح باشه سخته بخاطر همین وابسته به مکانش کردم یعنی اینکه توی خونه یک ساعت پیاده روی داشته باشم ! حال می گم چرا گذاشتم توی خونه. زمانش هم شب گذاشتم. البته کم کم زمان و مکان را تغییر دادم. 2. آن را جذاب کنید جذاب کردن یه کار سخت کلا سخته. این قسمت به نظرم یکی از سخت ترین قسمت های ایجاد عادت هست. مثلا پیاده روی واسه کسی که تاحالا نرفته چه جذابیتی داره حالا هی مغزش بگه خوبه برات باعث میشه سالم بمونی یا حالت خوب باشه ولی خب خواب صبح هم جذابیت داره و دم دست تر هم هست. دیونست مگه جذابیت دم دست را ول کنه بره به جذابیت آینده بچسبه! این قسمت برای من ساده بود خب چون قبلا طعم حس خوب و اون هورمون سرخوشی بعد از ورزش را بارها چشیده بودم. به خاطر همین مغز و احساسم واقعا درک می کرد این جذابه. البته یکه کار دیگه هم کردم اونم اینکه چیزایی که دوست داشتمُ در همین زمان گوش می دادم. بعضی وقت ها آهنگ هایی که دوست داشتم بعضی وقت ها هم پادکست ها و کتاب های صوتی. اینا برای من جذابن بنابراین زمان پیاده روی  توی ذهنم کوتاه میشه و عملا متوجه یک ساعت نمیشم.  ولی خب می گم این قسمت چالش داره باید فکر کنی چطوری میشه جذابش کرد. مثلا کسی که عاشق فست فود هست حالا هی بیا بگو عادت سالم خوریُ ایجاد کن خیلی جذابه با یک &quot;برو بابا دلت خوشه&quot; به جذابیتش پایان میده. 3. آن را ساده کنید این قسمتش باحاله مثلا من اول توی خونه راه می رفتم که خب خیلی سادست (البته از نظر من، اینکه صد بار باید دور بزنی ممکنه خیلی هم ساده نباشه ) بعد این عادتُ منتقل کردم به صبح یعنی به محض از خواب بیدار شدن سعی کردم پیاده روی داشته باشم. برای اینکه ساده باشه می رم پشت بوم راه می رم. اینجا همونجایی که گفتم می گم چرا گذاشتم توی خونه، خیلی سادست برای اینکه آسونش کنم. فکر کن قرار بود حاضر بشی لباس بپوشی بری برسی به پارک بعد تازه بخوای یک ساعت پیاده روی کنی بعد برگردی بری سرکار (چقدر سخت!) یه همچین چیزی تصور کنید چون شلوار تو خونه پامه نمیشه عکس خودمو بزارم :)) 4. آن را لذت بخش کنید این قسمتش هم سخته البته اگر جایزه بزاری برای خودت می تونی راحت انجام بدی مثلا وقتی یک ساعت راه رفتی یک بنز S500 گیرت میاد کیه که بخوابه ! حالا من برای جایزه همون هورمونه برام کافی بود چون واقعا حس خوب میده و روزتُ سرحال شروع می کنی. ولی خب برای انگیزه بیشتر در نظر گرفتم اگر یک ماه اینکار را بدون وقفه انجام بدم هدفون سفارش بدم، الان که دارم اینُ می نویسم سفارش دادم.  هرچی کاری که می خوای عادتش کنی سخت تر باشه جایزش باید دندون گیرتر باشه که قبول کنی اون کارُ انجام بدی. کار سخت تر جایزش باید دندون گیرتر باشه خلاصش این شد که سعی کردم یک ساعت پیاده روی روزانه را به برنامه زندگیم اضافه کنم. چرا اینُ انتخاب کردم چون به ذات من می خورد و خب اضافه کردنش برام راحت تر بود.  اول از توی خونه شروع کردم و شب هر موقع که تونستم راه می رفتم.  بعدش این زمان را منتقل کردم به صبح و بلافاصله بعد خواب می رم پشت بوم راه می رم خیلی آسونه چون نه حاضر شدن می خواد نه چیز دیگه و اینکه در موقع پیاده روی به چیزایی که دوست دارم گوش می دم که این زمان را کوتاه می کنه و جذاب میشه . آخر سر هم که یک ماه این کارُ دارم انجام می دم یک هدفون برای خودم گرفتم. به نظرم این کتاب بدرد نخور نیست لااقل من تونستم یک عادت به زندگیم اضافه کنم. سعی می کنم در بخش بعدی یکی از عادت های بَدَمُ حذف کنم (فکر کنم این سخت تر باشه !) از این لینک می تونی کتابُ بخری. در ادامه این چهار مرحله از این لینک توضیح داده شده : نحوه ی ایجاد یک عادت خوبقانون اول: آن را شفاف و آشکار کنید1-1 :عادتهای کنونی خود را یادداشت کنید تا نسبت به آنها آگاه شوید.2-1 :از مقاصد اجرایی بهره بگیرید: من فلان رفتار را در بهمان زمان و در فلان موقعیت مکانی انجام خواهم داد.3-1 :از زنجیره سازی عادت استفاده کنید: پس از فلان عادت فعلی، آن عادت جدید را انجام خواهم داد«.4-1 :محیط خود را طراحی کنید. سرنخهای عادت خوب را در معرض دید بگذارید.قانون دوم: آن را جذاب کنید1-2 :از جمع بندی خواسته ها بهره بگیرید. اقدامی که دوست دارید را با اقدامی که باید انجام دهید، جفت کنید.2-2 :به فرهنگی بپیوندید که رفتار مطلوب شما به مثابه رفتار معمول آنها باشد.3-2 :یک رسم انگیزشی بسازید. کاری که از آن لذت میبرید را بالفاصله پیش از یک عادت دشوار انجام دهید.قانون سوم: آن را ساده کنید1-3 :اصطکاک را کاهش دهید. تعداد گامهایی که میان شما و عادات خوبتان قرار دارند را کم کنید.2-3 :محیط را آماده کنید. محیط خود را آماده کنید تا تصمیمات آتی شما سادهتر شود.3-3 :بر لحظه ی تعیین کننده مسلط شوید. انتخابهای کوچکی که تاثیرات قابل توجه به همراه دارند را بهینه نمایید.4-3 :از قانون دو دقیقه ای استفاده کنید. مقیاس عادتهایتان را فشردهتر کنید تا بتوانید آنها را طی دو دقیقه یا کمتر انجام دهید.5-3 :عادتهایتان را به ناخودآگاه منتقل کنید. بر روی سرمایه گذاری و تصمیمات یکباره حساب باز کنید تا رفتار آینده شما تضمین شود.قانون چهارم: آن را رضایت بخش کنید1-4 : از تقویت استفاده کنید. هر زمان که عادتتان را تکمیل کردید، به خودتان یک پاداش فوری بدهید.2-4 : هیچ کاری نکردن را برای خودتان لذتبخش کنید. وقتی در حال اجتناب از یک عادت بد هستید، راهی برای مشاهده ی عواید این موضوع بیابید.3-4 : از ردیاب عادت بهره بگیرید. مجموعه عادتهایتان را تحت نظر بگیرید و زنجیره ی عادت را نشکنید.4-4 : هیچگاه دو بار متوالی یک عادت را فراموش نکنید. وقتی اجرای یک عادت را فراموش کردید، مطمئن شوید که هرچه سریعتر به مسیر اصلی خود برمیگردید.نحوهی شکستن یک عادت بدقانون اول: آن را مخفی کنید5-1 : میزان قرار گرفتن خود در معرض آن را کاهش دهید. سرنخهای عادت بد را از محیط خود حذف کنید.قانون دوم: آن را غیرجذاب کنید4-2 : ذهنیت خود را تغییر دهید. عواید اجتناب از عادتهای بدتان را برجسته کنید.قانون سوم: آن را دشوار کنید6-3 : اصطکاک را افزایش دهید. تعداد گامهای میان شما و عادتهای بدتان را بیشتر کنید.7-3 : از ابزار تعهد بهره بگیرید. انتخابهای آتیتان را به مواردی محدود کنید که به نفعتان هستند.قانون چهارم: آن را عامل نارضایتی کنید5-4 : یک همراه برای اجرای مسئولیت خود بیابید. از یک نفر بخواهید که رفتارتان را زیر نظر بگیرد.6-4 : یک پیمان عادت بسازید. عواقب عادات بدتان را دردناک کنید و عمومیت ببخشید.</description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Tue, 04 Aug 2020 12:56:38 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش پایتون کلید ورود به دنیای هوش مصنوعی (گام دوم - قسمت هجدهم:کار با فایلها)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D8%AC%D8%AF%D9%87%D9%85%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D9%81%D8%A7%DB%8C%D9%84%D9%87%D8%A7-aytg3siwaoql</link>
                <description>سلام رفقادر یک سری آموزش به آموزش پایتون برای ورود به دنیای هوش مصنوعی پرداختیم. اگه تازه قرار پایتون یاد بگیرید به این لینک برید و از جلسه اول شروع کنید و گام به گام بیاین جلو. در قسمت قبلی آموزش پایتون در رابطه با توابع صحبت کردیم در این قسمت می ریم سراغ کارکردن با فایل ها.  الان ما اینجا هستیم : تو این جلسه از آموزش پایتون میخوایم راجع به فایل ها صحبت کنیم.هر برنامه ورودی هایی را دریافت می کنه و پس از انجام محاسبات و پردازش هایی، خروجی را بر روی نمایشگر نشون می ده و یا درون یک فایل و یا درون پایگاه داده ذخیره می کنه. همچنین چندین روش برای دریافت ورودی وجود داره. برنامه می تونه از طریق خط فرمان یا واسط های گرافیکی ورودی بگیره و یا اینکه از درون یک فایل ورودی رو بخونه.فایل واحد منطقی ذخیره سازی داده ها بر روی دیسک است که توسط سیستم عامل مدیریت و نگهداری می شوند. سیستم فایل (File System) واحدی از (هسته) سیستم عامل است که وظیفه نگهداری، مدیریت، دسترسی و تغییرات فایل ها را بر عهده دارد.فایل ها انواع مختلفی دارند ولی می توان آنها را به دو دسته فایل های متنی (Text Files) و فایل های باینری (Binary Files) دسته بندی کرد.فایل های متنی که هر فرمتی را شامل می شوند. این فایل ها می توانند فایل های متنی، فایل های دودویی، فایل های HTML و فایل های با فرمت XML یا فایل های با فرمت CSV باشند.برای خواندن از فایل یا نوشتن بر روی فایل، باید در ابتدا آن فایل را باز (Open) کنیم. در پایتون برای این کار از تابع درونی ()open استفاده می کنیم. این تابع دو آرگومان ورودی دریافت می کند، آرگومان اول مسیر و نام فایل و آرگومان دوم حالتی (Mode) است که فایل برای آن باز خواهد شد.حالت های(mode) فایلحالت خواندن &#x27; r &#x27; - به طور پیش فرض. این امکان را به شما می ده که فقط فایل رو بخونید ، نه آن را اصلاح کنید. هنگام استفاده از این حالت ، فایل باید وجود داشته باشه.حالت نوشتن &#x27; w &#x27; - اگر فایلی وجود نداشته باشد ، فایل جدیدی ایجاد می کند ، در غیر این صورت داده های قبلی را به طور کامل پاک کرده و یک فایل جدید را ایجاد می کند.حالت اضافه کردن &#x27; a &#x27; - فایلی را برای ضمیمه باز می کنه. در صورت وجود فایل ، نشانگر فایل در انتهای فایل قرار داره. یعنی فایل در حالت append است. اگر فایل وجود نداشته باشد ، فایل جدیدی را برای نوشتن ایجاد می کند.حالت خواندن به صورت باینری &#x27; rb &#x27; - فایلی را برای خواندن فقط با فرمت باینری باز می کند. نشانگر فایل در ابتدای فایل قرار می گیرد. این حالت پیش فرض است.حالت خواندن و حالت نوشتن هم زمان &#x27; +r &#x27; - این حالت به شما این امکان رو می ده بدون نیاز به استفاده از r و w ، همزمان فایل ها را بخونید و بنویسید.خواندن و نوشتن در حالت باینری &#x27; +rb &#x27; - همان +r  فقط در فرمت باینری.حالت نوشتن به صورت باینری &#x27; wb &#x27; - فایلی را برای نوشتن فقط با فرمت باینری باز می کند. در صورت وجود فایل ، فایل را مرور می کند. اگر فایل وجود نداشته باشد ، فایل جدیدی برای نوشتن ایجاد کنید.حالت نوشتن و خواندن &#x27; +w &#x27; - فایلی رو برای نوشتن و خواندن باز می کنه. رونویسی فایل های موجود در صورتی که فایل وجود داشته باشه. اگر فایل وجود نداشته باشه ، فایل جدیدی رو برای خواندن و نوشتن ایجاد می کنه.حالت نوشتن و خواندن در حالت باینری &#x27; +wb &#x27; - یک فایل برای نوشتن و خواندن در قالب باینری باز می کنه. رونویسی فایل های موجود در صورتی که فایل وجود داشته باشه. اگر فایل وجود نداشته باشه ، فایل جدیدی رو برای خواندن و نوشتن ایجاد می کنه.اضافه کردن در حالت باینری &#x27; ab &#x27; - همان a  فقط در فرمت باینری.حالت اضافه کردن و خواندن &#x27; +a &#x27; - مشابه +w . فایلی رو برای ضمیمه و خواندن باز می کنه. در صورت وجود فایل ، نشانگر فایل در انتهای فایل قرار دارد. فایل در حالت append باز می شه. اگر فایل وجود نداشته باشه ، فایل جدیدی را برای خواندن و نوشتن ایجاد می کنه.حالت اضافه کردن و خواندن به صورت باینری &#x27; +ab &#x27; - همان +a  فقط در فرمت باینری.with open(filename, &#039;r&#039;) as f:
       f.read()
with open(filename, &#039;w&#039;) as f:
       f.write(filedata)
with open(filename, &#039;a&#039;) as f:
       f.write(&#039;\\n&#039; + newdata)
پایتون 3 ، حالت جدیدی را برای ایجاد انحصاری اضافه کرد:حالت &#x27; x &#x27; - فایلی رو برای ایجاد انحصاری باز می کنه ، اگر فایل از قبل موجود باشد FileExistsError رو برمی گردونه.حالت &#x27; xb &#x27; - همان x فقط در فرمت باینری.حالت &#x27; +x &#x27; - حالت خواندن و نوشتن.  اگر فایل وجود نداشته باشد ، فایل جدیدی ایجاد خواهد کرد. در غیر این صورت، FileExistsError رو برمی گردونه.حالت &#x27; +xb &#x27; - همان +x فقط در فرمت باینری.Python 3.x Version ≥ 3.3try:
       with open(&amp;quotfname&amp;quot, &amp;quotr&amp;quot) as fout:
              # Work with your open file
       except FileExistsError:
              # Your error handling goes here
Python 2.x Version ≥ 2.0import os.path
if os.path.isfile&#40;fname&#41;:
       with open(&amp;quotfname&amp;quot, &amp;quotw&amp;quot) as fout:
              # Work with your open file
else:
        # Your error handling goes here
خواندن خط به خط یک فایلساده ترین راه برای پیمایش خط به خط روی یک فایل:with open(&#039;myfile.txt&#039;, &#039;r&#039;) as fp:
       for line in fp:
              print(line)
متد ()readline: این تابع در هر بار صدا زده شدن روی فایل، یک خط از فایل را به ما بر میگرداند. مثال زیر معادل مثال فوق است:with open(&#039;myfile.txt&#039;, &#039;r&#039;) as fp:
      while True:
             cur_line = fp.readline()
             # If the result is an empty string
              if cur_line == &#039;&#039;:
                       # We have reached the end of the file
                       break
              print(cur_line)
به طور معمول ، از متد ()readlines برای ذخیره مجموعه ای قابل تکرار از خطوط فایل استفاده میشه:with open(&amp;quotmyfile.txt&amp;quot, &amp;quotr&amp;quot) as fp:
       lines = fp.readlines()
for i in range(len(lines)):
       print(&amp;quotLine &amp;quot + str(i) + &amp;quot: &amp;quot + line)
موارد زیر رو پرینت میکنه:Line 0: hello
Line 1: world
فایل های تکرار  Iterate (به صورت بازگشتی)برای تکرار همه فایل ها ، از جمله در زیرشاخه ها ، از os.walk استفاده کنید:import os
for root, folders, files in os.walk(root_dir):
for filename in files:
print root, filename
Python 3.x Version ≥ 3.5اگر شما همچنین می خواهید اطلاعات مربوط به فایل را بدست آورید ، می توانید از روش کارآمدتر os.scandir مانند این استفاده کنید:for entry in os.scandir(path):
if not entry.name.startswith(&#039;.&#039;) and entry.is_file&#40;&#41;:
print(entry.name)
دریافت محتوای کامل یک پروندهروش ارجح فایل i/o استفاده از کلمه کلیدی است. این کار اطمینان حاصل می کند که فایل پس از اتمام خواندن یا نوشتن بسته می شود:with open(&#039;myfile.txt&#039;) as in_file:
content = in_file.read()
print(content)
یا برای بستن فایل به صورت دستی ، می توانید به سادگی close را صدا بزنید:in_file = open(&#039;myfile.txt&#039;, &#039;r&#039;)
content = in_file.read()
print(content)
in_file.close()
نوشتن در یک فایلwith open(&#039;myfile.txt&#039;, &#039;w&#039;) as f:
f.write(&amp;quotLine 1&amp;quot)
f.write(&amp;quotLine 2&amp;quot)
f.write(&amp;quotLine 3&amp;quot)
f.write(&amp;quotLine 4&amp;quot)
اگر myfile.txt را باز کنید ، خواهید دید که محتوای آن عبارتند از:Line 1 Line 2 Line 3 Line 4
پایتون به طور خودکار line break رو اضافه نمی کنه ، شما باید این کار رو بصورت دستی انجام بدید:with open(&#039;myfile.txt&#039;, &#039;w&#039;) as f:
f.write(&amp;quotLine 1\n&amp;quot)
f.write(&amp;quotLine 2\n&amp;quot)
f.write(&amp;quotLine 3\n&amp;quot)
f.write(&amp;quotLine 4\n&amp;quot)

Line 1
Line 2
Line 3
Line 4
هنگام نوشتن فایل های باز شده در حالت متن (پیش فرض) از os.linesep به عنوان یک پایان دهنده خط استفاده نکنید. در عوض از n\ استفاده کنید. اگر می خواهید encoding را مشخص کنید ، به سادگی پارامتر encoding را به تابع باز اضافه می کنید:with open(&#039;my_file.txt&#039;, &#039;w&#039;, encoding=&#039;utf-8&#039;) as f:
f.write(&#039;utf-8 text&#039;)
همچنین می توان از دستور چاپ برای نوشتن در یک فایل استفاده کرد. مکانیزم پایتون 2 با پایتون 3 متفاوت است ، اما مفهوم همان است که شما می توانید خروجی رو که به صفحه رفته بگیرید و به جای آن به یک فایل ارسال کنید.Python 3.x Version ≥ 3.0with open(&#039;fred.txt&#039;, &#039;w&#039;) as outfile:
s = &amp;quotI&#039;m Not Dead Yet!&amp;quot
print(s) # writes to stdout
print(s, file = outfile)    # writes to outfile
#Note: it is possible to specify the file parameter AND write to the screen
#by making sure file ends up with a None value either directly or via a variable 
myfile = None
print(s, file = myfile) # writes to stdout
print(s, file = None) # writes to stdout
در پایتون 2 هم می تونستید کاری از این دست انجام بدید:Python 2.x Version ≥ 2.0outfile = open(&#039;fred.txt&#039;, &#039;w&#039;)
s = &amp;quotI&#039;m Not Dead Yet!&amp;quot
print s   # writes to stdout
print &gt;&gt; outfile, s   # writes to outfile
بر خلاف استفاده از تابع write ، عملکرد print به طور خودکار line break را اضافه می کند:بررسی کنید که فایل یا path وجود دارد یا خیراز سبک رمزگذاری EAFP استفاده کنید و سعی کنید آن را باز کنید.import errno
try:
with open(path) as f:
# فایل وجود داره
except IOError as e:
# (نباشد (این چنین فایل و یا دایرکتوری وجود نداشته باشد ENOENT استثناء را مطرح کنید اگر
if e.errno != errno.ENOENT:
raise
# این چنین فایل و یا دایرکتوری وجود ندارد
اگر روند دیگری فایل رو بین چک و زمان استفاده از آن حذف کنه ، از race-conditions نیز جلوگیری می شود.  این شرایط مسابقه می تواند در موارد زیر اتفاق بیفتد:با استفاده از ماژول os:import os
os.path.isfile&#40;&#039;/path/to/some/file.txt&#039;&#41;
Python 3.x Version ≥ 3.4با استفاده از pathlib:import pathlib
path = pathlib.Path(&#039;/path/to/some/file.txt&#039;)
if path.is_file&#40;&#41;:
       ...
برای بررسی اینکه مسیر مشخصی وجود دارد یا خیر ، می توانید روش EAFP فوق را دنبال کنید ، یا مستقیما مسیر را بررسی کنید:import os
path = &amp;quot/home/myFiles/directory1&amp;quot
if os.path.exists(path):
## Do stuff
تابع os.path.exists وجود فایل یا دایرکتوری را بررسی می کند.دسترسی به پرونده تصادفی با استفاده از mmapبا استفاده از ماژول mmap به کاربر این امکان داده میشه تا با نقشه کردن فایل به حافظه ، به طور تصادفی به مکانهای موجود در یک فایل دسترسی پیدا کند. این یک جایگزین برای استفاده از عملیات فایل عادی است.import mmap

with open(&#039;filename.ext&#039;, &#039;r&#039;) as fd:
# 0: map the whole file
mm = mmap.mmap(fd.fileno(), 0)

# print characters at indices 5 through 10
print mm[5:10]

# print the line starting from mm&#039;s current position
print mm.readline()

# write a character to the 5th index
mm[5] = &#039;a&#039;

# return mm&#039;s position to the beginning of the file
mm.seek(0)

# close the mmap object
mm.close()
جایگزینی متن در یک فایلimport fileinput

replacements = {&#039;Search1&#039;: &#039;Replace1&#039;,
&#039;Search2&#039;: &#039;Replace2&#039;}

for line in fileinput.input(&#039;filename.txt&#039;, inplace=True):
for search_for in replacements:
replace_with = replacements[search_for]
line = line.replace(search_for, replace_with)
print(line, end=&#039;&#039;)
بررسی خالی بودن فایل&gt;&gt;&gt; import os
&gt;&gt;&gt; os.stat(path_to_file).st_size == 0
یا&gt;&gt;&gt; import os
&gt;&gt;&gt; os.path.getsize(path_to_file) &gt; 0
با این وجود ، اگر فایل وجود نداشته باشه ، هر دو، یک خطا را می دهند. برای جلوگیری از گرفتن چنین خطایی، این کار رو انجام بدید:import os
def is_empty_file&#40;fpath&#41;:
return os.path.isfile&#40;fpath&#41; and os.path.getsize(fpath) &gt; 0
که یک مقدار bool را برمی گرداند.خواندن یک فایل بین محدوده ای از خطوطبنابراین فرض کنید شما می خواهید فقط بین برخی از خطوط خاص یک فایل رو تکرار کنید:برای این کار می توانید از itertools استفاده کنید:import itertools
with open(&#039;myfile.txt&#039;, &#039;r&#039;) as f:
for line in itertools.islice(f, 12, 30):
# do something here
خطوط بین اندیس 13 تا 20 خوانده می شود ، همانطور که می دونید اندیس در  پایتون از 0 شروع می شود. بنابراین خط شماره 1 به عنوان اندیس 0 می شود. همچنین می توانید با استفاده از کلید واژه ()next در اینجا چند خط اضافی را نیز مطالعه کنید.و هنگامی که شما از فایل آبجکت به عنوان تکرار شونده استفاده می کنید ، لطفاً از عبارت ()readline در اینجا استفاده نکنید ، زیرا دو روش برای مرور یک فایل با یکدیگر ترکیب نمی شوند.کپی یک درخت دایرکتوری directory treeimport shutil
source=&#039;//192.168.1.2/Daily Reports&#039;
destination=&#039;D:\\Reports\\Today&#039;
shutil.copytree(source, destination)
دایرکتوری مقصد از قبل وجود ندارد.کپی کردن محتویات یک فایل در فایل دیگرwith open(input_file, &#039;r&#039;) as in_file, open(output_file, &#039;w&#039;) as out_file:
for line in in_file:
out_file.write(line)
با استفاده از ماژول shutilimport shutil
shutil.copyfile&#40;src, dst&#41;
</description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Wed, 08 Apr 2020 11:21:21 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش پایتون کلید ورود به دنیای هوش مصنوعی (گام دوم - قسمت هفدهم- توابع)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D9%81%D8%AF%D9%87%D9%85-%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-jmjaqdhkcqa9</link>
                <description>سلام رفقا آموزش پایتون کلید ورود به دنیای هوش مصنوعی هست چرا که بسیاری از کتابخانه ها با همین زبان نوشته شده و دسترسی شمارا به منابع ارزشمند بیشتر می کنه. اگه تازه شروع کردی پایتون یاد بگیری برو به جلسه اول (در این لینک) گام به گام بیا جلو. الان ما اینجا هستیم:توی قسمت قبل در مورد دیکشنری ها صحبت کردیم که از این لینک می تونید ببینید. توی این قسمت از آموزش پایتون میریم سراغ تابع ها در قسمت ششم یک مختصری راجبش صحبت کردیم اینجا مفصل تر می گیم. همراه باشید دمتون گرم :قلبتوابع در پایتون چی هستن و به چه دردی می خورن ؟!تابع در پایتون یه چیزیه که یک کار مشخص را انجام می‌ده. توابع کمک می‌کنند تا برنامه به بخش‌های کوچک‌تر (ماژول | Modue) شکسته شود. پس تابع یک بلاک کد سازمان یافته با قابلیت استفاده دوباره برای انجام تنها یک کار مشخص و مرتبط هست ( خودمونیش اینه که یه چیزیو یه بار می نویسی صد بار استفاده می کنی). توابع بخش بندی بهتری را برای برنامه شما فراهم کرده و قابلیت استفاده دوباره از کد برنامه را بیشتر می کنن. تابع ها در زبان برنامه‌نویسی پایتون به عنوان یک آبجکت ( که بعدا می گم چیه ) در نظر گرفته می‌شوند که می‌توان هر یک از آن‌ها را به عنوان آرگومان ورودی به تابعی دیگر داد. هرچه برنامه بزرگ و بزرگ‌تر شود، تابع‌ها به سازمان‌یافته‌تر و قابل مدیریت شدن آن کمک می‌کنن یعنی اینکه می فهمیم چی نوشتیم.همونطور که می دونید، پایتون توابع داخلی بسیاری مثل ()print و غیره را در اختیار شما قرار داده. با این حال شما می تونید توابع خودتان رو هم بسازید. این توابع را، توابع تعریف شده توسط کاربر یا user-defined می نامند.تعریف یک تابعشما می تونید توابع را برای فراهم کردن عملکردهای مورد نیاز تعریف کنید. در زیر قوانین ساده جهت تعریف تابع در پایتون اومده.قطعه کد تابع باید با کلیدواژه ی def آغاز بشه. به دنبال اون اسم تابع و پرانتز درج می شه ( () ).پارامترهای ورودی یا آرگومان ها باید داخل پرانتز قرار داده بشه.اولین دستور تابع می تونه یک دستور اختیاری باشه - function_docstring.قطعه کد داخل ساختمان یا بدنه ی تابع با دو نقطه آغاز می شود، سپس دستوراتی که زیر آن قرار می گیرند، همگی توگذاشته می شوند.دستور return اجرای تابع رو متوقف کرده نتیجه را برمی گردونه (جمع بندی یک سری عملیات و یا کارهایی رو نمایش می ده) . دستور return None نیز یعنی هیچ مقداری را به عنوان خروجی برنگردونه.نحوه تعریف تابعdef functionname( parameters ):
   &amp;quotfunction_docstring&amp;quot
   function_suite
   return [expression]
همونطور که در کد بالا مشاهده می کنید تعریف تابع با کلمه کلیدی def شروع شده، سپس نام تابع، داخل پرانتز پارامتر های تابع، علامت : و در ادامه دستوراتی که با فراخوانی تابع باید اجرا شوند.به طور پیشفرض، نحوه ترتیب قرار گرفتن پارامترهای تابع در علمکرد تابع موثره و شما نیاز خواهید داشت آن ها را به همان ترتیبی که تعریف شده اند استفاده کنید.مثالتابع زیر یک پارامتر ورودی رشته دریافت کرده و آن را چاپ می کنه.def printme( str ):
   &amp;quotThis prints a passed string into this function&amp;quot
   print str
   return
فراخوانی تابعیعنی چطوری یک تابعی که قبلا تعریف کردی رو صدا بزنی. تعریف یک تابع، تعیین یک نام برای آن، تعیین پارامترها و ساختار بلاک کد آن. زمانیکه ساختار پایه ای یک تابع تموم شد، شما می تونید اون رو از طریق فراخوانی از تابعی دیگر یا به طور مستقیم اجرا کنید. برنامه زیر فراخوانی تابع ()printme را نشون می ده:# Function definition is here
def printme( str ):
   &amp;quotThis prints a passed string into this function&amp;quot
   print str
   return;

# Now you can call printme function
printme(&amp;quotI&#039;m first call to user defined function!&amp;quot)
printme(&amp;quotAgain second call to the same function&amp;quot)
وقتی که کد بالا اجرا شد، خروجی زیر ایجاد میشه:I&#039;m first call to user defined function!
Again second call to the same function
ارسال پارامتر با reference در برابر ارسال با مقدارتمامی پارامترها در زبان پایتون با reference ارسال می شوند. یعنی اگر شما پارامتر را درون تابع تغییر دهید، این پارامتر همچنین در تابع فراخوانی شده نیز تغییر خواهد کرد.یعنی وقتی داخل تابع چیزی رو تغییر بدی بیرونشم تغییر می کنه.  برای مثال:# Function definition is here
def changeme( mylist ):
   &amp;quotThis changes a passed list into this function&amp;quot
   mylist.append([1,2,3,4]);
   print &amp;quotValues inside the function: &amp;quot, mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print &amp;quotValues outside the function: &amp;quot, mylist
ما داخل تابع ۱و۲و۳و۴ رو اضافه کردیم ولی وقتی بیرون تابع به متغیر نگاه می کنیم می بینیم به اونم اضافه شده. نتیجه:Values inside the function:  [10, 20, 30, [1, 2, 3, 4]]
Values outside the function:  [10, 20, 30, [1, 2, 3, 4]]
تو مثال دیگه آرگومانی که با reference ارسال شده و reference آن درون تابع فراخوانی شده تغییر می کنه:# Function definition is here
def changeme( mylist ):
   &amp;quotThis changes a passed list into this function&amp;quot
   mylist = [1,2,3,4]; # This would assig new reference in mylist
   print &amp;quotValues inside the function: &amp;quot, mylist
   return

# Now you can call changeme function
mylist = [10,20,30];
changeme( mylist );
print &amp;quotValues outside the function: &amp;quot, mylist
پارامتر mylist، نسبت به تابع changeme محلی (local) هست، تغییر mylist درون تابع تاثیری در mylist نمیذاره. ( به نظرتون چرا ؟! کامنت کنید)  تابع در واقع هیچ کاری انجام نداده و خروجی زیر ایجاد میشه:Values inside the function:  [1, 2, 3, 4]
Values outside the function:  [10, 20, 30]
آرگومان های تابعهمون ورودی تابع هست که اسمش شیکه :دی . شما می تونید تابع را  از نظر آرگومان به شکل های زیر فراخوانی کنید:آرگومان های اجباریآرگومان های keywordآرگومان های پیشفرضآرگومان های variable-lengthآرگومان های الزامیآرگومان های الزامی اون هایی هستند که در مکان و ترتیب قرارگیری درست خود به تابع ارسال می شوند. در اینجا تعداد آرگومان های تابع فراخوانی شده باید دقیقا با تعریف تابع یکسان باشند.جهت فراخوانی ()printme، شما نیاز خواهید داشت دقیقا یک آرگومان به آن ارسال کنید، در غیر اینصورت خطای syntax همانند زیر ایجاد خواهد شد:# Function definition is here
def printme( str ):
   &amp;quotThis prints a passed string into this function&amp;quot
   print str
   return;

# Now you can call printme function
printme()
خروجی ( که ارور می ده چون می گه یک ورودی نیاز داشت)Traceback (most recent call last):
   File &amp;quottest.py&amp;quot, line 11, in &lt;module&gt;
      printme();
TypeError: printme() takes exactly 1 argument (0 given)
آرگومان های Keywordآرگومان های keyword در فراخوانی توابع مورد استفاده قرار می گیره. هنگامی که از آرگومان های keyword در فراخوانی تابع استفاده می کنید، فراخواننده، آرگومان ها را به وسیله ی اسم آن (پارامتر) شناسایی می کنه. این کار به شما اجازه میده ترتیب آرگومان ها را تغییر بدید، زیرا که مفسر پایتون میتونه با استفاده از کلیدواژه ای ارائه شده، مقادیر رو به پارامترها match (وصل) کند.مثال زیر فراخوانی keyword در تابع ()printme نشان داده شده است یعنی می فهمه که my string را باید به متغیر Str اختصاص بده و می برش داخل تابع و چاپش می کنه :#!/usr/bin/python

# Function definition is here
def printme( str ):
   &amp;quotThis prints a passed string into this function&amp;quot
   print str
   return;

# Now you can call printme function
printme( str = &amp;quotMy string&amp;quot)
خروجیMy string
مثال زیر تصویر واضح تری را ترسیم می کند. توجه داشته باشید که ترتیب پارامترها مشکلی ایجاد نمی کند ترتیب پارامترهارو عوض کردم بازم جواب داد.#!/usr/bin/python

# Function definition is here
def printinfo( name, age ):
   &amp;quotThis prints a passed info into this function&amp;quot
   print &amp;quotName: &amp;quot, name
   print &amp;quotAge &amp;quot, age
   return;

# Now you can call printinfo function
printinfo( age=50, name=&amp;quotsaeed&amp;quot )
خروجیName:  saeed
Age  50
آرگومان پیشفرضیکی از قابلیت های زبان پایتون امکان مشخص کردن مقادیر پیش فرض برای توابع است، در صورتیکه هیچ مقداری به آرگومان فراخوانی شده اختصاص داده نشود، آرگومان پیشفرض مقدار آن را مشخص می کند. در مثال زیر در صورتی که مقدار age تعیین نشود مقدار پیشفرض آن چاپ می شود:#!/usr/bin/python

# Function definition is here
def printinfo( name, age = 35 ):
   &amp;quotThis prints a passed info into this function&amp;quot
   print &amp;quotName: &amp;quot, name
   print &amp;quotAge &amp;quot, age
   return;

# Now you can call printinfo function
printinfo( age=50, name=&amp;quotmiki&amp;quot )
printinfo( name=&amp;quotmiki&amp;quot )
خروجیName:  miki
Age  50
Name:  miki
Age  35
آرگومان های با طول متغیر variable-lengthگاهی لازمه یک تابع رو با آرگومان های بیشتری نسبت به اونچه در زمان تعریف تابع مشخص کردید، پردازش و فراخوانی کنید. این دست از آرگومان ها در اصطلاح آرگومان های با طول متغیر (variable length) خوانده می شوند و برخلاف آرگومان های الزامی و پیش فرض، در تعریف تابع ذکر نمی شوند.def functionname([formal_args,] *var_args_tuple ):
   &amp;quotfunction_docstring&amp;quot
   function_suite
   return [expression]
علامت ستاره (*) قبل از نام متغیر قرار می گیره و مقادیر تمامی آرگومان هایی که keyword نیستند را در خود نگه میداره. این تاپل (tuple) در صورتیکه آرگومان اضافه ای در فراخوانی تابع تعیین نشه، خالی باقی میمونه. درواقع یعنی اینکه هر چی دلمون خواست موقع صدازدن اون تابع می فرستم داخلش #!/usr/bin/python

# Function definition is here
def printinfo( arg1, *vartuple ):
   &amp;quotThis prints a variable passed arguments&amp;quot
   print &amp;quotOutput is: &amp;quot
   print arg1
   for var in vartuple:
      print var
   return;

# Now you can call printinfo function
printinfo( 10 )
printinfo( 70, 60, 50 )
خروجیOutput is:
10
Output is:
70
60
50
توابع Anonymousاین توابع anonymous نام دارند یعنی بی نام (در واقع اسمی ندارن) و به صورت استاندارد با کلمه کلیدی def تعریف نمی شوند. شما می تونید برای ایجاد توابع کوچک anonymous از کلمه کلیدی lambda استفاده کنید. مثلا در مثال زیر اومدیم دوتا متغیر رو باهم جمع کردیم به تعریفش دقت کنید. فرم lambda میتونه هر تعداد آرگومان دریافت کنه، ولی تنها یک مقدار رو بر می گردونه. lambda ها نمی تونن حاوی چندین عبارت و دستور باشن.تابع anonymous نمیتونه به صورت مستقیم برای چاپ فراخوانی بشه چرا که نیاز به یک عبارت داره.توابع lambda دارای namespace های داخلی خود هستند و تنها به متغیر های موجود در لیست پارامترها و آن هایی که در global تعریف شده اند دسترسی دارند.هر چند اینطور به نظر میرسه که lambda ها نسخه تک خطی توابع هستند، آن ها همانند عبارت inline در C  نیستند.شکل دستوریlambda [arg1 [,arg2,.....argn]]:expression
مثال زیر فرم lambda و نحوه کارکرد آن را نشان می دهد:#!/usr/bin/python

# Function definition is here
sum = lambda arg1, arg2: arg1 + arg2;

# Now you can call sum as a function
print &amp;quotValue of total : &amp;quot, sum( 10, 20 )
print &amp;quotValue of total : &amp;quot, sum( 20, 20 )
خروجیValue of total :  30
Value of total :  40
عبارت returnعبارت return برای خروج از یک تابع است، که میتونه به طور دلخواه حاوی مقداری برای برگرداندن به فراخوانی تابع باشه. در صورت نیاز برای برگشت مقدار توسط تابع می توان از کلمه کلیدی return استفاده کرد. مثال زیر نحوه برگرداندن مقدار توسط return را نشون می ده:#!/usr/bin/python

# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them.&amp;quot
   total = arg1 + arg2
   print &amp;quotInside the function : &amp;quot, total
   return total;

# Now you can call sum function
total = sum( 10, 20 );
print &amp;quotOutside the function : &amp;quot, total
خروجیInside the function :  30
Outside the function :  30
روش کار توابع در پایتوناسکوپ (Scope) متغیرهامفهومش اینکه که هر متغیری کجای برنامه اعتبار داره. تمامی متغیرهای موجود در برنامه ممکنه در همه جای برنامه در دسترس نباشند. این موضوع به مکانی که متغیر تعریف شده بستگی داره.اسکوپ (Scope) یک متغیر تعیین می کنه که یک متغیر در کدام بخش از برنامه قابل دسترسی می باشد. در پایتون دو Scope برای متغیرها وجود داره:متغیرهای Globalمتغیرهای Localمتغیرهای Local در برابر Globalمتغیرهایی که درون بدنه تابع (داخل تابع) تعریف می شوند دارای محدوده local و آن هایی که بیرون از تابع تعریف می شوند دارای محدوده global می باشند.یعنی متغیرهای local تنها درون تابعی که تعریف شده اند قابل دسترسی هستن، در حالی که متغیرهای global در سراسر بدنه برنامه با تمامی توابع در دسترس هستند. وقتی که شما یک تابع رو فراخوانی می کنید، متغیرهایی که درون اون تعریف شدن به scope آورده می شوند:#!/usr/bin/python

total = 0; # This is global variable.
# Function definition is here
def sum( arg1, arg2 ):
   # Add both the parameters and return them.&amp;quot
   total = arg1 + arg2; # Here total is local variable.
   print &amp;quotInside the function local total : &amp;quot, total
   return total;

# Now you can call sum function
sum( 10, 20 );
print &amp;quotOutside the function global total : &amp;quot, total
خروجیInside the function local total :  30
Outside the function global total :  0
</description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Sun, 10 Nov 2019 13:01:31 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش پایتون کلید ورود به دنیای هوش مصنوعی (گام دوم - قسمت شانزدهم:دیکشنری)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%B4%D8%A7%D9%86%D8%B2%D8%AF%D9%87%D9%85%D8%AF%DB%8C%DA%A9%D8%B4%D9%86%D8%B1%DB%8C-wlzuvepceag5</link>
                <description>سلام رفقاآموزش پایتون کلید ورود به دنیای هوش مصنوعی هست چرا که بسیاری از مباحث مطرح شده توی این زمینه از پایتون به عنوان برنامه نویسی استفاده می کنه. اگه تازه می خوای شروع کنی از این لینک به جلسه اول برو و گام به گام آموزش پایتون رو شروع کن بیا جلو. ما الان اینجا هستیم :توی قسمت قبل از آموزش پایتون رفتیم سراغ لیست ها و تو این قسمت از آموزش پایتون می خوایم بریم سراغ دیکشنری ها.دیکشنری در پایتون چیه و به چه دردی می خوره ؟!احتمالا همه تا الان حداقل یه بار از دیکشنری لغت استفاده کردین. شما دنبال یه کلمه می گردین، پیداش می کنید و توضیحش رو جلوش می بینید. همینطور که میدونید از یه کلمه دوتا تو دیکشنری نیست ولی توضیحات مشابه زیاد هست. دقیقا توی پایتون هم همین مورد رو داریم.پس میشه اینطوری گفت که دیکشنری یه ظرفیه که حاوی تعداد کلید (key) و مقدار (value) هستش که هیچ کلیدی نمیتونه تکراری باشه ولی مقادیرش تکراری میتونه باشه. باید بگم که دیکشنری مرتب نیست و هیچ ترتیبی توش نیست ولی میشه بر اساس کلید، چیزایی که میخوایم رو پیدا کنیم. دیکشنری ها می توانند هر نوعی از داده باشند، اما غالبا از نوع داده ی عددی یا رشته ای هستند. مقدار (value) در دیکشنری می تواند هر نوعی باشد، ولی کلیدها باید یک نوع داده غیر قابل تغییر (immutable) مانند string، number، یا tuple باشند.ساختن یک دیکشنریما از چند تا راه می تونیم این کارو بکنیم:برای ایجاد دیکشنری از علامت های { } استفاده کنیم که کلید و مقدارش رو بهش می دیم:d = { &#039;key&#039;: &#039;value&#039; }
d = {1:&#039;ad&#039;, 2:&#039;cd&#039;}مثلا در مثال بالا کلید 1 مقدار Ad رو داره و کلید 2  مقدار Cd رو داره .با کد زیر یک دیکشنری خالی ایجاد می کنیم:d = { }
با خلاصه دیکشنری. مثلا توی این مثال مقدار a به صورت کلید قرار می گیره b مقدار اون میشه :d = { k:v for k,v in [ ( &#039;key&#039;, &#039;value&#039;, ) ] }
d = {k:v for k,v in [(&#039;a&#039;,&#039;b&#039;,)]}
d
{&#039;a&#039;:&#039;b&#039;}
با کلاس تو کار ( )dict :d = dict()                       # empty dict
d = dict(key=&#039;value&#039;) 
d = dict([(&#039;key&#039;, &#039;value&#039;)])
اصلاح یک دیکشنری:برای اضافه کردن آیتم به دیکشنری، به سادگی یک کلید جدید با یک مقدار ایجاد کنید. مثلا در مثال زیر مقدار 42 با کلید newkey به دیکشنری d اضافه شده :d[&#039;newkey&#039;] = 42

&gt;&gt;&gt; d
{&#039;a&#039;: &#039;b&#039;, &#039;newkey&#039;: 42}همینطور می تونید لیست و دیکشنری رو به عنوان یه مقدار اضافه کنید. در قسمت اول مثال زیر یک لیست از مقدایر 1و2و3 با کلید new_list اضافه شده و در قسمت دوم یک دیکشنری اضافه شده:d[&#039;new_list&#039;] = [1, 2, 3]

&gt;&gt;&gt; d
{&#039;a&#039;: &#039;b&#039;, &#039;newkey&#039;: 42, &#039;new_list&#039;: [1, 2, 3]}

d[&#039;new_dict&#039;] = {&#039;nested_dict&#039;: 1}

&gt;&gt;&gt; d
{&#039;a&#039;: &#039;b&#039;, &#039;newkey&#039;: 42, &#039;new_list&#039;: [1, 2, 3], &#039;new_dict&#039;: {&#039;nested_dict&#039;: 1}}برای حذف یک آیتم، کلید رو از دیکشنری حذف کنید. در مثال پایین newkey از دیکشنری به کلی حذف شده:del d[&#039;newkey&#039;]

&gt;&gt;&gt; d
{&#039;a&#039;: &#039;b&#039;, &#039;new_list&#039;: [1, 2, 3], &#039;new_dict&#039;: {&#039;nested_dict&#039;: 1}}جلوگیری از ارور KeyErrorیکی از مشکلاتی که وقتی ما داریم از دیکشنری ها استفاده می کنیم، ممکنه برامون پیش بیاد اینه که یه کلیدی ناموجود باشه. که این مشکل منجر به KeyError میشه. مثالا در مثال پایین ما یک دیکشنری خالی تعریف کردیم بعد در خط دوم خواستیم که کلید not there رو ببینیم که خطا داده چون این کلید وجود نداره:mydict = {}
mydict[&#039;not there&#039;]
Traceback (most recent call last):
       File &amp;quot&lt;stdin&gt;&amp;quot, line 1, in &lt;module&gt;
KeyError: &#039;not there&#039;
یکی از راه های جلوگیری از KeyError اینه که از متد dict.get استفاده کنیم، که به شما این این امکان رو میده یه مقدار پیش فرضی برای بازگشت از کلیدی که نیست، مشخص کنیم:value = mydict.get(key, default_value)
که در صورت وجود [mydict[key را برمی گرداند اما در غیر این صورت default_value را برمی گرداند. توجه داشته باشید که این دستور کلیدی به mydict اضافه نمی کند. بنابراین اگر می خواهید که مقدار و کلید را حفظ کنید، باید از (mydict.setdefault (key ، default_value استفاده کنید ، که این مقدار و کلید را ذخیره می کند. اگر به مثال زیر دقت کنید متوجه تفاوت این دوتا باهم میشید:mydict = {}
print(mydict)
# {}
print(mydict.get(&amp;quotfoo&amp;quot, &amp;quotbar&amp;quot))
# bar
print(mydict)
# {}
print(mydict.setdefault(&amp;quotfoo&amp;quot, &amp;quotbar&amp;quot))
# bar
print(mydict)
# {&#039;foo&#039;: &#039;bar&#039;}
یک روش جایگزین برای مقابله با مشکل ، گرفتن استثناء(exception) است. درمورد try و catch در درس های بعدی توضیح می دم فقط یادتون باشه که میشه ازش استفاده کرد که خطاهای این مدلی رو کنترل کرد:try:
       value = mydict[key]
except KeyError:
       value = default_value
همچنین می توانید بررسی کنید که کلید در دیکشنری است یا خیر:if key in mydict:
       value = mydict[key]
else:
       value = default_value
پیمایش روی یک دیکشنریاگر از یک فرهنگ لغت به عنوان یک تکرار کننده(iterator) استفاده می کنید، کلیدهای فرهنگ لغت رو می تونید مرور کنید. در مثال زیر a ، b ، c به صورت کلید هستن که با یک for روی این کلید ها حرکت می کنیم:d = {&#039;a&#039;: 1, &#039;b&#039;: 2, &#039;c&#039;:3}
for key in d:
       print(key, d[key])
# c 3
# b 2
# a 1
همین مسئله به صورت خلاصه شده هم می تونه نوشته بشه :print([key for key in d])
# [&#039;c&#039;, &#039;b&#039;, &#039;a&#039;]
متد ( )items می تونه برای حلقه همزمان کلید و مقدار استفاده بشه. در واقع هم به کلید دسترسی داریم هم به مقدار :for key, value in d.items():
       print(key, value)
# c 3
# b 2
# a 1
می تونیم از متد ( )values برای پیمایش فقط روی مقادیر استفاده کرد:for key, value in d.values():
       print(key, value)
# 3
# 2
# 1
دیکشنری با مقادیر پیش فرضدر کتابخانه استاندارد defaultdict در دسترس است:from collections import defaultdict

d = defaultdict(int)
d[&#039;key&#039;]                                 # 0
d[&#039;key&#039;] = 5
d[&#039;key&#039;]                                 # 5

d = defaultdict(lambda: &#039;empty&#039;)
d[&#039;key&#039;]                                # &#039;empty&#039;
d[&#039;key&#039;] = &#039;full&#039;
d[&#039;key&#039;]                                # &#039;full&#039;
ادغام دیکشنری هادیکشنری های زیر را در نظر بگیرید:&gt;&gt;&gt; fish = {&#039;name&#039;: &amp;quotNemo&amp;quot, &#039;hands&#039;: &amp;quotfins&amp;quot, &#039;special&#039;: &amp;quotgills&amp;quot}
&gt;&gt;&gt; dog = {&#039;name&#039;: &amp;quotClifford&amp;quot, &#039;hands&#039;: &amp;quotpaws&amp;quot, &#039;color&#039;: &amp;quotred&amp;quot}
Python 3.5+&gt;&gt;&gt; fishdog = {**fish, **dog}
&gt;&gt;&gt; fishdog
{&#039;hands&#039;: &#039;paws&#039;, &#039;color&#039;: &#039;red&#039;, &#039;name&#039;: &#039;Clifford&#039;, &#039;special&#039;: &#039;gills&#039;}
همانطور که این مثال نشان می دهد، کلیدهای تکراری با آخرین مقدار خود برابر می شوند.Python 3.3+&gt;&gt;&gt; from collections import ChainMap
&gt;&gt;&gt; dict(ChainMap(fish, dog))
{&#039;hands&#039;: &#039;fins&#039;, &#039;color&#039;: &#039;red&#039;, &#039;special&#039;: &#039;gills&#039;, &#039;name&#039;: &#039;Nemo&#039;}
تو این روش برای کلیدهای تکراری اولین مقدار ملاک هست نه آخرین مقدار.Python 2.x, 3.x&gt;&gt;&gt; from itertools import chain
&gt;&gt;&gt; dict(chain(fish.items(), dog.items()))
{&#039;hands&#039;: &#039;paws&#039;, &#039;color&#039;: &#039;red&#039;, &#039;name&#039;: &#039;Clifford&#039;, &#039;special&#039;: &#039;gills&#039;}
تو این روش هم واسه کلیدهای تکراری آخرین مقدار رو در نظر می گیره.&gt;&gt;&gt; fish.update(dog)
&gt;&gt;&gt; fish
{&#039;color&#039;: &#039;red&#039;, &#039;hands&#039;: &#039;paws&#039;, &#039;name&#039;: &#039;Clifford&#039;, &#039;special&#039;: &#039;gills&#039;}
متد dict.update از دیکشنری دوم برای بازنویسی قبلی استفاده می کند.دسترسی به کلیدها و مقدارهاهنگام کار با دیکشنری ها، اغلب لازم است به همه کلیدها و مقادیر موجود در دیکشنری، چه به صورت حلقه for، خلاصه لیست، یا فقط به عنوان یک لیست ساده، دسترسی پیدا کنید.دیکشنری زیر رو در نظر بگیرید:mydict = {
        &#039;a&#039;: &#039;1&#039;,
        &#039;b&#039;: &#039;2&#039;
}
با استفاده از متد ( )keys میتونید لیستی از کلیدها بگیرید:print(mydict.keys())
# Python2: [&#039;a&#039;, &#039;b&#039;]
# Python3: dict_keys([&#039;b&#039;, &#039;a&#039;])
ولی اگر لیستی از مقادیر رو می خواهید، از متد ( )values استفاده کنید:print(mydict.values())
# Python2: [&#039;1&#039;, &#039;2&#039;]
# Python3: dict_values([&#039;2&#039;, &#039;1&#039;])
اگر می خواهید با کلید و مقدار متناظر آن کار کنید، از متد ( )items استفاده کنید:print(mydict.items())
# Python2: [(&#039;a&#039;, &#039;1&#039;), (&#039;b&#039;, &#039;2&#039;)]
# Python3: dict_items([(&#039;b&#039;, &#039;2&#039;), (&#039;a&#039;, &#039;1&#039;)])
توجه کنید که از اونجایی که یک دیکشنری مرتب نشده هست، متدهای بالا هم نامرتب هستند. اگر به ترتیب این متدها اهمیت میدید، از ( )sort( ) ،sorted یا OrderedDict استفاده کنید.ساختن یک دیکشنریقوانین ساخت دیکشنری:هر کلید باید منحصر به فرد باشد (در غیر این صورت نادیده گرفته می شود)همه کلیدها باید hashable باشند (می تونیم با استفاده از تابع hash اون رو هش کنیم. در غیر این صورت TypeError میده)کلیدها نامرتب هستند.stock = {&#039;eggs&#039;: 5, &#039;milk&#039;: 2}
دیکشنری خالی:dictionary = { }

dictionary[&#039;eggs&#039;] = 5
dictionary[&#039;milk&#039;] = 2
مقادیر میتونند لیست هم باشند:mydict = {&#039;a&#039;: [1, 2, 3], &#039;b&#039;: [&#039;one&#039;, &#039;two&#039;, &#039;three&#039;]}
برای اضافه کردن عناصر جدید به لیست مقادیر از متد ( )list.append استفاده کنید:mydict[&#039;a&#039;].append(4) # =&gt; {&#039;a&#039;: [1, 2, 3, 4], &#039;b&#039;: [&#039;one&#039;, &#039;two&#039;, &#039;three&#039;]}
mydict[&#039;b&#039;].append(&#039;four&#039;) # =&gt; {&#039;a&#039;: [1, 2, 3, 4], &#039;b&#039;: [&#039;one&#039;, &#039;two&#039;, &#039;three&#039;, &#039;four&#039;]}
همچنین می توانیم با استفاده از لیستی از تاپل ها، دیکشنری ایجاد کنیم:iterable = [(&#039;eggs&#039;, 5), (&#039;milk&#039;, 2)]

dictionary = dict(iterables)

dictionary = dict(eggs=5, milk=2)
یه را دیگه اینه که از dict.fromkeys استفاده کنید:dictionary = dict.fromkeys((milk, eggs)) # =&gt; {&#039;milk&#039;: None, &#039;eggs&#039;: None}
dictionary = dict.fromkeys((milk, eggs), (2, 5)) # =&gt; {&#039;milk&#039;: 2, &#039;eggs&#039;: 5}
ساختن یک دیکشنری مرتببا استفاده از دستور OrderedDict از ماژول collections. این کار همیشه در هنگام پیمایش، عناصر دیکشنری را به ترتیب درج اصلی برمی گرداند:from collections import OrderedDict

d = OrderedDict()
d[&#039;first&#039;] = 1
d[&#039;second&#039;] = 2
d[&#039;third&#039;] = 3
d[&#039;last&#039;] = 4

# Outputs &amp;quotfirst 1&amp;quot, &amp;quotsecond 2&amp;quot, &amp;quotthird 3&amp;quot, &amp;quotlast 4&amp;quot
for key in d:
       print(key, d[key])
عمل Unpacking کردن دیکشنری با استفاده از عملگر **می توانید از اپراتور Unpacking آرگومان ** استفاده کنید تا جفت های کلید و مقدار در یک دیکشنری را در آرگومان های یک تابع قرار دهید:&gt;&gt;&gt; def parrot(voltage, state, action):
... print(&amp;quotThis parrot wouldn&#039;t&amp;quot, action, end=&#039; &#039;)
... print(&amp;quotif you put&amp;quot, voltage, &amp;quotvolts through it.&amp;quot, end=&#039; &#039;)
... print(&amp;quotE&#039;s&amp;quot, state, &amp;quot!&amp;quot)
...
&gt;&gt;&gt; d = {&amp;quotvoltage&amp;quot: &amp;quotfour million&amp;quot, &amp;quotstate&amp;quot: &amp;quotbleedin&#039; demised&amp;quot, &amp;quotaction&amp;quot: &amp;quotVOOM&amp;quot}
&gt;&gt;&gt; parrot(**d)
This parrot wouldn&#039;t VOOM if you put four million volts through it. E&#039;s bleedin&#039; demised !
از پایتون 3.5 به بعد نیز می توانید از این ** برای ادغام تعداد دلخواه اشیاء دیکشنری استفاده کنید:&gt;&gt;&gt; fish = {&#039;name&#039;: &amp;quotNemo&amp;quot, &#039;hands&#039;: &amp;quotfins&amp;quot, &#039;special&#039;: &amp;quotgills&amp;quot}
&gt;&gt;&gt; dog = {&#039;name&#039;: &amp;quotClifford&amp;quot, &#039;hands&#039;: &amp;quotpaws&amp;quot, &#039;color&#039;: &amp;quotred&amp;quot}
&gt;&gt;&gt; fishdog = {**fish, **dog}
&gt;&gt;&gt; fishdog
{&#039;hands&#039;: &#039;paws&#039;, &#039;color&#039;: &#039;red&#039;, &#039;name&#039;: &#039;Clifford&#039;, &#039;special&#039;: &#039;gills&#039;}
همانطور که این مثال نشان می دهد، کلیدهای تکراری با آخرین مقدار خود برابر می شوند.کامای (comma) دنباله دارمانند لیست ها و تاپل ها، می توانید یک کاما دنبال دار را در دیکشنری خود وارد کنید:role = {&amp;quotBy day&amp;quot: &amp;quotA typical programmer&amp;quot,
&amp;quotBy night&amp;quot: &amp;quotStill a typical programmer&amp;quot, }
سازنده ( )dictاز سازنده ( )dict برای ساختن دیکشنری استفاده می کنیم:dict(a=1, b=2, c=3) # {&#039;a&#039;: 1, &#039;b&#039;: 2, &#039;c&#039;: 3}
dict([(&#039;d&#039;, 4), (&#039;e&#039;, 5), (&#039;f&#039;, 6)]) # {&#039;d&#039;: 4, &#039;e&#039;: 5, &#039;f&#039;: 6}
dict([(&#039;a&#039;, 1)], b=2, c=3) # {&#039;a&#039;: 1, &#039;b&#039;: 2, &#039;c&#039;: 3}
dict({&#039;a&#039; : 1, &#039;b&#039; : 2}, c=3) # {&#039;a&#039;: 1, &#039;b&#039;: 2, &#039;c&#039;: 3}
مثال دیکشنری هاcar = {}
car[&amp;quotwheels&amp;quot] = 4
car[&amp;quotcolor&amp;quot] = &amp;quotRed&amp;quot
car[&amp;quotmodel&amp;quot] = &amp;quotCorvette&amp;quot
همونطور که میبینید مقدارها رو به کلیدها نسبت داده.مقدارهای یه دیکشنری با استفاده از کلیدهایشان قابل دسترسی هستن:print &amp;quotLittle &amp;quot + car[&amp;quotcolor&amp;quot] + &amp;quot &amp;quot + car[&amp;quotmodel&amp;quot] + &amp;quot!&amp;quot
روی مقادیر دیکشنری میتونیم پیمایش انجام بدیم:for key in car:
       print key + &amp;quot: &amp;quot + car[key]
# wheels: 4
# color: Red
# model: Corvette
همه ترکیبات مقادیر دیکشنریoptions = {
       &amp;quotx&amp;quot: [&amp;quota&amp;quot, &amp;quotb&amp;quot],
       &amp;quoty&amp;quot: [10, 20, 30]
}
در دیکشنری بالا، لیستی وجود داره که مجموعه ای از مقادیر را برای پیدا کردن کلید مربوطه نشان می دهد.فرض کنید میخواهید x=a را با y=10 یا y=10  را با x=a پیدا کنید، تا زمانی که تمام ترکیبات ممکن را بررسی کرده باشید. با استفاده از کد زیر می توانید لیستی ایجاد کنید که تمام این ترکیبات از مقادیر را برگرداند:import itertools
options = {
        &amp;quotx&amp;quot: [&amp;quota&amp;quot, &amp;quotb&amp;quot],
       &amp;quoty&amp;quot: [10, 20, 30]}

&amp;quoty&amp;quot: [10, 20, 30]}
keys = options.keys()
values = (options[key] for key in keys)
combinations = [dict(zip(keys, combination)) for combination in itertools.product(*values)]
print combinations
لیست زیر رو برمی گردونه:[{&#039;x&#039;: &#039;a&#039;, &#039;y&#039;: 10},
 {&#039;x&#039;: &#039;b&#039;, &#039;y&#039;: 10},
 {&#039;x&#039;: &#039;a&#039;, &#039;y&#039;: 20},
 {&#039;x&#039;: &#039;b&#039;, &#039;y&#039;: 20},
 {&#039;x&#039;: &#039;a&#039;, &#039;y&#039;: 30},
 {&#039;x&#039;: &#039;b&#039;, &#039;y&#039;: 30}]
اگه سوالی داشتید کامنت کنید </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Sun, 13 Oct 2019 12:57:31 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش پایتون کلید ورود به دنیای هوش مصنوعی (گام دوم - قسمت پانزدهم: لیست ها - بخش دوم)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D9%BE%D8%A7%D9%86%D8%B2%D8%AF%D9%87%D9%85-%D9%84%DB%8C%D8%B3%D8%AA-%D9%87%D8%A7-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-dbqvjz4sdboe</link>
                <description>سلام رفقادر قسمت قبل از آموزش پایتون به عنوان کلید ورود به دنیای هوش مصنوعی در مورد لیست ها که به عنوان پر  استفاده ترین ابزار در پایتون هستند صحبت کردیم در این قسمت هم این موضوع  رو ادامه میدیم. اگر اولین باره این مطلب رو می خونید و دوست دارید پایتون  یاد بگیرید به جلسه اول آموزش پایتون در این لینک برید و شروع کنید. برای اینکه بتونم جامع ترین آموزش رایگان پایتون رو در وب فارسی بنویسم نیاز به حمایت تک تک شما عزیزان دارم. با معرفی به دوستانتون می تونید در زمینه بهم یاری برسونید. ما الان اینجا هستیم :دسترسی به مقادیر لیستهمونطور  که گفتیم اندیس در پایتون از صفر شروع میشه. برای دسترسی به مقادیر لیست  میتونیم از شماره ایندکس هر مقدار استفاده کنیم. مثلا اندیس صفرم نشون  دهنده مقدار اول هست که اینجا 1 هست:1234lst = [1, 2, 3, 4]
lst[ 0 ]    # 1
lst[ 1 ]    # 2اگه  از اندیسی استفاده کنیم که تو لیست نیست، IndexError میده. الان در مثال  بالا ما اندیس های 0و1و2و3 رو داریم پس وقتی 4 رو بخوایم ارور می ده می گه  نیست :12lst[ 4 ]          # IndexError: list index out of rangeاندیس گذاری منفی هم که از آخر شروع میکنیم، اندیس آیتم آخر 1- ، قبلی 2- تا برسه به اولین آیتم:1234lst[ -1 ]    # 4
lst[ -2 ]    # 3
lst[ -5 ]    # IndexError: list index out of rangeمثلا شکل زیر رو نگاه کنید. از صفر شروع می شه میره جلو و از منفی بر می گرده عقب :لیست  به ما این اجازه رو میده که از برش [start:end:step] استفاده کنیم. خروجی  این برش یک لیست جدید هست که از اندیس start شروع میشه به اندیس end ختم  میشه. step هم میگه که چجوری گام برداریم. با چند تا مثال بهتون توضیح  میدم:12345678lst[1:]              # [2, 3, 4]
lst[:3]              # [1, 2, 3]
lst[::2]             # [1, 3]
lst[::-1]            # [4, 3, 2, 1]
lst[-1:0:-1]       # [4, 3, 2]
lst[5:8]            # [ ] since starting index is greater than length of lst, returns empty list
lst[1:10]          # [2, 3, 4] same as omitting ending indexتو  مثال اول اندیس شروع 1 هست و اندیس پایان و step رو نداریم، پس لیست جدید  از اندیس 1 شروع میشه تا آخر. تو مثال دوم اندیس شروع و step رو نداریم،  لیست جدید از اندیس 0 شروع میشه تا اندیس 3 ولی مقدار خود اندیس 3 تو لیست  جدید نباید باشه. تو مثال سوم فقط step رو داریم، لیست جدید از اندیس 0  شروع میشه و دوتا دوتا میره جلو تا آخر. مثال بعدی stepمون 1- هست، یعنی  معکوس میکنه لیست رو. مثال بعدی اندیس شروع 1- هست و اندیس پایان 0 و step  هم که 1- ، واضحه دیگه. مثال بعدی اندیس شروع 5 هست و اندیس پایان 8، لیست  جدید خالیه چون که اندیس هایی که برش بهمون داده بیشتر از طول لیسته. مثال  آخر اندیس شروع 1 هست و اندیس پایان 10، اندیس 10 که نداریم پس از اندیس 1  شروع میشه تا آخر.یه مثال دیگه:12lst[3:1:-1]      # [4, 3]وقتی step منفی باشه باید اندیس شروع بیشتر از اندیس پایان باشه.وقتی از step منفی استفاده می کنیم انگار از تابع reversed که واسه معکوس کردن عناصر لیست هست و پایین توضیح میدیم، استفاده کردیم:123reversed(lst)[0:2]      # 0 = 1 -1
                                  # 2 = 3 -1چجوری چک کنیم که لیست خالی هست؟تو  پایتون خالی بودن لیست با boolean False همراه هست. از این رو عبارت شرطی  زیر رو می تونیم برای بررسی خالی بودن لیست استفاده کنیم:12345lst = [ ]
if not lst :
         print(&amp;quotlist is empty&amp;quot)
# Output: list is emptyیا:123if len(lst) == 0 :
         print(&amp;quotlist is empty&amp;quot)پیمایش روی یک لیستما می تونیم از حلقه for مستقیما تو یک لیست استفاده کنیم(اینجا راجب حلقه های توضیح دادم). الان هر کدوم از عضوهای لیست چاپ شدن:1234567my_list = [&#039;foo&#039;, &#039;bar&#039;, &#039;baz&#039;]
for item in my_list:
       print(item)
# Output: foo
# Output: bar
# Output: bazروش دیگۀ پیمایش لیست براساس مقدار اندیس هست یعنی می گه اگر اندیس ما توی رنج 0 تا طول لیستمون بود دستور پرینت رو انجام بده:12345678for i in range(0 , len(my_list)) :
      print(my_list[i])
#output :
&gt;&gt;&gt;
foo
bar
bazتو  پرانتز جلوی range اولین مورد اندیس شروعه پیمایش هست که اینجا صفره،  دومین مورد هم طول پیمایشِ که اینجا کل لیست هست یعنی از اول تا کل طول  لیست.توجه کنید که تغییر آیتم ها در یک لیست وقتی که داریم روی لیست پیمایش انجام میدیم، ممکنه نتایج غیر منتظره ای داشته باشه:1234567for item in my_list :
       if item == &#039;foo&#039; :
              del my_list[0]
       print(item)
# Output :  foo
# Output :  bazتو مثال بالا، اولین آیتم رو تو پیمایش حذف کردیم، اما این باعث پرش شد.چجوری چک کنیم یک آیتم تو لیست هستخیلی راحت می تونیم این کارو انجام بدیم با کلمه in:1234567lst = [&#039;test&#039;, &#039;twest&#039;, &#039;tweast&#039;, &#039;treast&#039;]
&#039;test&#039; in lst
# Out: True

&#039;toast&#039; in lst
# Out: Falseهمونظور که می بینید اگه آیتم بود که true و اگه نبود false رو برمی گردونه.البته  اگه ما این کارو روی یک مجموعه انجام بدیم، خیلی سریع تره. پس می تونیم  وقتایی که لیست خیلی بزرگ بود واسه سرعت بخشیدن به کارمون اول لیست رو به  مجموعه تبدیل کنیم و بعد چک کنیم ببینیم آیتم مورد نظرمون هست یا نه:1234slst = set(lst)
&#039;test&#039; in slst
# Out: Trueدستور Any و Allحالا می خوام راجع به تابع های ( )all و ( )any توضیح بدم:تابع  any: اگه همه مقادیر false باشند یا لیست خالی باشه، false برمی گردونه.  اگه همه مقادیرمون true یا حداقل یکی از مقادیرمون true باشه، true برمی  گردونه:1234567891011121314nums = [1, 1, 0, 1]
any(nums)
# True

vals = [None, None, None, False]
any(vals)
# False

vals = [1, 2, 3, 4]
any(val &gt; 12 for val in vals)
# False
any((val * 2) &gt; 6 for val in vals)
# Trueتابع  all: اگه همه مقادیر true باشند یا لیست خالی باشه، true برمی گردونه. اگه  همه مقادیرمون false یا حداقل یکی از مقادیرمون false باشه، false برمی  گردونه:12345678nums = [1, 1, 0, 1]
all(nums)
# False

chars = [&#039;a&#039;, &#039;b&#039;, &#039;c&#039;, &#039;d&#039;]
all(chars)
# Trueمعکوس کردن عنصرهای لیستشما می تونید از تابع reversed واسه معکوس کردن عنصرهای یک لیست استفاده کنید:1234567numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [3]: rev = reversed(numbers)

In [4]: rev
Out[4]: [9, 8, 7, 6, 5, 4, 3, 2, 1]همونطور  که تو متدها توضیح دادم، برای معکوس کردن عناصر می تونیم از متد (  )reverse هم استفاده کنیم. یا می تونیم از step منفی که تو قسمت دسترسی به  مقادیر توضیح دادم، استفاده کنید:12345In [1]: numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

In [2]: numbers[::-1]
Out[2]: [9, 8, 7, 6, 5, 4, 3, 2, 1]جمع کردن و ادغام لیست هایک راه ساده واسه جمع کردن list1 و list2 استفاده از + است:12merged = list1 + list2وقتی می خوایم یک لیست از تاپل ها داشته باشیم، از zip استفاده می کنیم:12345678910alist = [&#039;a1&#039;, &#039;a2&#039;, &#039;a3&#039;]
blist = [&#039;b1&#039;, &#039;b2&#039;, &#039;b3&#039;]

for a, b in zip(alist, blist):
       print(a, b)
# Output:
# a1 b1
# a2 b2
# a3 b3اگه  لیست ها طول متفاوتی داشته باشن، به اندازه لیست کوتاه تر رو شامل میشه  یعنی اینجا کوتاهترین لیست 3 تا عضو داره بنابراین خروجی هم سه تا میشه:123456789101112131415alist = [&#039;a1&#039;, &#039;a2&#039;, &#039;a3&#039;]
blist = [&#039;b1&#039;, &#039;b2&#039;, &#039;b3&#039;, &#039;b4&#039;]

for a, b in zip(alist, blist):
       print(a, b)
# Output:
# a1 b1
# a2 b2
# a3 b3

alist = [ ]
len(list(zip(alist, blist)))
# Output:
# 0اگه می خوایم به اندازه طول لیست بزرگتر باشه، از itertools.zip_longest استفاده می کنیم:123456789101112alist = [&#039;a1&#039;, &#039;a2&#039;, &#039;a3&#039;]
blist = [&#039;b1&#039;]
clist = [&#039;c1&#039;, &#039;c2&#039;, &#039;c3&#039;, &#039;c4&#039;]

for a,b,c in itertools.zip_longest(alist, blist, clist):
       print(a, b, c)
# Output:
# a1 b1 c1
# a2 None c2
# a3 None c3
# None None c4به جای بقیه عناصر لیست های کوتاه تر None میذاره.از متد (insert(index, value استفاده کنیم:1234alist = [123, &#039;xyz&#039;, &#039;zara&#039;, &#039;abc&#039;]
alist.insert(3, [2009])
      print(&amp;quotFinal List :&amp;quot, alist)Output:12Final List : [123, &#039;xyz&#039;, &#039;zara&#039;, 2009, &#039;abc&#039;]طول یک لیستاز ( )len برای به دست آوردن طول لیست استفاده می کنیم:123len([&#039;one&#039;, &#039;two&#039;])                 # returns 2
len([&#039;one&#039;, [2, 3], &#039;four&#039;])       # returns 3, not 4تو دومیه خروجی 3 میشه نه 4، چون [3 ,2] یک عنصر هست نه دوتا.توجه کنید که ( )len یک تابع توکار هست نه متد.حذف مقادیر تکراری در لیستبرای  حذف مقادیر تکراری در لیست می تونیم لیست رو به مجموعه تبدیل کنیم.  همونطور که تو مجموعه ها گفتیم نمی تونیم عنصر تکراری در مجموعه ذخیره  کنیم. بعد اگه به ساختار داده لیست نیاز داشتیم دوباره مجموعه رو به لیست  تبدیل کنیم با استفاده از تابع ( )list:1234names = [&amp;quotaixk&amp;quot, &amp;quotduke&amp;quot, &amp;quotedik&amp;quot, &amp;quottofp&amp;quot, &amp;quotduke&amp;quot]
list(set(names))
# Out: [&#039;duke&#039;, &#039;tofp&#039;, &#039;aixk&#039;, &#039;edik&#039;]توجه  داشته باشید که با تبدیل یک لیست به یک مجموعه ، ترتیب اصلی از بین می  رود. برای حفظ ترتیب لیست می تونید از OrderedDict استفاده کنید:1234import collections
&gt;&gt;&gt; collections.OrderedDict.fromkeys(names).keys()
# Out: [&#039;aixk&#039;, &#039;duke&#039;, &#039;edik&#039;, &#039;tofp&#039;]مقایسه لیست هابرای  مقایسه لیست ها از عملگرهای مقایسه استفاده می کنیم. برای این کار هر دو  عملوند باید از یک نوع باشند. از اول شروع می کنه یکی یکی مقایسه کردن و  اگر نتیجه مطلوبی نداشته باشه همونجا false برمیگردونه:1234567891011[1, 10, 100] &lt; [2, 10, 100]
# True, because 1 &lt; 2
[1, 10, 100] &lt; [1, 10, 100]
# False, because the lists are equal
[1, 10, 100] &lt;= [1, 10, 100]
# True, because the lists are equal
[1, 10, 100] &lt; [1, 10, 101]
# True, because 100 &lt; 101
[1, 10, 100] &lt; [0, 10, 100]
# False, because 0 &lt; 1اگه شروع دوتا لیست یکی باشه، لیست کوتاه تر کمتره:123[1, 10] &lt; [1, 10, 100]
# Trueدسترسی به مقادیر لیست تو در توبا یک لیست سه بعدی شروع می کنیم:alist = [ [ [1,2],[3,4] ], [ [5,6,7],[8,9,10], [12, 13, 14] ] ]123print(alist [0] [0] [1])
#2دومین عنصر در لیست اولِ لیست اول.123print(alist[1] [1] [2])
#10سومین عنصر در لیست دومِ لیست دوم.1234alist[0] [0].append(11)
print(alist[0] [0] [2])
#11تو مثال بالا به انتهای اولین لیستِ لیست اول مقدار 11 رو append کردیم.می تونیم از حلقه های for تو در تو برای print لیست استفاده کنیم:123456789for row in alist:         #One way to loop through nested lists
       for col in row:
              print(col)
#[1, 2, 11]
#[3, 4]
#[5, 6, 7]
#[8, 9, 10]
#[12, 13, 14]توجه  داشته باشید که کد بالا رو با استفاده از خلاصه لیست می تونیم به شکل زیر  بنویسیم(خلاصه لیست رو تو بخش بعدی مفصل توضیح میدیم و لینکشو همین جا  میذاریم):123[col for row in alist for col in row]
#[ [1, 2, 11], [3, 4], [5, 6, 7], [8, 9, 10], [12, 13, 14] ]یک راه دیگه برای استفاده از حلقه های for تو در تو:12345678910for row in range(len(alist)): 
       for col in range(len(alist[row])):
              print(alist[row][col])
#[1, 2, 11]
#[3, 4]
#[5, 6, 7]
#[8, 9, 10]
#15
#[12, 13, 14]استفاده از برش در لیست تو در تو:123print(alist[1] [1:])
#[ [8, 9, 10], 15, [12, 13, 14] ]مثال بالا میگه که لیست با اندیس 1 که میشه لیست دومِ این لیست:alist = [[[1, 2, 11], [3, 4]], [[5, 6, 7], [8, 9, 10], 15, [12, 13, 14]]]از اندیس 1 که میشه دومین عنصر شروع بشه تا آخرین اندیس لیست دوم.ضرب یک لیست در یک عدد ثابتبرای عناصر immutable (تغییر ناپذیر):123my_list = [None] * 10
my_list = [&#039;test&#039;] * 10برای عناصر mutable (تغییر پذیر) ، برای مثال یک مجموعه:1234567&gt;&gt;&gt; my_list=[{1}] * 10
&gt;&gt;&gt; print(my_list)
[{1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}]
&gt;&gt;&gt; my_list[0].add(2)
&gt;&gt;&gt; print(my_list)
[{1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}, {1, 2}]اگه سوالی داشتید کامنت کنید</description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Sun, 06 Oct 2019 12:43:04 +0330</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی (گام دوم - قسمت چهاردهم : لیست ها - بخش اول)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D8%AF%D9%87%D9%85-%D9%84%DB%8C%D8%B3%D8%AA-%D9%87%D8%A7-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-ftshwwmlazs7</link>
                <description>سلام رفقا برای ورود به دنیای هوش مصنوعی شروع کردیم پایتون یاد بگیریم. آموزش پایتون رو از قسمت مقدماتی شروع کردم که از این لینک می تونید بخونید. بعد از اتمام قسمت مقدماتی وارد گام دوم شدم که سطح متوسط داره و پایتون رو با جزئیات بیشتری یاد می ده، جزئیاتی که در هیچ آموزش فارسی نمی تونید ببینید. برای اینکه بتونم جامع ترین آموزش رایگان پایتون رو در وب فارسی بنویسم نیاز به حمایت تک تک شما عزیزان دارم. با معرفی به دوستانتون می تونید در زمینه بهم یاری برسونید.  ما الان اینجا هستیم :تو این قسمت از آموزش پایتون می خوایم بریم سراغ لیست ها. لیست، ساختار داده‌ای همه کاره تو پایتون هست و توی این درس یه مقدمه ای راجبش گفتیم که می تونید بخونید. در واقع لیست ها مثل تاپل ها هستند با این تفاوت که تغییر پذیرند. می خوام قبل از این که وارد بحث لیست بشم راجع به یه ساختار داده تو پایتون براتون توضیح بدم. اساسی ترین ساختار داده تو پایتون sequence (دنباله در فارسی) هست و به صورت ترتیبی هست یعنی اهمیت داره اول کی بیاد دوم کی بیاد. به هر کدوم از المان های یک sequence یک عدد اختصاص داده می شود که همان شماره ی مکان قرار گیری یا اندیس هست. اندیس در زبان پایتون از صفر آغاز می شود. مثلا شکل زیر رو نگاه کنید اندیس مقدار P ، صفر یا -5 هست. پایتون دارای شش نوع از sequence ها هستش، ولی رایج ترین آن ها لیست ها و Tuple ها هستند. اعمال مشخصی وجود دارند که می تونیم بر روی انواع داده ای که دارای ساختار دنباله دار هستند انجام داد. این اعمال شامل فهرست کردن با اندیس، برش، اضافه کردن، ضرب و بررسی عضویت می باشد. علاوه بر این ها، پایتون دارای توابع توکار (built-in) برای بدست آوردن طول (length) ترتیب (sequence) و یافتن بزرگترین و کوچکترین المان می باشد.لیست ها مجموعه ای از داده ها رو در خود نگه می دارند که این داده ها را می تونیم تغییر بدیم و آپدیت کنیم. پس لیست ها mutable هستند یعنی میشه تغییرش داد.برای تعریف کردن لیست از کروشه [ ] استفاده می‌کنیم. تمام مقادیر بین کروشه‌ها با کاما (,) از هم جدا می‌شن. این رو در نظر داشته باشید، مقادیری که تو لیست وارد می‌کنید، می‌تونن از هر نوعی باشن:a = [1, 2, 3, 4, 5]متدها و عملیات های مربوط به لیستتوی این قسمت می خوام صحبت کنیم که چه کارایی می تونیم روی لیست ها انجام بدیمدستور appendبرای اضافه کردن یک عنصر جدید به آخر لیست از متد ()append استفاده می‌کنیم. مثلا همون لیست 1و2و3و4 رو در نظر بگیرید مقدارهای 6و7و8 رو با این دستور تهش اضافه کردیم. در قسمت دوم یک لیست اضافه شده و در بخش آخر هم یک رشته اضافه شده:# Append values 6, 7, and 7 to the list
a.append(6)
a.append(7)
a.append(7)
# a: [1, 2, 3, 4, 5, 6, 7, 7]

# Append another list
b = [8, 9]
a.append(b)
# a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9]]

# Append an element of a different type, as list elements do not need to have the same type
my_string = &amp;quothello world&amp;quot
a.append(my_string)
# a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9], &amp;quothello world&amp;quot]
توجه کنید که متد ()append فقط یک عنصر جدید رو به آخر لیست اضافه میکنه. اگر یک لیست رو به لیست دیگه ()append کنید، اتفاقی که میفته اینه که لیستی که اضافه کردید در انتهای لیست اول به یک عنصر واحد تبدیل میشه:# Appending a list to another list
a = [1, 2, 3, 4, 5, 6, 7, 7]
b = [8, 9]
a.append(b)
# a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9]]
a[8]
# Returns: [8,9]
دستور extend(enumerable)اینم مثل append اضافه می کنه به لیست فقط فرق اینکه که دستور append لیست رو به صورت یک عنصر اضافه می کرد ولی اینکه لیست رو به صورت تک به تک به انتهای لیست قبلی اضافه می کنه. a = [1, 2, 3, 4, 5, 6, 7, 7]
b = [8, 9, 10]
# Extend list by appending all elements from b
a.extend(b)
# a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
# Extend list with elements from a non-list enumerable:
a.extend(range(3))
# a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 0, 1, 2]
همینطور می تونید با عملگر + لیست ها رو به هم اضافه کنید. توجه کنید که با این کار هیچ کدوم از لیست های اصلی تغییر نمی کنند:a = [1, 2, 3, 4, 5, 6] + [7, 7] + b
# a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
دستور index(value, [startIndex])اندیس یا شماره ی مکان قرارگیری مقدار ورودی رو در لیست برمی گردونه. حالا این یعنی چی یعنی اینکه در مثال زیر اون چیزی که توی خونه هفتم قرار داره رو خروجی میده. این دستور یک مقدار دیگه هم میتونه بگیره که بهش می گه از کدوم خونه شروع کنم مثلا خط آخر در مثال زیر میگه هشتمین عنصر بعد از هفتمین خونه (اندیس 7 منظورمه) که چون نداریم ارور می ده. پس اگه مقدار ورودی تو لیست نباشه، ValueError میده:a.index(7)
# Returns: 6

a.index(49)          # ValueError, because 49 is not in a.

a.index(7, 7)
# Returns: 7

a.index(8, 7)       # ValueError, because there is no 7 starting at index 8
دستور insert(index, value)یک مقدار رو در موقعیت مشخص شده اضافه می کند. این متد دو پارامتر می گیره که اولی اندیس را مشخص می کند و دومی مقداری که باید در آن شماره ی مکان قراربگیره. مثلا خط اول عنصر صفر رو اول لیست وارد می کنه:a.insert(0, 0) # insert 0 at position 0
a.insert(2, 5) # insert 5 at position 2
# a: [0, 1, 5, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
دستور pop([index])یک عنصر رو با اندیس مشخص شده حذف می کند. وقتی از این متد استفاده می کنیم اگر ایندکس رو براش مشخص نکنیم به صورت پیش فرض آخرین عنصر از لیست رو حدف میکنه. مثلا توی مثال آخر عدد 10 حذف شده:a.pop(2)
# Returns: 2
# a: [0, 1, 3, 4, 5, 6, 7, 7, 8, 9, 10]

a.pop(8)
# Returns: 7
# a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

a.pop()
# Returns: 10
# a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
دستور remove(value)یک عنصر رو با مقدار مشخص شده حذف می کنه. مثلا توی مثال عدد 0 و عدد 9 حذف شده حواستون باشه این با اندیس کاری نداره و با مقدار کار داره. اگر مقدار مشخص شده رو پیدا نکنه ValueError میده:a.remove(0)
a.remove(9)
# a: [1, 2, 3, 4, 5, 6, 7, 8]

a.remove(10)
# ValueError, because 10 is not in a
دستور reverseمرتب سازی و جایگاه عناصر لیست را معکوس می کند:a.reverse()
# a: [8, 7, 6, 5, 4, 3, 2, 1]
دستور count(value)با استفاده از این تابع میتونیم بفهیم از یک مقدار چند تا در لیست وجود داره (دفعات تکرار) مثالا توی مثال ما از عدد 7 دوبار داریم:a.count(7)
# Returns: 2
دستور sortلیست رو مرتب می کنه:a.sort()
# a = [1, 2, 3, 4, 5, 6, 7, 8]
به صورت پیش فرض این متد  لیست رو به صورت صعودی مرتب میکنه. اگر بخواهیم به صورت نزولی این کار انجام بشه باید از پارامتر reverse در این متد استفاده کنیم:a.sort(reverse=True)
# a = [8, 7, 6, 5, 4, 3, 2, 1]
اگر می خواهید که بر اساس ویژگی های آیتم ها لیست رو مرتب کنید، آرگومان key این امکان رو می‌ده که بر اساس کلید اون رو مرتب کنیم (این مبحث یکم پیشرفته تر هست اینجا گذاشتمش که وقتی کلاس ها و توابع  رو یاد گرفتیم برگردیم ببینیم چیه ! ولی کلیتش اینکه که اگر یک سری دیتا داشته باشید می تونید بگید دقیقا بر چه اساسی مرتب کنه مثالا در مثال پایین یک بار گفتیم براساس اسم مرتب کن یکبار براساس تاریخ تولد و یک بار هم براساس قد ):import datetime
class Person(object):
    def __init__(self, name, birthday, height):
        self.name = name
        self.birthday = birthday
        self.height = height
    def __repr__(self):
        return self.name
        
l = [Person(&amp;quotJohn Cena&amp;quot, datetime.date(1992, 9, 12), 175),
Person(&amp;quotChuck Norris&amp;quot, datetime.date(1990, 8, 28), 180),
Person(&amp;quotJon Skeet&amp;quot, datetime.date(1991, 7, 6), 185)]

l.sort(key=lambda item: item.name)
# l: [Chuck Norris, John Cena, Jon Skeet]

l.sort(key=lambda item: item.birthday)
# l: [Chuck Norris, Jon Skeet, John Cena]

l.sort(key=lambda item: item.height)
# l: [John Cena, Chuck Norris, Jon Skeet]
در مورد لیستی از دیکشنری ها هم همینطوره:import datetime
l = [{&#039;name&#039; :  &#039;John Cena&#039;, &#039;birthday&#039;:  datetime.date(1992, 9, 12),&#039;height&#039; :  175},
{&#039;name&#039; :  &#039;Chuck Norris&#039;, &#039;birthday&#039; :  datetime.date(1990, 8, 28),&#039;height&#039; :  180},
{&#039;name&#039; :  &#039;Jon Skeet&#039;, &#039;birthday&#039; :   datetime.date(1991, 7, 6), &#039;height&#039; :  185}]

l.sort(key=lambda item :  item[&#039;name&#039;])
# l :  [Chuck Norris, John Cena, Jon Skeet]

l.sort(key=lambda item :  item[&#039;birthday&#039;])
# l :  [Chuck Norris, Jon Skeet, John Cena]

l.sort(key=lambda item :  item[&#039;height&#039;])
# l :  [John Cena, Chuck Norris, Jon Skeet]
یک راه بهتر برای sort کردن استفاده از attrgetter و itemgetterلیست ها رو می تونیم با استفاده از تابع های attrgetter و itemgetter مرتب کنیم مثالا در مثال زیر ما لیستی از دیکشنری ها داریم که هر عنصر لیست یک دیکشنری هست که مشخصات یک فرد درون قرار داره که اول با itemgetter اون چیزی که می خوام براساس اون مرتب کنیم رو انتخاب کردیم مثلا سن بعد براساس اون لیستمون رو مرتب کردیم:people = [{&#039;name&#039; : &#039;chandan&#039; , &#039;age&#039;:20 , &#039;salary&#039; : 2000},
{&#039;name&#039; : &#039;chetan&#039; , &#039;age&#039; : 18 , &#039;salary&#039; : 5000},
{&#039;name&#039; : &#039;guru&#039; , &#039;age&#039; : 30 , &#039;salary&#039; : 3000}]
by_age = itemgetter(&#039;age&#039;)
by_salary = itemgetter(&#039;salary&#039;)

people.sort(key=by_age)         #in-place sorting by age
people.sort(key=by_salary)      #in-place sorting by salary
تابع itemgetter  یک اندیس هم میتونه بگیره. همینطور وقتی که می خواهید بر اساس اندیس های یک تاپل مرتب کنید، مفید هستش:list_of_tuples = [(1, 2), (3, 4), (5, 0)]
list_of_tuples.sort(key=itemgetter(1))
print(list_of_tuples) #[(5, 0), (1, 2), (3, 4)]
اگر بخواهیم براساس ویژگی های یک شی مرتب کنیم، از attrgetter استفاده می کنیم (اینم مربوط به مفهوم کلاس ها و شی ها هست که بعدا توی اون قسمت توضیحش می دم چیه!) :persons =  [Person(&amp;quotJohn Cena&amp;quot, datetime.date(1992, 9, 12), 175),
                   Person(&amp;quotChuck Norris&amp;quot, datetime.date(1990, 8, 28), 180),
                   Person(&amp;quotJon Skeet&amp;quot, datetime.date(1991, 7, 6), 185)]

person.sort(key=attrgetter(&#039;name&#039;))     #sort by name
by_birthday = attrgetter(&#039;birthday&#039;)
person.sort(key=by_birthday)               #sort by birthday
دستور clearهمه آیتم های یک لیست رو حذف می کنه در واقع خالیش می کنه:a.clear( )
# a = [ ]
دستور Replicationضرب یک عدد صحیح در یک لیست که یک لیست بزرگ از تعدادی کپی لیست اصلی ایجاد میکنه. مثل اینکه لیستمون رو هی کپی پیست کنیم:b = [&amp;quotblah&amp;quot] * 3
# b = [&amp;quotblah&amp;quot, &amp;quotblah&amp;quot, &amp;quotblah&amp;quot]

b = [1, 3, 5] * 5
# [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5]
حذف  کردن آیتم از لیستبا استفاده از تابع del میتونیم مقداری رو از  لیست حذف کنیم:a = list(range(10))
del a[ : :2]
# a = [1, 3, 5, 7, 9]
del a[-1]
# a = [1, 3, 5, 7]
del a[ : ]
# a = [ ]
تو اولیه اومدیم عددای زوج لیست a رو حذف کردیم. تو دومیه هم اندیس 1- رو حذف کردیم(اولین اندیس از آخر). تو آخریه هم که کلا همه آیتم ها رو حذف کردیم.دستور Copyingوقتی شما از &quot;=&quot; استفاده می کنید در واقع لیست اصلی رو به یک نام جدید اختصاص میدین. یعنی هم لیست اصلی و هم نام جدید هر دو به یک لیست اشاره می کنند. تو هر کدوم تغییری ایجاد کنیم، رو هر دو اثر میذاره:a = [1, 2, 3, 4, 5]b = a
a.append(6)
# b: [1, 2, 3, 4, 5, 6]
همانطور که توی مثال نشون داده شده عدد 6 به a اضافه شده ولی به b هم اضافه شده ! حالا اگر بخواهیم همچنین اتفاقی نیافته نیاز داریم یک کار دیگه کنیم مثلا :اگر می خواهید که یک کپی از لیست ایجاد کنید، گزینه های زیر رو دارید:می تونید از برش استفاده کنید یعنی یک قسمت از لیست یا تمام لیست رو برش بزنید بریزید توی لیست جدید:new_list = old_list[ : ]
می تونید از تابع توکار لیست استفاده کنید:new_list = list(old_list)
می تونید از ()copy.copy استفاده کنید. این دستور یکم از list که بالا گفتم کند تر هست دلیلش رو توی کامنت بنویسید :import copy
new_list = copy.copy(old_list)           #inserts references to the objects found in the original
پس سه تا کار بالا باعث میشه که مشکلی که گفتم پیش نیاد و بتونید یک نسخه جدید از لیستتون داشته باشید. اگه سوالی داشتید کامنت کنید. در جلسه بعدی میریم سراغ قسمت دوم لیست ها </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Sat, 05 Oct 2019 12:45:34 +0330</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (گام دوم- قسمت سیزدهم: تاپل ها)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%B3%DB%8C%D8%B2%D8%AF%D9%87%D9%85-%D8%AA%D8%A7%D9%BE%D9%84-%D9%87%D8%A7-cdekwdh64fkz</link>
                <description>برای ورود به دنیای هوش مصنوعی نیازه که اول پایتون رو به عنوان ابزار قدرتمند بلد باشیم اگه تازه می خوای شروع کنی کافی از این لینک برای سراغ مقدمات آموزش پایتون. در گام اول آموزش در مورد مباحث مقدماتی آموزش پایتون صحبت کردیم. در گام دوم آموزش پایتون شروع کردیم در مورد مجموعه ها حرف زدیم که از این لینک می تونید بخونید. تو این بخش از آموزش پایتون می خوایم بریم سراغ تاپل ها که یک نوع داده چند قسمتی تو پایتون هستن.خصوصیات تاپل ها به لیست ها نزدیکه و به همین خاطر کار باهاشون راحته اگه هیچی راجبشون نمی دونی در درس چهارم راجبش صحبت کردیم که اینجا می تونی بخونی.المان های یک تاپل‌ با کاما (,) از هم جدا می‌شن:t =1, 2, 3
شما می تونید برای تشخیص راحت و زیبایی کدتون از پرانتز ( ) استفاده کنین و داده‌ها رو داخل پرانتز قرار بدین اما به این نکته توجه کنید که علامت ( ) نشان‌دهندۀ تاپل بودن داده نیست. ولی بهتره که پرانتزو بذارین.t = (1, 2, 3)
برای ساختن تاپل تک عضوی باید به صورت پایین عمل کنیم:t1 = 3,            # اين يک داده از نوع تاپل است

t2 = 3            # اين يک متغیر ساده است

t2 = (3,)         # اين يک داده از نوع تاپل است

t2 = (3)         # اين يک متغیر ساده است
اگر بخواهیم یک تاپل خالی داشته باشیم از ( ) استفاده می کنیم مثله:t0 = ( )
یه راه دیگه واسه ساختن تاپل اینه که از طریق توابع توکار تاپل رو بسازیم مثلا:t = tuple(&#039;lupins&#039;)
 print(t)           # (&#039;l&#039;, &#039;u&#039;, &#039;p&#039;, &#039;i&#039;, &#039;n&#039;, &#039;s&#039;)
 t = tuple(range(3))
 print(t)          # (0, 1, 2)تغییرناپذیری تاپل­ ها- immutableتاپل ها از نوع داده‌های immutable هستن. یعنی تغییرناپذیرند و شما نمی‌تونید مقادیر آن‌ها را ویرایش کنین. مقادیر اولیه که برای تاپل­ ها تعیین می‌کنید، تا موقعی که ما تاپل رو حذف کنیم یا تا آخر برنامه ثابت باقی میمونن و قابل تغییر نیستن.مثلا:&gt;&gt;&gt; t = (1, 4, 9)
 &gt;&gt;&gt; t[0] = 2
 Traceback (most recent call last):
 File &amp;quot&lt;stdin&gt;&amp;quot, line 1, in &lt;module&gt;
 TypeError: &#039;tuple&#039; object does not support item assignmentهمانطور که توی مثال نشون داده شده وقتی خواستیم تاپل رو تغییر بدیم خطا گرفته !اما یک راهی برای تغییر تاپل وجود داره. می­تونیم اول تاپل رو به لیست تبدیل کنیم بعد تغییرش بدیم و دوباره به تاپل تبدیل کنیم.اول اومدیم تاپل رو تبدیل به لیست کردیم بعد مقدار رو تغییر دادیم دوباره لیست رو تبدیل به تاپل کردیم:x = (&amp;quotapple&amp;quot, &amp;quotbanana&amp;quot, &amp;quotcherry&amp;quot)
y = list(x)
y[1] = &amp;quotkiwi&amp;quot
x = tuple(y)
print(x)
البته یه کار دیگه هم می تونیم انجام بدیم. از =+ استفاده کنیم. چون اینجوری خود تاپل رو تغییر نمیدیم و یک تاپل جدید می سازیم که شامل تاپل قبلی هم هست:&gt;&gt;&gt; t = (1, 2)
&gt;&gt;&gt; q = t
&gt;&gt;&gt; t += (3, 4)
&gt;&gt;&gt; t
(1, 2, 3, 4)
&gt;&gt;&gt; q
(1, 2)
با این کار در واقع یه تاپل جدید ایجاد کردیم ولی تاپل قبلی تغییری نکرده.دسترسی به مقادیر تاپلیک تاپل به اسم t تعریف کردیم که سه تا عدد داخلشه.t = (1, 2, 3)
کد زیر تاپل رو پرینت می­کنه(خروجی ازش می گیریم):&gt;&gt;&gt; t
(1, 2, 3)
&gt;&gt;&gt; print(t)
(1, 2, 3)
برای دسترسی به مقادیر در یک تاپل از اسم تاپل به همراه شماره اندیس (index) آن استفاده می‌کنیم. مثل کد زیر عنصر اول رو پرینت می­کنه:print(t [0])
کد زیر عنصر دوم تا آخر رو پرینت می­کنه:print(t [1:])
عمل Packing و Unpacking تاپل هاوقتی می نویسیم t =1, 2, 3 و مقادیر 3 ,2 ,1 رو به t نسبت میدیم، اسم این کار packing هست. چون داریم مقادیرمون رو تو یک تاپل pack می کنیم بسته بندی می کنیم.حالا برای unpack کردن مقادیر می تونیم مثل پایین عمل کنیم دو واقع داریم یکی یکی عدد های ۱ و۲ و۳ رو به متغیر های X و y و z نسبت می دهیم:x, y, z = (1, 2, 3)
# x == 1
# y == 2
# z == 3
اگر فقط بعضی از مقادیر تاپل رو نیاز داشته باشیم می تونیم از نماد _ استفاده کنیم یعنی با این نماد در نظرشون نمی گیریم:a = 1, 2, 3, 4
_, x, y, _ = a
# x == 2
# y == 3
حذف المان های یک تاپلحذف المان های یک تاپل به صورت تکی نمیشه چرا؟!. اما با دستور del می تونیم تاپل رو به طور کلی حذف کنیم:tup = 1, 2, 3
del tup;
توابع داخلی تاپل هامقایسه Comparisonالمان های دو تاپل را با هم مقایسه می کنه. اگه عناصر از یک نوع باشن پایتون مقایسه رو انجام میده و نتیجه رو برمی­گردونه.tuple1 = (&#039;a&#039;, &#039;b&#039;, &#039;c&#039;, &#039;d&#039;, &#039;e&#039;)
tuple2 = (&#039;1&#039;,&#039;2&#039;,&#039;3&#039;)
tuple3 = (&#039;a&#039;, &#039;b&#039;, &#039;c&#039;, &#039;d&#039;, &#039;e&#039;)
cmp(tuple1, tuple2)
out: 1
cmp(tuple2, tuple1)
out: -1
cmp(tuple1, tuple3)
out: 0
اگر تاپل اول از تاپل دوم بیشتر باشه، خروجی 1 میشه. اگر تاپل اول از تاپل دوم کمتر باشه، خروجی 1- میشه. اگر هر دو تاپل یکی باشن خروجی 0 میشه.طول تاپل Lengthدستور len طول تاپل یعنی تعداد کل المان های تاپل رو برمی­گردونه:len(tuple1)
out: 5
ماکسیمم در تاپل Maxآیتمی که بیشترین مقدار رو بین المان های تاپل داره برمی گردونه:max(tuple1)
out: &#039;e&#039;
max(tuple2)
out: &#039;3&#039;
مینیمم در تاپل Minاینم که واضحه! آیتمی که کمترین مقدار رو بین المان های تاپل داره برمی گردونه:min(tuple1)
out: &#039;a&#039;
min(tuple2)
out: &#039;1&#039;
تبدیل لیست به تاپلتبدیل لیست به تاپل به همین راحتیه:list = [1,2,3,4,5]
tuple(list)
Out: (1, 2, 3, 4, 5)متصل کردن دو تاپل concatenationاز عملگر + برای متصل کردن دو تاپل یا بیشتر استفاده می­ کنیم:tuple1 + tuple2
 out: (&#039;a&#039;, &#039;b&#039;, &#039;c&#039;, &#039;d&#039;, &#039;e&#039;, &#039;1&#039;, &#039;2&#039;, &#039;3&#039;)
تاپل ها hashable و equatable هستندقبل این که وارد بحث hashable بشیم، می خوام به طور خلاصه راجع به hash و hashing توضیح بدم که اصلا چی هستن؟ hashing یه مفهوم تو علوم کامپیوتره که برای بالا بردن کارایی، ساختمان داده هایی با دسترسی تصادفی که در اون حجم زیادی از داده ها ذخیره و به سرعت قابل دسترسی هستن،استفاده میشه. hash: به پیاده سازی تابع hash روی اطلاعات ورودی با اندازه دلخواه می‌گویند که خروجی با طول مشخص و ثابتی داره، که بدون کد مشخص از آن هیچ اطلاعاتی را نمی‌توان بازیابی کرد. حالا تابع hash چیه؟ به هر تابعی که اطلاعات با اندازه دلخواه را به اطلاعاتی با اندازه ثابت، آدرس دهی کند تابع hash می‌گویند.داده هایی Hashable هستند که مقدار Hash آن ها در طول عمرشون تغییر نکنه و بتونیم با عناصر دیگه مقایسون کنیم. برای مقایسه هم باید مقدار hash آن ها یکسان باشه. اگر همۀ اعضای تاپل Hashable باشن تاپل Hashable میشه. hashable و Equatable دست به دست هم میدن تا ما بتونیم دو تا عنصر رو با هم مقایسه کنیم.hash( (1, 2) )                   #  هست hashable # ok
hash( ([ ], {&amp;quothello&amp;quot})        # not ok
دومی Hashable نیست، چون لیست و مجموعه Hashable نیستن.اندیس گذاری تاپل Indexingاندیس در تاپل ها از صفر شروع میشه:x = (1, 2, 3)
 x[0]         # 1
 x[1]         # 2
 x[2]         # 3
 x[3]         # IndexError: tuple index out of range
با اعداد منفی هم میشه اندیس ­گذاری کرد. اندیس آخرین عنصر میشه 1- ، قبلی 2- ، ... تا برسه به اولین عنصر یعنی اندیس منفی یک نشون دهنده عدد سه هست :x[-1]  # 3
 x[-2]  # 2
 x[-3]  # 1
 x[-4]  # IndexError: tuple index out of range
می­تونیم داخل یک محدوده اندیس ­گذاری کنیم:print(x[:-1])  # (1, 2)
 print(x[-1:])  # (3,)
 print(x[1:3])  # (2, 3)
وارونه کردن المان ها  Reversingبرای وارونه کردن المان ها تو یک تاپل به صورت زیر عمل می کنیم:colors = &amp;quotred&amp;quot, &amp;quotgreen&amp;quot, &amp;quotblue&amp;quot
 rev = colors[::-1]
 # rev: (&amp;quotblue&amp;quot, &amp;quotgreen&amp;quot, &amp;quotred&amp;quot)
 colors = rev
 # colors: (&amp;quotblue&amp;quot, &amp;quotgreen&amp;quot, &amp;quotred&amp;quot)
یا:rev = tuple(reversed(colors))
 # rev: (&amp;quotblue&amp;quot, &amp;quotgreen&amp;quot, &amp;quotred&amp;quot)
 colors = rev 
 # colors: (&amp;quotblue&amp;quot, &amp;quotgreen&amp;quot, &amp;quotred&amp;quot)
حرف آخرحالا این همه از تاپل حرف زدیم، چیزی که نشه تغییرش داد به چه دردی میخوره؟ باید گفت که تاپل برای جاهاییه که یه دسته از اطلاعات داریم و نمیخوایم مقادیرشون توی مرور زمان تغییر کنه. مثلا برنامه ای دارین که از روزهای هفته استفاده میکنه. اسم روزهای هفته همیشه باید ثابت باشه پس از تاپل استفاده می کنیم که اشتباها یکجا تغییر ندیم اسماشون رو. یا مثلا کد ملی آدمها هیچوقت عوض نمیشه. یا توی یه شرکت هیچوقت کد پرسنلی عوض نمیشه.اگر سوالی داشتید کامنت کنید</description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Tue, 01 Oct 2019 12:47:41 +0330</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (گام دوم- قسمت دوازدهم :مجموعه ها)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D8%A7%D8%B2%D8%AF%D9%87%D9%85-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D9%87%D8%A7-ww8jqp8etr7v</link>
                <description>در این سری از آموزش ها به آموزش پایتون به عنوان مقدمه ای برای ورود به دنیای هوش مصنوعی می پردازیم. گام اول این آموزش در راستای آشنایی اولیه با مفاهمیم مقدماتی آموزش پایتون بود که از این لینک می تونید مطالب مربوط به اون رو دنبال کنید. در این گام از آموزش پایتون به مباحث بیشتری می پردازیم که سطحش یکم بالاتر از سری قبلی هست. در این بخش می ریم سراغ مجموعه ها که به صورت یک نوع داده در پایتون استفاده می شود. مجموعه ها در پایتون دقیقا عین مجموعه ها در ریاضی هستن. چند تا نکته هست که در مجموعه ها باید به آن توجه کنیم . نکته اول اینه که ترتیب در مجموعه ها مهم نیست یعنی این که کدوم عنصر اول باشه کدوم دوم اهمیتی نداره! نکته دوم اینه که نمی تونیم عنصر تکراری در مجموعه ذخیره کنیم یعنی مثالا نمی تونیم همچین چیزی داشته باشیم :s={1,1,2}نکته سوم این که عناصر مجموعه immutable هستن همون طور که در این لینک توضیح دادیم یعنی اینکه تغییر ناپذیرند. در واقع در مثال بالا نمی تونیم جای ۲ عدد ۳ رو بزاریم. نکته چهارم این که خود مجموعه ولی mutable هست یعنی خود مجموعه می تونه تغییر کنه در واقع می تونیم بهش مقدار اضافه کنیم یا ازش کم کنیم. اضافه کردن و حذف کردن در مجموعه برای اضافه کردن از دستور add استفاده می شه مثل مثال زیر که عدد ۴ رو به مجموعه اضافه می کنه :s = {1,2,3}
 s.add(4) # s == {1,2,3,4}برای حذف کردن هم از remove یا discard میشه استفاده کرد. تفاوت این دو هم نشان داده شده همانطور که می بینید دستور discard اگر عنصر مورد نظر وجود نداشته باشد خطا نمی دهد ولی دستور remove اگر عنصر مورد نظر وجود نداشته باشد خطا می دهد. s.discard(3) # s == {1,2,4} 
s.discard(5) # s == {1,2,4} 
s.remove(2) # s == {1,4} 
s.remove(2) # KeyError!چک کردن وجود عنصر در مجموعه در خیلی از کاربرد ها نیاز است که چک کنیم که یک عنصر در یک مجموعه وجود داره یا خیر که این کارو میشه با دستور in  انجام داد. # Existence check 
2 in {1,2,3} # True 
4 in {1,2,3} # False 
4 not in {1,2,3} # Trueاعمال روی مجموعه ها اشتراکاگر یادتون باشه در ریاضی یک سری کار روی مجموعه ها می تونستیم انجام بدیم مثل اشتراک / اجتماع /تفاضل و زیر مجموعه و ... . در پایتون هم همین کارهارو می شه کرد. مثالا اگر بخواهیم اشتراک دوتا مجموعه رو در بیاریم از intersection استفاده می کنیم یا اینکه می تونیم دوتا مجموعه رو باهم &amp; کنیم مثلا در مثال زیر ۳و۴و۵ مشترک هستند :# Intersection 
{1, 2, 3, 4, 5}.intersection({3, 4, 5, 6}) # {3, 4, 5} 
{1, 2, 3, 4, 5} # {3, 4, 5}اجتماعاگر بخواهیم اجتماع دوتا مجموعه رو دربیاریم از Union استفاده می کنیم یا اینکه می شه دو مجموعه را باهم or کرد و از | استفاده کرد.  # Union 
{1, 2, 3, 4, 5}.union({3, 4, 5, 6}) # {1, 2, 3, 4, 5, 6} 
{1, 2, 3, 4, 5} | {3, 4, 5, 6} # {1, 2, 3, 4, 5, 6}تفاضلاگر بخواهیم تفاضل دو مجموعه رو در بیاریم یعنی اینکه اون چیزیایی که در مجموعه دوم هست رو از مجموعه اول کم کنیم از diffrence استفاده می کنیم که میشه از علامت تفریق هم استفاده کرد:# Difference {1, 2, 3, 4}.difference({2, 3, 5}) # {1, 4} 
{1, 2, 3, 4} - {2, 3, 5} # {1, 4} تفاضل متقارن این حالت مثل تفاضل هست با این تفاوت عنصر هایی که در مجموعه اول وجود ندارند هم اضافه می شود. مثلا عدد ۵ چون وجود نداره در مجموعه اول اضافه شده . از symmetric_difference یا ^ استفاده می کنیم. # Symmetric difference with 
{1, 2, 3, 4}.symmetric_difference({2, 3, 5}) # {1, 4, 5} 
{1, 2, 3, 4} ^ {2, 3, 5} # {1, 4, 5}عمل supersetبرای اینکه چک کنیم یک مجموعه ای آیا مادر یک مجموعه دیگه هست یا خیر . برعکس زیر مجموعه هست. که می شه از  بزرگتر مساوی و یا دستور issuperset  استفاده کرد. # Superset check 
{1, 2}.issuperset({1, 2, 3}) # False {1, 2} &gt;= {1, 2, 3} # Falseزیر مجموعه این که یک مجموعه ای آیا به مجموعه دیگه تعلق داره یا نه که این رو میشه با کوچکتر مساوی یا دستور issubsetچک کرد. # Subset check 
{1, 2}.issubset({1, 2, 3}) # True {1, 2} &lt;= {1, 2, 3} # Trueعمل disjointدر واقع چک می کنه آیا دو مجموعه اشتراکی دارند یا خیر. که میشه از isdisjoint برای اینکار استفاده کرد. # Disjoint check 
{1, 2}.isdisjoint({3, 4}) # True 
{1, 2}.isdisjoint({1, 4}) # Falseاستفاده از مجموعه ها برای استخراج عناصر منحصر به فرد لیست ها یکی از کارهای باحالی که می شه با مجموعه ها کرد اینه که می تونیم عنصرهای تکراری لیست هارو حذف کنیم. دلیلشم اینکه که مجموعه ها عنصر تکراری ندارند. برای مثال دستور زیر اول لیست رستوران ها رو تبدیل به مجموعه می کنه دوباره تبدیل به لیست می کنه که همه رستوران تکراریا حذف شدن. list(set(restaurants))مجموعه ای از مجموعه ها شاید توی مسئله برای ما پیش بیاد بخواهیم چند تا مجموعه رو بریزیم توی یک مجموعه اولین چیزی که به ذهنمون می رسه اینه :Set of Sets
{{1,2}, {3,4}}اما با همچین اروری مواجه می شیم:Traceback (most recent call last):
 File &amp;quot&lt;stdin&gt;&amp;quot, line 1, in &lt;module&gt;
 TypeError: unhashable type: &#039;set&#039;که مرتبط با unhashable بودن نوع داده مجموعه هست که در درس های بعدی راجب اینکه hashable چیه صحبت می کنم و لینکشو اینجا می زارم. برای حل این مشکل از frozenset استفاده میشه :{frozenset({1, 2}), frozenset({3, 4})}مجموعه خالی اگر بخواهیم یک مجموعه خالی تعریف کنیم {} و از این استفاده کنیم اشتباهه چون که این برای ما یک دیکشنری خالی بر می گردونه. برای مجموعه خالی از ()set استفاده می کنیم. کلام آخرگاهی نیاز داریم داده خودمون رو در مجموعه نگه داریم و تکراری هم داریم مثل :&gt;&gt;&gt; setA = {&#039;a&#039;,&#039;b&#039;,&#039;b&#039;,&#039;c&#039;}یه راه اینه که بیایم از لیست ها استفاده کنیم ولی بعضی وقت ها ترتیبی بودن عناصر هم برای مهم نیست فقط می خواهیم بدونیم هر عنصر چیه و چند بار اومده . برای اینکار می تونیم از ماژول collection تابع counter را استفاده کنیم. داریم :&gt;&gt;&gt; from collections import Counter 
&gt;&gt;&gt; counterA = Counter([&#039;a&#039;,&#039;b&#039;,&#039;b&#039;,&#039;c&#039;]) 
&gt;&gt;&gt; counterA 
Counter({&#039;b&#039;: 2, &#039;a&#039;: 1, &#039;c&#039;: 1})همونطور که می بینید این دستور به صورت دیکشنری اطلاعات رو ذخیره می کنه. اگر سوالی داشتید کامنت کنیددرس بعدی در مورد تاپل ها صحبت می کنیم که از لینک زیر می تونید بخونید  https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%B3%DB%8C%D8%B2%D8%AF%D9%87%D9%85-%D8%AA%D8%A7%D9%BE%D9%84-%D9%87%D8%A7-cdekwdh64fkz </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Thu, 29 Aug 2019 19:55:30 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (جمع بندی گام اول (بخش مقدماتی))</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AC%D9%85%D8%B9-%D8%A8%D9%86%D8%AF%DB%8C-%DA%AF%D8%A7%D9%85-%D8%A7%D9%88%D9%84-%D8%A8%D8%AE%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-vjlp0ah5cusd</link>
                <description>سلام رفقا گام اول آموزش پایتون با یازده درس تمام شد! آموزش پایتونی رو که شروع کردم یکم با بقیه آموزش های پایتون فرق داره فرقشم اینکه که سعی کردم اول با مفاهیم آشنا بشید و از برنامه نویسی خسته نشید و همینطور که جلو تر می ریم دوباره مباحث مرور شده و نکته های بیشتری یاد می گیریم. آموزش پایتون ارائه شده به مشارکت شما نیاز داره که می تونه دعوت دوستاتون به این سری نوشته ها باشه و یا اینکه مشکلات خودتون رو با اجرای برنامه ها کامنت کنید. این طوری هم یاد می گیرید هم یه چیزی هم یاد بقیه می دین. حمایت شما باعث می شه بتونم گام های بعدی رو هم ایجاد کنم (:قلب)گام اول آموزش پایتون هدفش این بود که شما از برنامه نویسی نترسین و بیاین جلو. شروع کنید یه چیزایی بنویسید هر چند ساده. این که با مفاهیم اولیه برنامه نویسی پایتون هم آشنا شدین.  توی این نوشته می خواهیم ببینیم چیا گفتیم و الان کجا هستیم. قسمت اول (لینک) - نصبتوی این قسمت از آموزش پایتون راجب نصب پایتون صحبت کردیم و گفتیم چطوری اولین خط کدمون رو بنویسیم. همچنین راجب ورژن های پایتون و محیط های برنامه نویسی آنلاین گفتیمقسمت دوم (لینک) - متغیرهاتوی این قسمت از آموزش پایتون راجب متغیر توضیح دادیم و گفتیم اصن متغیر چیه و چه قوانینی برای نام گذاریش هستقسمت سوم (لینک) - تورفتگی کدتوی این قسمت از آموزش پایتون راجب تو رفتگی کد ها صحبت کردیم. اینجا می تونید فرم نوشتن تابع و شرطها در پایتون رو ببینید. همچنین راجب pass صحبت کردیم. در نهایت راجب این صحبت کردیم که آیا Tab خوبه یا Space (برای ایجاد تو رفتگی) قسمت چهارم (لینک) - انواع داده ها (لیست/دیکشنری/تاپل/مجموعه/رشته)توی این قسمت از آموزش پایتون با انواع داده ها مثل boolean / داده های عددی / رشته ها / لیست ها / دیکشنری/ تاپل ها/ مجموعه آشنا شدیم. کار با این داده ها توی زبان پایتون خیلی اهمیت داره و بسیار کارمون رو راحت می کنه. حالا در گام های بعدی با جزئیات بیشتری بهش پرداخته می شه. قسمت پنجم (لینک) - تبدیل داده هاتوی این قسمت از آموزش پایتون راجب این که متغیر هامون از چه نوعی هستن و چطوری بهم تبدیل میشن حرف زدیم . ادامه قسمت قبلی هست. قسمت ششم (لینک) - ماژول و توابعتوی این قسمت از آموزش پایتون راجب ماژول و تابع صحبت کردیم. اینکه توابع درونی خود پایتون چی هستن ؟! و همچنین اینکه چطوری می تونید ماژول بنویسید و تابع هاشو داخل برنامتون وارد کنید. قسمت هفتم (لینک) - کامنت گذاری و داکیومنت نویسیتوی این قسمت از آموزش پایتون راجب کامنت گذاری و داکیومنت نویسی توضیح دادیم. اینکه انواع کامنت گذاری چیه و چطوری می تونیم برای توابعی که می نویسی داکیومنت ایجاد کنید. قسمت هشتم (لینک) - عبارات شرطیتوی این قسمت از آموزش پایتون راجب عبارت های شرطی صحبت کردیم و عملگر های AND / OR /NOT قسمت نهم (لینک) - حلقه ها بخش اولتوی این قسمت از آموزش پایتون راجب حلقه ها (دستور FOR) صحبت کردیم . همچنین اینکه حلقه های تو در تو چی هستن و else چطوری در حلقه استفاده می شه!قسمت دهم (لینک) - حلقه ها بخش دوم توی این قسمت از آموزش پایتون در مورد اینکه چطوری می تونیم از حلقه بیایم بیرون و چطوری می تونیم حلقه را ادامه بدیم break و continue  صحبت کردیم همچنین در مورد while و اینکه چطوری می تونیم do while که در پایتون وجود نداره رو بنویسیم. قسمت یازدهم (لینک) - عملگر ها توی این بخش هم راجب عملگرهای تقسیم /ضرب/توان/ جمع / ضرب /تفریق صحبت کردیم و اولیت عملگرها رو نیز نشون دادیم. توی درس بعدی می ریم سراغ مجموعه ها که گام دوم از آموزش پایتون هست که از لینک زیر می تونید بخونید.  https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%DA%AF%D8%A7%D9%85-%D8%AF%D9%88%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D8%A7%D8%B2%D8%AF%D9%87%D9%85-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D9%87%D8%A7-ww8jqp8etr7v همچنین می توانید به لیست درس های گام دوم در لینک زیر دسترسی داشته باشید  https://vrgl.ir/bAoin </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Sun, 11 Aug 2019 13:05:21 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت یازدهم-عملگرها)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%DB%8C%D8%A7%D8%B2%D8%AF%D9%87%D9%85-%D8%B9%D9%85%D9%84%DA%AF%D8%B1%D9%87%D8%A7-sgj41k9ssxr2</link>
                <description>آموزش پایتون مقدمه ای هست برای ورود به دنیای هوش مصنوعی . توی این نوشته با قسمت یازدهم از آموزش پایتون با شما هستم. اگر تازه دارید یاد می گیرد نگران نباشید کافیه از لینک زیر به قسمت اول آموزش پایتون برید و گام به گام جلو بیاین سوالی هم داشتید کامنت کنید. آموزش پایتون قسمت اول چون می خواستم خسته نشید یک درس آسون از پایتون براتون گذاشتم. توی این قسمت از آموزش پایتون می ریم سراغ عملگرها که به زبون خودمون همون ضرب و تقسیم و ... می شه. چند تا نکته هم داره که در ادامه بهتون می گم. عملگر تقسیم / یا //  تقسیم توی پایتون ۲ و ۳ با هم فرق داره ! اول بریم سراغ نسخه قدیمی تر یعنی پایتون ۲. عدد های زیر رو در نظر بگیرید a, b, c, d, e = 3, 2, 2.0, -3, 10همین جا یه چیز یاد بگیریم که اینطوری هم می تونیم به متغیر هامون عدد بدیم. توی مثال بالا a=3 هست و b=2 و الی آخر. وقتی a رو به b تقسیم کنیم قاعدتا میشه ۱.۵ ولی در پایتون ۲ این مقدار رو ۱ در نظر می گیره دلیلشم اینکه چون a عدد صحیح هست و b هم عدد صحیح هست پس خروجیش هم عدد صحیح در نظر می گیره و اون ۱.۵ رو به سمت پایین گرد می کنه که میشه ۱. نگاه کنید :a / b # = 1 
a / c # = 1.5 
d / b # = -2 
b / a # = 0 
d / e # = -1(حواسمون هست که هنوز داریم راجب پایتون ۲ صحبت می کنیم) . خط دوم چرا درست ؟! c هم که همون ۲ هست و ۳ تقسیم بر ۲ میشه ۱.۵ که داره درست نشون میده. همانطور که گفتم توی پایتون ۲ به نوع متغیر دو طرف نگاه می کنه یعنی وقتی c مقدار ۲.۰ هست یعنی اعشاریه پس خروجیش هم اعشاری میشه. حالا بریم توی پایتون ۳ (ما همین نسخه رو کار داریم) :a / b # = 1.5 
e / b # = 5.0 
a // b # = 1 
a // c # = 1.0اینجا دیگه اومدن درستش کردن یعنی a/b شد همون ۱.۵ ولی بجاش یک عملگر دیگه در نظر گرفتن که اینه // دو تا تقسیم کنار هم. کار این عملگر  اینه که تقسیم می کنه بعدش به پایین گرد می کنه. همون طور که می بینید a//b میشه ۱. نتیجه گیری بحث تقسیمون می شه حالت های زیر که مثلا خط دوم می گه اگه سمت چپ تقسیم int باشه و سمت راستش float خروجیش میشه float(عدد اعشاری) :int and int (gives an int in Python 2 and a float in Python 3) 
int and float (gives a float) 
int and complex (gives a complex) 
float and float (gives a float) 
float and complex (gives a complex) 
complex and complex (gives a complex)عملگر جمع + اینم که ساده هست دو تا عدد رو باهم جمع می کنه a, b = 1, 2 
# Using the &amp;quot+&amp;quot operator: 
a + b  # = 3 یا میشه مثل زیر نوشتشون. که همونه جمع a+b هست که ریخته میشه دوباره توی a :  a += b # a = 3 
  (equivalent to a = a + b) اینم نتیجه جمع دو تا عدد هست که نوع هر متغیری چی باشه خروجیش چی می شه :int and int (gives an int) 
int and float (gives a float) 
int and complex (gives a complex) 
float and float (gives a float) 
float and complex (gives a complex) 
complex and complex (gives a complex)از عملگر جمع توی نوع رشته/لیست و تاپل هم استفاده میشه. خیلی هم کاربردیه. کارش اینه که دو تا رشته یا لیست یا تاپل رو می چسبونه بهم. نگاه کنید:&amp;quotfirst string &amp;quot + &amp;quotsecond string&amp;quot  # = &#039;first string second string&#039; 
[1, 2, 3] + [4, 5, 6] # = [1, 2, 3, 4, 5, 6]اولی یک مثالی از رشته هست دومی یک مثال از لیست. عملگر توان ** بریم سر وقت توان. از دوتا علامت * ضرب استفاده میشه(این سادگیه زبان پایتون رو میرسونه!) یا اینکه می تونیم از تابع درونی pow استفاده کنیم.a, b = 2, 3 
(a ** b) # = 8 
pow(a, b) # = 8 عملگر تفریق -a, b = 1, 2 
# Using the &amp;quot-&amp;quot operator: 
b - a # = 1 نتیجه گیری نهاییشم می شه این:int and int (gives an int) 
int and float (gives a float) 
int and complex (gives a complex) 
float and float (gives a float) 
float and complex (gives a complex) 
complex and complex (gives a complex)عملگر ضرب * a, b = 2, 3 
a * b # = 6 نتیجش هم میشه این :int and int (gives an int) 
int and float (gives a float) 
int and complex (gives a complex) 
float and float (gives a float) 
float and complex (gives a complex) 
complex and complex (gives a complex)اولویت عملگر ها پایتون از قانون PEMDAS پیروی می کنه . حال این چیه:حرف P اول نشون دهنده Parentheses که می شه پرانتز. یعنی اولیت اول با پرانتزهحرف E نشون دهنده Exponents که میشه توان. یعنی اولیت بعدی با توان هستحرف M نشون دهنده Multiplication که میشه ضرب حرف D نشون دهنده Division  که میشه تقسیمحرف A نشوند دهنده Addition که میشه جمع حرف S نشون دهنده Subtraction که میشه تفریقضرب و تقسیم هم اولویت هستن همچنین جمع و تفریق هم اولویتن. مثال زیر رو ببینید:&gt;&gt;&gt; a, b, c, d = 2, 3, 5, 7
&gt;&gt;&gt; a ** (b + c) # parentheses
256

&gt;&gt;&gt; a * b ** c # exponent: same as `a * (b ** c)`
7776

&gt;&gt;&gt; a + b * c / d # multiplication / division: same as `a + (b * c / d)`
4.142857142857142تصویر زیر اولویت عملگرهای پایتون رو از بالاترین به پایین ترین نشون می ده:اولویت عملگر ها  در پایتوناگر سوالی داشتید کامنت کنید. خب تا این جا بخش اول آموزش پایتون تموم شد که در لینک زیر می تونید جمع بندی این گام رو بخونید.  https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D8%AC%D9%85%D8%B9-%D8%A8%D9%86%D8%AF%DB%8C-%DA%AF%D8%A7%D9%85-%D8%A7%D9%88%D9%84-%D8%A8%D8%AE%D8%B4-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-vjlp0ah5cusd </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Tue, 06 Aug 2019 13:04:02 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت دهم-بخش دوم :حلقه ها)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%87%D9%85-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-%D8%AD%D9%84%D9%82%D9%87-%D9%87%D8%A7-amhwmi7yie18</link>
                <description>به همین زودی ده قسمت از آموزش پایتون تموم شد! اگر دوست دارید وارد دنیای هوش مصنوعی بشید لازمه کار یاد گرفتن زبان پایتون به عنوان ابزار هست. اگر اولین باره این نوشته رو می خونید به لینک زیر برید و از اول شروع کنید بیاین جلو :آموزش پایتون قسمت اول توی قسمت قبلی شروع کردیم راجب حلقه ها اگر هنوز اونو نخوندین اول از اینجا بخونید بعدش بیاین سراغ این نوشته. در ادامه آموزش پایتون درباره حلقه ها به while می پردازیم. یک تمرین هم داریم که خوندین کامنت کنید. دستور while :خیلی راحته می گه هر چیزی که درون من قرار داره رو انجام بده تا وقتی که بهت گفتم کافیه. مثال زیر رو ببینید:i = 1
while i &lt; 6:
    print(i)
    i += 1

1
2
3
4
5می گه تا وقتی که مقدار i کمتر از ۶ هست اونو توی خروجی چاپ کن و یکی به i اضافه کن. پس تا جایی که شرط درست باشه اون حلقه تکرار میشه. حالا اگر شرط حلقه همیشه درست باشه این حلقه بی نهایت بار تکرار میشه. مثال :while True:
    print &quot;Infinite loop&quot;

# Infinite loop
# Infinite loop
# Infinite loop
# ...توی مثال بالا این اتفاق افتاده شرط حلقه همیشه درست هست پس بی نهایت دستور infinite loop را چاپ می کند. چطوری از حلقه بیایم بیرون ؟!خیلی راحت با دستور break از حلقه هر وقت بخواهیم می تونیم بیایم بیرون . اینطوری نمی زاریم تا آخر حلقه اجرا بشه. مثال زیر رو ببینید:i = 0
while i &lt; 7:
    print(i)
    if i == 4:
        print(&quot;Breaking from loop&quot;)
        break
    i += 1
    
    0
    1
    2
    3
    4
    Breaking from loopقرار اعداد ۰ تا ۶ در خروجی چاپ بشه ولی وقتی مقدار i برابر ۴ شد وارد شرط میشه و عبارت breaking from loop رو چاپ می کنه خط بعدیش به دستور break می رسه که از حلقه کلا میاد بیرون و  ادامه نمی ده یعنی مقدار ۵و۶ چاپ نمیشن. چطوری حلقه رو از یه جایی ادامه بدیم ؟!این کار هم با دستور Continue انجام میشه . مثال زیر رو ببیند تا توضیح بدم یعنی چی !for i in (0, 1, 2, 3, 4, 5):
    if i == 2 or i == 4:
        continue
    print(i)
    
    
0
1
3
5وقتی که مقدار i یکی از اعداد ۲ یا ۴ باشه اون شرط برقرار میشه و دستور continue اجرا میشه اینطوری دیگه ادامه حلقه اجرا نمیشه . اگر دقت کنید ۲ و ۴ در خروجی چاپ نشدن چون وقتی این اعداد هستن اصن به دستور print نرسیده اگر یادتون باشه قبلا درمورد pass توضیح دادم . توی حلقه ها هم میشه از pass استفاده کرد. معنیش اینه که کاری نکن. مثل :while x == y:
    passچطوری do-while رو در پایتون درست کنیم وقتی که نیست !اگر باز زبان های برنامه نویسی دیگه کار کرده باشید یه چیزی مثل do-while یا do-until داریم. این دوتا به ما اجازه میده قبل از اینکه شرط حلقه چک بشه یکبار کد اجرا بشه. حالا توی پایتون اینو نداریم ولی می تونیم با شرط همیشه درست و دستور break اینکارو انجام بدیم. a = 10
while True:
    a = a-1
    print(a)
    if a&lt;7:
        break
print(&#039;Done.&#039;)این برنامه رو اجرا کنید و خروجیش رو برام کامنت کنید و توضیح بدین چطوری اینطوری شد!توی قسمت بعدی در مورد عملگر ها صحبت می کنیم که می تونید از لینک زیر دنبال کنید.  https://virgool.io/@saeedtajik/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%DB%8C%D8%A7%D8%B2%D8%AF%D9%87%D9%85-%D8%B9%D9%85%D9%84%DA%AF%D8%B1%D9%87%D8%A7-sgj41k9ssxr2 </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Sun, 04 Aug 2019 12:44:10 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت نهم-بخش اول :حلقه ها)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D9%86%D9%87%D9%85-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-%D8%AD%D9%84%D9%82%D9%87-%D9%87%D8%A7-jpuk2rsdw7d1</link>
                <description>سلام رفقا در یک سلسه آموزش برای اینکه بتونیم وارد دنیای هوش مصنوعی بشیم شروع به آموزش پایتون کردیم. اگر اولین باره این نوشته رو می خونید از لینک زیر برید جلسه اول آموزش پایتون و قدم قدم بیاین جلو. قسمت اول آموزش پایتون در این بخش از آموزش پایتون در مورد حلقه ها صحبت می کنیم. حلقه ها کارشون اینکه که کارای تکراری رو برای ما انجام می دن. مثلا فرض کنید می خواهیم اعداد یک تا ۱۰۰ رو چاپ کنیم یک کار احمقانه اینه که بیایم دونه دونه اینارو با دستور پرینت چاپ کنیم. ولی خب صد بار باید این دستور رو بنویسیم. کار عاقلانش اینکه که بیایم این کار رو با حلقه ها انجام بدیم. حلقه For :حلقه for روی مجموعه های اعمال میشه. مثالا میشه روی لیست ها یا دیکشنری اجراش کرد. اگر هنوز نمی دونید اینا چی هستن اینجا رو بخونید. مثلا مثال زیر استفاده از for روی یک لیست هست :for i in [0, 1, 2, 3, 4]:
    print(i)

0
1
2
3
4توی مثال بالا اعداد ۰ تا ۴ که توی لیست قرار داشتن در خروجی چاپ شدن. یا مثال زیر رو ببینید:for x in [&#039;one&#039;, &#039;two&#039;, &#039;three&#039;, &#039;four&#039;]:
    print(x)

one
two
three
fourحالا اگر بخواهیم همون مثال ۱ تا ۱۰۰ که اولش گفتم رو اجرا کنیم بازم احمقانست بشینیم یک لیست درست کنیم و توش از ۱ تا ۱۰۰ رو بنویسیم اینجاست که دستور range به دادمون می رسه. کارش اینکه ابتدا و انتها و گام حرکت رو بهش می دیم. مثلا همین مثال ۱ تا ۱۰۰ عدد ابتدایی ما ۱ و انتهایی ما ۱۰۰ و گام حرکتمون یدونه یدونست . مثال های زیر رو ببینید که با کاربرد دستور Range آشنا بشید. &gt;&gt;&gt; list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
&gt;&gt;&gt; list(range(1, 11))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
&gt;&gt;&gt; list(range(0, 30, 5))
[0, 5, 10, 15, 20, 25]
&gt;&gt;&gt; list(range(0, 10, 3))
[0, 3, 6, 9]
&gt;&gt;&gt; list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
&gt;&gt;&gt; list(range(0))
[]
&gt;&gt;&gt; list(range(1, 0))
[]پس از Range میشه توی For استفاده کرد مثل :for x in range(1, 6):
    print(x)

1
2
3
4
5دقت کنید که در دستور range عدد آخری در نظر گرفته نمیشه مثال بالا از ۱ تا ۵ چاپ کرده. همین حلقه رو هم می شه روی دیکشنری اجرا کرد. دیکشنری زیر رو در نظر بگیرید:d = {&quot;a&quot;: 1, &quot;b&quot;: 2, &quot;c&quot;: 3}فرض کنید می خواهیم کلید های این دیکشنری یعنی a,b,c رو توی خروجی چاپ کنیم. داریم:for key in d:
    print(key)

&quot;a&quot;
&quot;b&quot;
&quot;c&quot;یا می تونیم اینجوری بنویسیم:for key in d.keys():
    print(key)

&quot;a&quot; 
&quot;b&quot; 
&quot;c&quot;حالا اگر بخواهیم مقادیر این کلید ها رو در بیاریم یعنی همون ۱و۲و۳ می تونیم از D.values استفاده کنیم مثل :for value in d.values():
    print(value)

1
2
3حال اگر بخواهیم هم کلید و هم مقدار رو پیمایش کنیم از items استفاده می کنیم. مثل زیر :for key, value in d.items():
    print(key, &quot;::&quot;, value)

a :: 1
b :: 2
c :: 3حلقه های تو در تو :فرض کنید می خواهیم همه حالت های ضرب {۲و۱} رو در {۱و۲و۳و۴} در بیاریم . یعنی یه همچین خروجی می خواهیم:example:
1 # 1*1
2 # 1*2
3 # 1*3
4 # 1*4
2 # 2*1
4 # 2*2
6 # 2*3
8 # 2*4سمت چپ ضربمون یا ۱ هست یا ۲ و سمت راست ضربمون ۱ یا ۲ یا ۳ یا ۴ . پس اینجا نیاز هست از دوتا for استفاده کنیم. اولی روی ۱و۲ و دومی روی ۱و۲و۳و۴ :for j in range(1, 5):
    for i in range(1,3):    
        print(i*j)همون طور که مشخص هست j روی مقدارهای ۱و۲و۳و۴ حرکت می کنه و i روی مقدارهای ۱و۲ . بنابراین تمام حالت های بالا رو پوشش میده. دستور Else در حلقه !از else انتهای حلقه برای اینکه بگن تموم شد این کارو انجام بده استفاده میکنن(در عمل کمتر به کار می ره):for i in range(3):
    print(i)
else:
    print(&#039;done&#039;)
    
0
1
2
doneمثلا توی مثال بالا ۰و۱و۲ رو دستور For چاپ کرده کارش که تموم شده رفته سراغ Else اون Done هم چاپ کرده. بحث حلقه ها هنوز تموم نشده ولی برای اینکه خسته نشید در یک قسمت دیگه ادامش رو توضیح میدم. اگر سوالی داشتید کامنت کنید. قسمت بعدی : حلقه ها بخش دوم  https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%87%D9%85-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-%D8%AD%D9%84%D9%82%D9%87-%D9%87%D8%A7-amhwmi7yie18 </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Sat, 03 Aug 2019 09:40:19 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت هشتم: عبارات شرطی)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D8%B4%D8%AA%D9%85-%D8%B9%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%B4%D8%B1%D8%B7%DB%8C-lc6bovl2w6jv</link>
                <description>سلام رفقا آموزش پایتون رو برای ورود به دنیای هوش مصنوعی شروع کردیم. اگر اولین باره با پایتون آشنا می شید به لینک زیر برید و از اول بیاین جلو. آموزش پایتون جلسه اول این قسمت که بخش هشتم آموزش پایتون هست در ارتباط با شرط هست. خب این خیلی به زبون ما ها نزدیکه می گیم اگر این بود این کارو کن و اگر اون بود اون کارو کن اگرم هیچ کدوم نبود این کارو کن. همینی که الان گفتم به زبان پایتون می شه :number = 5
if number &gt; 2:
    print(&amp;quotNumber is bigger than 2.&amp;quot)
elif number &lt; 2: # Optional clause (you can have multiple elifs)
    print(&amp;quotNumber is smaller than 2.&amp;quot)
else: # Optional clause (you can only have one else)
    print(&amp;quotNumber is 2.&amp;quot)چون 5 از 2 بزرگتره جمله اول چاپ میشه. اگر از Else if که در زبون های دیگه رایجه استفاده کنید خطا می گیره. پس یادتون باشه توی پایتون Elif هست. پس اگر جلوی if عبارت درست یا همون True بود اون شرط اجرا میشه. مثلا در مثال ما number&gt;2 هست یعنی 5&gt;2 یک عبارت درست True هست که دستورات داخلش اجرا میشن. نکته جالب اینه که می شه شرط یک خطی هم نوشت اگر با زبون های برنامه نویسی دیگه کار کرده باشید از این ساختار سورپرایز می شید. مثال زیر رو ببینید:n = 5
&amp;quotHello&amp;quot if n &gt; 2 else &amp;quotBye&amp;quot
# Out: &#039;Greater than 2&#039;می گه Hello رو چاپ کن اگر n بزرگتر از 2 بود و اگر نبود Bye رو چاپ کن. این مثل خوندن در زبان انگلیسی هست. به جز کارای ساده که توی یک خط قراره انجام بشه از این نوع تعریف شرط استفاده نکنید چون خوانایی (فهموندن به دیگران) رو کاهش می ده. همه عبارت های زیر اگر جلوی شرط قرار بگیرن False هستن. این خیلی باعث خطا می شه . مثلا فرض کنید نوشتیم if 0 این یعنی این شرط اجرا نمیشه چون صفر نقش False داره. None
False
0, or any numerical value equivalent to zero, for example 0L, 0.0, 0j
Empty sequences: &#039;&#039;, &amp;quot&amp;quot, (), []
Empty mappings: {}
User-defined types where the __bool__ or __len__ methods return 0 or Falseبه جز اینایی که این بالا گفتم بقیه چیزا True حساب میشه. حالا بریم سر وقت عملگر های منطقی :عملگر AND :این مثل &quot;و&quot; خودمون هست مثلا 1و2.  اگر دو طرف AND مقدارش True باشه خروجیش هم True هست. در غیر این صورت خروجیش False هست. مثال زیر رو نگاه کنید :x = True
y = True
z = x and y # z = True

x = True
y = False
z = x and y # z = False

x = False
y = True
z = x and y # z = False

x = False
y = False
z = x and y # z = Falseمثلا بالا که واضحه چی شد جفت طرف ها درست باشه خروجی هم درسته. حالا مثال زیر رو نگاه کنید که یکم سخت تره. در این جور مثال ها اگر دو طرف شرط درست باشن طرف راست خروجی هست و اگر حتی یکیش هم نادرست باشه طرف چپ خروجیه ( اگر نفهمیدید چی شد زیاد مهم نیست به مرور که با این زبان کار کنید دستتون میاد). قسمت آخر رو دقت کنید چون طرف چپ &quot;&quot; هست و به معنی false هست پس خروجی خودش می شه. &gt;&gt;&gt; 1 and 2
2
&gt;&gt;&gt; 1 and &amp;quotHello World&amp;quot
&amp;quotHello World&amp;quot
&gt;&gt;&gt;&amp;quot&amp;quot and &amp;quotPancakes&amp;quot
&amp;quot&amp;quotعملگر Or :این مثل &quot;یا&quot; خودمون هست. خروجیش وقتی false هست که جفت طرف ها false باشه. مثال زیر رو نگاه کنید:x = True
y = True
z = x or y # z = True

x = True
y = False
z = x or y # z = True

x = False
y = True
z = x or y # z = True

x = False
y = False
z = x or y # z = Falseمثال زیر رو نگاه کنید : &gt;&gt;&gt; 1 or 2
1
&gt;&gt;&gt; None or 1
1
&gt;&gt;&gt; 0 or []
[]اگر جفتشون درست باشه خروجی اولی می شه. ولی اگر یکیش یا جفتش نادرست باشه (مثل خط 3 و5) خروجی آخری می شه. عملگر Not :اینم دیوی کلاه قرمزی هست یعنی اگر درسته نتیجش غلط میشه اگر نادرست نتیجه درست مثال :x = True
y = not x # y = False
x = False
y = not x # y = Trueمحاسبه از روی تنبلی مثال زیر رو نگاه کنید :&gt;&gt;&gt; def print_me():
    print(&#039;I am here!&#039;)
&gt;&gt;&gt; 0 and print_me()
0خط اول و دوم یک تابع تعریف کردیم که کارش اینه که I am here رو چاپ کنه ولی اصلا اجرا نمی شه چرا ؟!چون که پایتون می دونه که and وقتی خروجیش True میشه که جفتش True باشه حالا وقتی اولی 0 هست یعنی False پس دیگه نمیره سراغ دومی همون اولی رو میده بیرون. پس تنبلیش بی حکمت نیست. دقت کنید !مثال زیر رو نگاه کنید. &gt;&gt;&gt; a = 1
&gt;&gt;&gt; b = 6
&gt;&gt;&gt; if a and b &gt; 2:
...         print(&#039;yes&#039;)
...   else:
...         print(&#039;no&#039;)
yesهدفمون اینکه که بگیم اگر a و b جفتشون بزرگتر از 2 بودن yes  رو بده به خروجی خب چون a مقدارش 1 هست پس نباید yes رو توی خروجی نشون بده که این کارو می کنه چرا ؟!چون پایتون اینطوری این عبارت رو می خونه :(a) and (b&gt;2)برای اینکه درستش کنیم باید از تنبلی بپرهیزیم مثل عبارت زیر :&gt;&gt;&gt; if a &gt; 2 and b &gt; 2:
...         print(&#039;yes&#039;)
...   else:
...         print(&#039;no&#039;)
noیه مثال دیگه از این گونه اشتباه ها :&gt;&gt;&gt; a = 1
&gt;&gt;&gt; if a == 3 or 4 or 6:
...     print(&#039;yes&#039;)
... else:
...     print(&#039;no&#039;)
yesدر حالی که باید No می داد yes داد. که این جوری درست می شه :&gt;&gt;&gt; if a == 3 or a == 4 or a == 6:
...     print(&#039;yes&#039;)
... else:
...     print(&#039;no&#039;)
noیک راه راحترشم اینه که از in استفاده کنیم (سر جاش بیشتر توضیح می دم )&gt;&gt;&gt; if a in (3, 4, 6):
...     print(&#039;yes&#039;)
... else:
...     print(&#039;no&#039;)
noخسته نباشید. یک سری نکات دیگه هم این زیر به مرور اضافه می شه ولی همینایی که گفتم فعلا کفایت می کنه. اگر سوالی دارید کامنت کنید. درس بعدی در مورد حلقه ها هست: https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D9%86%D9%87%D9%85-%D8%A8%D8%AE%D8%B4-%D8%A7%D9%88%D9%84-%D8%AD%D9%84%D9%82%D9%87-%D9%87%D8%A7-jpuk2rsdw7d1 </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Wed, 31 Jul 2019 11:22:37 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت هفتم: کامنت و داکیومنت)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D9%81%D8%AA%D9%85-%DA%A9%D8%A7%D9%85%D9%86%D8%AA-%D9%88-%D8%AF%D8%A7%DA%A9%DB%8C%D9%88%D9%85%D9%86%D8%AA-brscauczr2ol</link>
                <description> سلام رفقاآموزش پایتون رو با همدیگه شروع کردیم اگر تازه می خواهید پایتون یاد بگیرید به لینک زیر برید :آموزش پایتون قسمت اول این قسمت که بخش هفتم آموزش پایتون هست به کامنت گذاری و داکیومنت نویسی در پایتون اشاره می کنیم. بخشی که بسیار مهمه ولی اکثر برنامه نویسا وطنی خودمون رعایتش نمی کنن. شما مثل بقیه نباشید و سعی کنید حرفه ای برنامه نویسی کنید. فرض کنید قراره یه کد بهتون بدن و بفمید چیه . خب اگر اون نفری که کد نوشته براتون توضیح هم بنویسه مسلما سریع تر می فهمید چه کار کرده. این قضیه در مورد کدهای خودتون هم صادقه یعنی فرض کنید اگر خودتون کد نوشتید بعدا بخواهید بفهمید چی نوشتید کافیه توضیحات خودتون رو بخونید. سه حالت برای کامنت گذاشتن داریم : کامنت گذاری تک خطی single-line comment:# This is a single line comment in Pythonخیلی ساده با علامت هشتگ می شه کامنت تک خطی گذاشت و زیرش برنامتون رو بنویسید. کامنت گذاری درخط inline comment :print(&quot;Hello World&quot;) # This line prints &quot;Hello World&quot;اینم مثل قبلیه فقط جلوی عبارت پایتون قرار می گیره برای اینکه بگید این چیه. کامنت گذاری چند خطی multiline comment :به این صورت :&quot; &quot; &quot; 
This type of comment spans multiple lines.
These are mostly used for documentation of functions, classes and modules.
&quot; &quot; &quot;این کامنت گذاری چند خطی بیشتر برای توضیح کلاس ها توابع و ماژول ها به کار می ره. اگه یادتون رفته تابع و ماژول چیه اینجا رو بخونید. همون طور که دیدید این نوع کامنت گذاری با سه تا &quot; یا با سه تا &#x27; انجام می شه. فرض کنید یک تابع درون یک ماژول نوشتید مثل : def func():
    &quot;&quot;&quot;This is a function that does nothing at all&quot;&quot;&quot;
        returnهمون طور که می بینید خط اول این تابع کامنت گذاری شده به سبک چند خطی. مزیتی که داره اینه که توی برنامتون وقتی از __doc__  استفاده کنید همین توضیح براتون میاد. print(func.__doc__)
This is a function that does nothing at allیا اینکه وقتی از دستور help استفاده می کنید help(func)
Help on function func in module __main__:
func()
    This is a function that does nothing at allاین جوری هست که شما می تونید برای تابع هاتون help بنویسید. دقت کنید که این کار فقط با کامنت گذاری چند خطی انجام میشه و با # کار نمی کنه. مثال زیر رو ببینید:def greet(name, greeting=&quot;Hello&quot;):
    # Print a greeting to the user `name`
    # Optional parameter `greeting` can change what they&#039;re greeted with.
    print(&quot;{} {}&quot;.format(greeting, name))
    
    
print(greet.__doc__)
None

help(greet)
    Help on function greet in module main:
    greet(name, greeting=&#039;Hello&#039;)همونطور که تو مثال میشه دید برای این حالت که از # استفاده شده هیچی نمیاد! استاندارد PEP 257این استانداردی هست که برای نوشتن داکیومنت استفاده می شه یک نگاه کلی بهش می ندازیم فعلا. داکیومنت تک خطی : این نوع داکیومنت برای تابع های ساده و کوتاه استفاده میشه و کل توضیح در یک خط قرار می گیره مثل : def hello():
    &quot;&quot;&quot;Say hello to your friends.&quot;&quot;&quot;
    print(&quot;Hello my friends!&quot;)توضیحات هم در انتها با یک نقطه پایان می یابد. داکیومنت چند خطی : def hello(name, language=&quot;en&quot;):
    &quot;&quot;&quot;Say hello to a person.
    
    Arguments:
    name: the name of the person
    language: the language in which the person should be greeted
    &quot;&quot;&quot;
    print(greeting[language]+&quot; &quot;+name)خط اول یک توضیح در مورد خود تابع می ده و خط های بعدی پارامترهای اون تابع رو مشخص می کنه. توی این لینک می تونید این استاندارد رو بخونید. یک سری روش های دیگه داکیومنت گذاری هم هست که به مرور اینجا اضافه می شه. اگه سوالی داشتید کامنت کنید. در قسمت بعدی راجب عبارات شرطی صحبت می کنیم که می تونید از لینک زیر بخونید.  http://vrgl.ir/mmz7T </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Tue, 30 Jul 2019 13:00:15 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت ششم: ماژول خودتو بساز)</title>
                <link>https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D8%B4%D8%B4%D9%85-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%AE%D9%88%D8%AF%D8%AA%D9%88-%D8%A8%D8%B3%D8%A7%D8%B2-v6eqczfo2bbq</link>
                <description>سلام رفقا آموزش پایتون رو به عنوام مقدمه ای برای ورود به دنیای هوش مصنوعی شروع کردیم.پایتون زبان راحت و قدرمندی هست و بسیاری از قوی ترین کتابخانه های هوش مصنوعی به زبان پایتون نوشته شده. اگر اولین باره این نوشته رو می خونید و می خواهید پایتون یاد بگیرید به لینک زیر برید و از اول بیاین جلو.  https://virgool.io/hooshteam/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-1-1-%D9%86%D8%B5%D8%A8-jyxhoryvhajqآ آموزش پایتون قسمت اول توی این قسمت  از آموزش پایتون که قسمت ششم هست در مورد ماژول صحبت می کنیم. اول اینکه تابع چیه ، ماژول چیه و در نهایت هم اینکه ماژول خودتون بساز. توابع درونی و ماژول های پایتون اول با مفهوم تابع آشنا بشیم . تابع کارش اینه که یه کار مشخصیرو برای ما انجام می ده مثلا می خواهیم دوتا عدد رو باهم جمع کنیم یک تابع می نویسیم عددهامونو بهش می دیم باهم جمع می کنه و بهمون تحویل می ده. حالا چون براساس متغیر ها تابع خودمون رو نوشتیم هر عدد جدیدی هم بهش بدیم باز هم می تونه جمع کنه و بهمون تحویل بده. دوم با مفهوم ماژول آشنا می شیم. مثلا یخچال رو در نظر بگیرین کارایی مثل سرد کردن مواد غذایی ، دادن آب خنک و درست کردن یخ رو انجام می ده. این کارایی که گفتم مثل همون تابع ها هست و خود یخچال که مجموعه از این کارهارو برامون انجام می ده ماژول میشه. مثلا ماژول Math توی پایتون کارش اینه که یک سری توابع ریاضی داره مثل sqrt که جذر می گیره یا sin که سینوس حساب می کنه. حالا که ماژول و تابع رو یادگرفتین چیه بریم سر وقت توابع و ماژول های درونی پایتون. این درونی یعنی اینکه برنامه نویسای خود پایتون زحمت کشیدن اینارو برامون نوشتن. برای اینکه ببینید چیارو برامون نوشتن دستور زیر را توی پایتون بزنید:&gt;&gt;&gt; dir(__builtins__)قبل از builtins دو تا زیر خط پشت سر هم هست که ویرگول به هم می چسبونش. پس یاد گرفتیم که با دستور dir میشه کارایی که اون ماژول برامون انجام میده رو ببینیم.  مثلا یکی از این دستورها pow هست که توان ریاضی رو انجام می ده مثال :&gt;&gt;&gt; pow(2,3) #8که همون 2 به توان 3 هست که می شه 8. استفاده از توابع درونی پایتون راحته فقط باید بدونید برای چیه و چطوری ازش استفاده کنید. هر جا هم گیر کردید کافیه اون تابع رو بزارید داخل help مثل :1. &gt;&gt;&gt; help(max)
2. Help on built-in function max in module __builtin__:
3. max(...)
4. max(iterable[, key=func]) -&gt; value
5. max(a, b, c, ...[, key=func]) -&gt; value
6. With a single iterable argument, return its largest item.
7. With two or more arguments, return the largest argument.توی این مثل تابع max رو می خوام ببینیم چه کار می کنه . خط دوم بهمون می گه که این تابع درونی پایتون هست و داخل ماژول __builtin__ هست. خط های 3و4و5 بهمون می گه چطوری از تابع max استفاده کنیم و خط 6و7 هم بهمون می گه خروجی این تابع چیه مثلا اگر چند تا عدد وارد تابع کردیم این بزرگترینشو بهمون می ده. حالا یکسری ماژول ها هستن که همین جوری نمی تونیم ازشون استفاده کنیم و باید صداشون بزنیم. مثلا می خواهیم شیرینی درست کنیم میریم همزن رو صدا می زنیم بیاد کمک! این صدا زدن ماژول ها با دستور import انجام می شه . مثل :&gt;&gt;&gt; import math
&gt;&gt;&gt; math.sqrt(16) # 4.0ما برای اینکه جذر عدد 16 رو بگیریم نیازه اول ماژول ریاضی رو صدا بزنیم بعدش از ماژول ریاضی تابع Sqrt رو استفاده کنیم. حواستون باشه که بجز توابع داخلی پایتون باید ماژول هایی که می خواهیم رو صدا بزنیم حتی وقتی که می خواهیم از help استفاده کنیم. مثال زیر اروری هست که بدون اینکه ماژول math رو صدا بزنم از تابع درونش استفاده کردم. &gt;&gt;&gt; help(sin)
Traceback (most recent call last):
  File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
  NameError: name &#039;sin&#039; is not definedکه درستش به صورت زیر هست. &gt;&gt;&gt; import math
&gt;&gt;&gt; help(math.sin)
Help on built-in function sin in module math:
sin(...)
    sin(x)
        Return the sine of x (measured in radians).ماژول خودتو بساز بعد از اینکه یاد گرفتین ماژول و تابع چیه حالا وقتشه ماژول خودتون رو بسازید. کافیه یک فایل متنی درست کنید اسمش رو همون اسم ماژولتون بزارید. مثال من اسمشو می زارم speak.py که اون .py نشون دهنده اینکه این فایل برای پایتونه . حالا کافیه توی فایل بنویسیم:def say_hello():
    print(&quot;Hello!&quot;)تابع say_hello کارش اینکه که بگه سلام. این تابع توی ماژول speak خودمون هست. حالا برای اینکه ازش استفاده کنیم قرار شد کنار همون فایلی که درست کردیم شیفت و کلیک راست رو بگیریم و وارد محیط powershell بشیم. همین که بنویسیم python وارد محیط ویرایش پایتون میشیم ماژول خودمون رو صدا می زنیم و تابع Say_hello رو به کار می گیریم. python
&gt;&gt;&gt; import speak 
&gt;&gt;&gt; speak.say_hello()به همین راحتی شما هم تونستید ماژول بسازید. چند تا نکته هم به عنوان بخش پایانی بگم اول اینکه توی ماژول خودتون هم می تونیم یک ماژول دیگه رو صدا بزنید مثلا همون Math. دوم اینکه اگر ماژول چندین تابع داشته باشه و شما بخواهید فقط یک تابع خاص رو باهاش کار کنید به صورت زیر می تونید ازش ا ستفاده کنید. from speak import say_hello
say_hello()یعنی اینکه از ماژول speak فقط تابع say_hello رو بیار دقت کنید وقتی اینکارو می کنید دیگه برای استفاده تابع نیاز نیست speak.say_hello قبلش ماژول رو هم بیارید همون Say_hello خالی کافیه. و نکته آخر اینه که اگر دوست دارید اسم ماژول رو عوض کنید و از اسم جدید توی برنامتون استفاده کنید می تونید این کارو انجام بدین :import hello as ai
ai.say_hello()یعنی ماژول hello تبدیل به ماژول ai شده (اسمش عوض شده)این بخش هم به پایان رسید. سعی می کنیم با مفاهیم پایتون آشنا بشید و به مرور عمیق تر به مباحث بپردازیم. اگر سوالی داشتید کامنت کنید. قسمت بعدی در مورد کامنت و داکیومنت گذاری هست که از لینک زیر می تونید بخونید.  https://virgool.io/hooshteam/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D9%81%D8%AA%D9%85-%DA%A9%D8%A7%D9%85%D9%86%D8%AA-%D9%88-%D8%AF%D8%A7%DA%A9%DB%8C%D9%88%D9%85%D9%86%D8%AA-brscauczr2ol </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Mon, 29 Jul 2019 11:35:50 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت پنجم: نوع داده-بخش دوم-تبدیل داده ها به یکدیگر)</title>
                <link>https://virgool.io/hooshteam/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-1-4-%D9%86%D9%88%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D8%A8%D8%AE%D8%B4-%D8%AF%D9%88%D9%85-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7-%D8%A8%D9%87-%DB%8C%DA%A9%D8%AF%DB%8C%DA%AF%D8%B1-ngnlv0xea1ll</link>
                <description>سلام رفقادر یک سری نوشته شروع کردیم به آموزش پایتون برای ورود به دنیای هوش مصنوعی. اگر تازه دارید پایتون رو یاد می گیرید از لینک زیر به قسمت اول برید و گام به گام جلو بیاین ! https://virgool.io/hooshteam/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-1-1-%D9%86%D8%B5%D8%A8-jyxhoryvhajq  ایننوشتهقسمتپنجمازآموزشپایتونهستکهدرقسمتقبلیراجبانواعدادهصحبتکردیمکهمیتونیدازاینجابخونید. این نوشته قسمت پنجم از آموزش پایتون هست. در این بخش در مورد اینکه چطوری متغیر ها یا همون ظرف هارو بهم تبدیل کنیم صحبت می کنیم. چطوری بفهمیم متغیرمون از چه نوعی هست ؟! اول راجب این صحبت می کنیم که اگر بخواهیم نوع ظرفمون رو تشخیص بدیم از چی استفاده کنیم؟ در پایتون از تابع type استفاده می کنیم. مثال زیر رو بخونید:a = &#039;123&#039;
print(type(a))
# Out: &lt;class &#039;str&#039;&gt;b = 123
print(type(b))
# Out: &lt;class &#039;int&#039;&gt;همونطور که می بینید اولی نوعش از نوع رشته یا همون str هست و دومی از نوع int یا همون عدد صحیح هست. یک کار دیگه ای که می شه برای سنجش نوع متغیر استفاده کرد اینه که از isinstance استفاده کنیم. مثال :i = 7
if isinstance(i, int):
    i += 1
elif isinstance(i, str):
    i = int(i)
    i += 1می گه آیا متغیر i از نوع int هست یا خیر ؟! و دومی می گه آیا متغیر i از نوع رشته هست یا خیر ؟!کسانی که حرفه ای تر هستن یا بعدا که حرفه ای شدین این مقاله رو خوندید می خوان ببینن این دو تا چه فرقی با هم دارن اینجا رو بخونن. در همه زبان های برنامه نویسی یک نوع متغیر داریم که معلوم نیست چیه! یعنی ظرفش رو نمی دونیم چیه می تونه هر چیزی باشه که در پایتون این نوع رو با None نشون می دن. برای اینکه این نوع متغیر رو چک کنیم از مثال زیر استفاده می کنیم:x = None
if x is None:
    print(&#039;hooshteam&#039;)زیبایی زبان پایتون همین نزدیکیش به زبان انگلیسی هست. مثال می گه اگر متغیر x از نوع None بود مقدار hooshteam رو چاپ کن. تبدیل انواع متغیر ها به یکدیگرتوی برنامه نویسی به این تبدیل type casting می گن. یعنی نوع هارو به هم تبدیل کنید. مثال :a = &#039;123&#039;
b = int(a)همون طور که توی مثال می بینید نوع رشته تبدیل میشه به نوع عدد صحیح. نکته ای که هست اینه که باید این تبدیل امکان پذیر باشه مثال زیر را نگاه کنید:a = &#039;123.456&#039;
b = float(a)
c = int(a) # ValueError: invalid literal for int() with base 10: &#039;123.456&#039;
d = int(b) # 123خط سوم می خواد رشته &#x27;123.456&#x27; رو تبدیل به عدد صحیح کنه که این کار رو نمی تونه کنه چون اساسا عدد 123.456 صحیح نیست. ولی اگر اول تبدیلش کنیم به عدد کسری بعد تبدیل کنیم به عدد صحیح این شدنیه!یک تبدیل باحال دیگه در پایتون اینکه :a = &#039;hello&#039;
list(a) # [&#039;h&#039;, &#039;e&#039;, &#039;l&#039;, &#039;l&#039;, &#039;o&#039;]
set(a) # {&#039;o&#039;, &#039;e&#039;, &#039;l&#039;, &#039;h&#039;}
tuple(a) # (&#039;h&#039;, &#039;e&#039;, &#039;l&#039;, &#039;l&#039;, &#039;o&#039;)رشته تبدیل به لیست ، مجموعه و تاپل شده اگر نمی دونید اینا چیه یک سری به درس قبلی در اینجا بزنید. اگر سوالی داشتید کامنت کنید. در قسمت بعدی راجب ماژول و توابع صحبت می کنیم که می تونید از لینک زیر بخونید.  http://vrgl.ir/tu7Ud </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Sun, 28 Jul 2019 10:11:00 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت چهارم: نوع داده-بخش اول)</title>
                <link>https://virgool.io/hooshteam/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85-fasol7bt002x</link>
                <description>سلام رفقا در یک سری نوشته شروع کردیم به آموزش پایتون برای ورود به دنیای هوش مصنوعی. اگر تازه دارید پایتون رو یاد می گیرید از لینک زیر به قسمت اول برید و گام به گام جلو بیاین ! http://vrgl.ir/aadgZ توی این نوشته که قسمت چهارم آموزش پایتون محسوب می شه می خوام در مورد انواع داده ها در پایتون صحبت کنم. همون طور که در قسمت دوم در مورد متغیر توضیح دادیم متغیر رو مثل یک ظرف تشبیه کردم و گفتم که نوع این ظرف ها با هم فرق داره و مثلا آب رو نمی شه توی آبکش نگه داشت. حالا توی این قسمت راجب ظرف های مختلف صحبت می کنم البته این بحث در حد آشنایی هست در ادامه آموزش ها عمیق تر بهش می پردازیم. نوع داده Boolean که توی پایتون bool نشون می دناین نوع داده همون درست و غلط خودمون هست مثل True و False. مثلا متغیر A=True یعنی ظرف A از نوع boolean هست. نکته ای که هست اینه که این نوع داده زیر مجموعه اعداد صحیح هست یعنی :issubclass(bool, int) # Trueهمچنین می تونیم با تابع isinstance ببینیم که تعلق به اون کلاس داره یا نه. همین که گفتم زیر مجموعه اعداد صحیح هست رو میشه اینطوری هم چک کرد:isinstance(True, bool) # True
isinstance(False, bool) # Trueبنابراین چون زیر مجموعه اعداد صحیح هست پس وقتی در معادلات ریاضی از True یا False  استفاده می کنیم جای اون 1 و 0 میشینه مثل :True + False == 1 # 1 + 0 == 1
True * True == 1 # 1 * 1 == 1نوع داده عددی در پایتون عدد صحیح int : این نوع داده همون اعداد صحیح که توی ریاضی می خوندیم هستن مثل 2 یا 100 یا 23423453453 . که با int نشونش می دن. در سری های قدیمی پایتون از long هم استفاده می شد ولی الان چون استفاده نمی شه فراموشش کنیدعدد کسری float : عدد کسری هست که دقتش بستگی به سیستم و معماری سیستم داره. مثل :a = 2.0
b = 100.e0
c = 123456789.e1اعداد مختلط : اینا هم همون عددای مختلط ریاضی هستن مثل : a = 2 + 1j
b = 100 + 10jنکته ای که هست اینه که عملگر های &lt; , =&lt; , =&gt; , &gt; بین دوتا عدد مختلط خطا می ده. نوع داده رشته در پایتونرشته یا همون string مجموعه ای از کارکتر ها رو در خودش نگه می داره. در پایتون 3 دو نوع رشته داریم که یکی نوعش Str هست و یکی دیگه نوعش byte هست. کسایی که مبتدی هستن و این متن رو می خونن همون Str رو به عنوان رشته در نظر داشته باشن. اونایی که حرفه ای تر هست و می خوان بدونن اینا چه فرقی با هم داره این لینک رو بخونن. str: a unicode string. The type of &#039;hello&#039;
bytes: a byte string. The type of b&#039;hello&#039;در پایتون 2.7 به پایین نوع رشته به صورت زیر هست (صرفا جهت اطلاع!)str: a byte string. The type of &#039;hello&#039;
bytes: synonym for str
unicode: a unicode string. The type of u&#039;hello&#039;نوع داده دنباله و مجموعه در پایتون در پایتون یک دنباله داریم که فارسی همون sequence هست و به صورت ترتیبی هست یعنی اهمیت داره اول کی بیاد دوم کی بیاد. مجموعه هم فارسی عبارت collection هست. اینجا صرفا باهاشون آشنا می شیم و قیافشونو می بینیم بعدا بیشتر در موردش صحبت می کنیم. رشته : رشته ای که در بخش قبل راجبش صحبت کردیم خودش دنباله و ترتیبی از کاراکتر ها هست. تاپل Tuple : این نوع داده هم یک مجموعه ترتیبی هست یعنی مهم هست کی اول باشه کی دوم کی سوم. همچنین هر چیزی رو می تونه توی خودش نگه داره. یعنی مثلا یک تاپل دیگرو هم می تونید توش نگه دارید مثال : a = (1, 2, 3)
b = (&#039;a&#039;, 1, &#039;python&#039;, (1, 2))
b[2] = &#039;something else&#039; # returns a TypeErrorتاپل ها با پرانتز معرفی می شن. مثل همین a و b در این مثال. حالا چرا خط آخر این مثال Error  می ده؟! چون که تاپل ها غیر قابل تغییر هستن یعنی وقتی یه چیزی ریختین توش دیگه نمی تونید عوضش کنید. به این ویژگی در دنیای برنامه نویسی immutable می گن. حالا راجب این موضوع در جلسات بعدی مفصل تر صحبت می کنم و لینکشو اینجا می زارم. پس تاپل ها هم immutable هستن و هم اینکه اگر همه ی اعضا hashable باشن hashable  میشن. حالا این hashable چیه در جلسات بعدی توضیح می دم لینکشو اینجا می زارم (فعلا مهم نیست بدونید چیه!)لیست list :این نوع داده یک مجموعه ترتیبی از n داده هست. عین همون تاپل ها هست فقط فرقش اینکه اعضاشو می شه عوض کرد. مثال : a = [1, 2, 3]
b = [&#039;a&#039;, 1, &#039;python&#039;, (1, 2), [1, 2]]
b[2] = &#039;something else&#039; # allowedهمون طور که خط آخر می بینید مقدار &#x27;python&#x27;  در لیست b عوض شده و مقدار &#x27;something else&#x27; نشسته جاش. پس چون میشه عوض کرد mutable هست. لیست ها با کروشه ایجاد می شن. لیست ها اساسا hashable نیستن. مجموعه Set :این همون مجموعه توی ریاضیات هست. مجمموعه ای از عناصر غیر ترتیبی (یعنی مهم نیست کی اوله کی دوم ) از عناصر منحصر به فرد (یعنی تکراری نداره) است. مثل : a = {1, 2, &#039;a&#039;}با آکولاد هم درست می شه. مجموعه mutable هست و همچنین آیتم ها باید hashable باشن. دیکشنری dict :دیکشنری ها هم یک نوع دیگه ای از داده ها هستن. که به صورت زوج کلید و مقدار هستن. کلید-مقدار همونطور که از اسمش مشخصه یک مقداریو وصل می کنه به یک کلیدی. که با اون کلید می تونید اون مقدارو بخونید. بنابراین دیکشنری ها مجموعه غیر ترتیبی (یعنی مهم نیست کی اول بیاد کی دوم) از عناصر منحصر به فرد (یعنی تکراری نداره ) از مقادیر کلید-مقدار هستن. مثل : a = {1: &#039;one&#039;,2: &#039;two&#039;}
b = {&#039;a&#039;: [1, 2, 3],&#039;b&#039;: &#039;a string&#039;}دیکشنری ها هم mutable هستن و هم اینکه با آکولاد تشکیل میشن. ولی فرقی که با مجموعه دارن اگر دقت کنید دونقطه : بین مقادیر داریم که سمت چپ این دو نقطه کلید و سمت راست مقدار هست و دیکشنری ها مجموعه ای از این کلید مقدار ها هستن  که با کاما , از هم جدا شدنهمچنین کلید ها باید hashable باشن. فقط کلید ها !خسته نباشید تا اینجای کار. انتظاری که هست اینه که پایتون رو تا حالا نصب کرده باشید و بتونید کد بزنید. همچنین با انواع مختلفی از ظرف هایی که پایتون در اختیارتون قرار می ده آشنا شده باشید. در بخش بعدی راجب تبدیل داده ها به همدیگه صحبت می کنیم که در لینک زیر می تونید بخونید.  http://vrgl.ir/ryXv8 </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Sat, 27 Jul 2019 09:55:33 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت سوم: Block Indentation)</title>
                <link>https://virgool.io/hooshteam/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D8%B3%D9%88%D9%85-block-indentation-iwet9b5enhxl</link>
                <description>سلام رفقا در یک سری نوشته شروع کردیم به آموزش پایتون برای ورود به دنیای هوش مصنوعی. اگر تازه دارید پایتون رو یاد می گیرید از لینک زیر به قسمت اول برید و گام به گام جلو بیاین ! http://vrgl.ir/aadgZ  . در این قسمت که بخش سوم آموزش پایتون هست راجب Block indentation صحبت می کنیم. زبون های برنامه نویسی مثل یک مترجم عمل می کنن این که زبونی که شما می فهمید رو به زبونی که کامپیوتر می فهمه ترجمه می کنن. همونطور که برای ترجمه ما یک ساختاری داریم زبون های برنامه نویسی هم ساختار دارن. مثل در برخی زبان های برنامه نویسی وقتی علامت ; گذاشته می شه یعنی اینکه این خط تموم شده. یا مثلا اگه علامت {} بزارید یعنی اینکه اینا توی یک بلوک هستند و مربوط به یک دستورن. حالا توی پایتون از تو رفتگی و : استفاده می شه که این بلوک بندی رو انجام بده. مثال زیر رو ببینید: def my_function():                           # This is a function definition. Note the colon (:)    
    a = 2                                             # This line belongs to the function because it&#039;s indented
    return a                                         # This line also belongs to the same function
print(my_function())                         # This line is OUTSIDE the function blockخط اول این مثال تعریف تابع در پایتون هست که بعدا توضیح می دیم. انتهای این خط از : استفاده شده یعنی اینکه خط های بعدی هم برای تابع هستن . حالا برای این که بگیم خط های بعدی هم برای تابع هستن از تو رفتگی استفاده می کنیم اگر دقت کنید a=2 و return a با space جلو رفتن. و اما در مورد خط آخر ، همون طور که می بینید تو رفتگی نداره بخاطر همین برای تابع نیست و جدا از تابع هست. یا یک مثال دیگه ببینید :if a &gt; b: # If block starts here 
    print(a) # This is part of the if block
else: # else must be at the same level as if
    print(b) # This line is part of the else blockدر این مثال print(a) برای خط اول هست و print(b) برای خط سوم به علامت : هم توجه کنید. حالا این مثال بالا رو میشه به صورت زیر هم نوشت if a &gt; b: print(a)
else: print(b)یعنی توی یک خط ولی اینطوری ننویسین چون خوانایی برنامتون کم می شه. خوانایی برنامه یعنی اینکه یکی دیگه اومد برنامتون رو خوند بفهمه چی نوشتین. حالا اگر یک بلوکی درست کردیم که خالی بود چی کار کنیم؟! مثلا یک تابع نوشتیم که بعدا خواستیم پرش کنیم اینجا توی پایتون از کلمه pass استفاده می کنیم. مثال زیر :def will_be_implemented_later():
    passاز Tab استفاده کنیم یا Space با اینکه tab آسون تر هست ولی یاد بگیرید طبق استاندارد از 4 تا space استفاده کنید. این استاندارد از کجا اومده ؟ از اینجا که اسمش PEP 8 هست توجه کنید که در پایتون 3 نمیشه هم از Tab و هم از Space به طور ترکیبی استفاده کنید لطفا دم دمی مزاج نباشید همون اول از space استفاده کنید اگر سوالی داشتید در کامنت ها بپرسید. قسمت بعدی در مورد نوع داده هست که می تونید از لینک زیر بخونید : http://vrgl.ir/VcTeG </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Tue, 23 Jul 2019 10:28:16 +0430</pubDate>
            </item>
                    <item>
                <title>پایتون کلید ورود به دنیای هوش مصنوعی! (قسمت دوم: تعریف متغیر)</title>
                <link>https://virgool.io/hooshteam/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%84%DB%8C%D8%AF-%D9%88%D8%B1%D9%88%D8%AF-%D8%A8%D9%87-%D9%87%D9%88%D8%B4-%D9%85%D8%B5%D9%86%D9%88%D8%B9%DB%8C-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-l6flccinekwl</link>
                <description>سلام رفقا در یک سری نوشته شروع کردیم باهم پایتون یاد بگیریم آموزش پایتون گام اول برای ورد دنیای هوش مصنوعی هست. قسمت قبلی که در مورد نصب پایتون بود مرحله اول از آموزش پایتون هست که اون رو می تونید از لینک زیر بخونید.  http://vrgl.ir/aadgZتوی این نوشته که قسمت دوم آموزش پایتون محسوب می شه می خوام در مورد متغیر در پایتون صحبت کنم. متغیر رو مثل یک ظرف در نظر بگیرید که می شه با مقدارهای مختلف پرش کرد مثلا یک بار 2 رو داخل این ظرف قرار بدیم یکبار 3. حالا این ظرف بخواهید پر کنید از = استفاده می کنید مثل a = 2 یعنی ظرف (متغیر) a مقدار 2 داره. بعضی از زبان های برنامه نویسی نیاز دارن نوع ظرف رو مشخص کنید مثلا نمی تونید داخل آبکش آب بریزید. این که نوع ظرف رو بخواهید مشخص کنید بهش می گن مشخص کردن نوع متغیر. مثلا ما بگیم متغیر a نوعش از نوع boolean هست یعنی این متغیر ما فقط می تونه true یا false بگیره. یعنی ظرفی که داریم فقط همین دو مقدار رو می گیره. اما زبان پایتون سخت گیر نیست. نیازی نیست نوع ظرف رو مشخص کنیم خودش تشخیص می ده نوع ظرف رو. یعنی همین که بنویسید a=True خودش می فهمه ظرف a از نوع boolean است و مقدار True یا False می گیره. چند تا از مقدار دهی متغیر را باهم ببینیم. # Integer
a = 2
print(a)
# Output: 2
# Integer
b = 9223372036854775807
print(b)
# Output: 9223372036854775807
# Floating point
pi = 3.14
print(pi)
# Output: 3.14
# String
c = &#039;A&#039;
print(c)
# Output: A
# String
name = &#039;John Doe&#039;
print(name)
# Output: John Doe

# Boolean
q = True
print(q)
# Output: Trueنکته ای که هست اینه که در تعریف متغیر در پایتون حتما باید مقدار دهی اولیه انجام دهید یعنی همین که بنویسد a ظرفی براتون تعریف نشده بنابراین نیازه که حتما a=value یک مقداری بهش نسبت داده بشه. چند تا نکته برای تعریف ظرفمون(متغیر) نیاز داریم رعایت کنیم نکته اول : یک سری متغیر مخصوص خود زبان پایتون هست یعنی نمی تونیم از این اسم ها برای نام متغیرمون استفاده کنیم. مثالش همین True هست یعنی نمی تونیم داشته باشیم True=1. اگر بخواهید لیست کامل این کلمات رو ببیند دستور زیر را بزنید. import keyword
print(keyword.kwlist)نکته دوم : اسم متغیر فقط باید از حروف بزرگ و کوچک و نهایتا _ (زیرخط یا Underscore) درست شده باشه. مثل : x = True # valid
_y = True # validاسم های زیر غلطه !9x = False # starts with numeral
=&gt; SyntaxError: invalid syntax
$y = False # starts with symbol
=&gt; SyntaxError: invalid syntaxنکته سوم : زبان پایتون به حروف بزرگ و کوچک حساسه ! یعنی x با X فرق داره. مثلا در مثال زیر که x بزرگ شده است تشخیص داده نشده. x = 9
y = X*5
=&gt;NameError: name &#039;X&#039; is not definedتا همین جا برای این بخش کفایت می کنه. چند تا موضوع دیگه هم هست که بعدا همین زیر اضافه می کنم اگر پایتون رو شروع کردید و سوالی داشتید کامنت کنید. قسمت بعدی در مورد Block indentation هست که می تونید از لینک زیر بخونید.  http://vrgl.ir/b9v1P </description>
                <category>saeedtajik</category>
                <author>saeedtajik</author>
                <pubDate>Mon, 22 Jul 2019 09:45:05 +0430</pubDate>
            </item>
            </channel>
</rss>