<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>پست‌های انتشارات پایتونی شو !</title>
        <link>https://virgool.io/pythonisho/feed</link>
        <description>آموزش پایتون و لایبری های اون به همراه  انتشار اخبار های مربوط بهش ! :)</description>
        <language>fa</language>
        <pubDate>2026-04-15 00:55:34</pubDate>
        <image>
            <url>https://files.virgool.io/upload/publication/mwfipbetfav8/k6syz7.png</url>
            <title>پایتونی شو !</title>
            <link>https://virgool.io/pythonisho</link>
        </image>

                    <item>
                <title>دیوونه بازی با پایتون : کتابخانه ریجکس!!</title>
                <link>https://virgool.io/pythonisho/%D8%AF%DB%8C%D9%88%D9%88%D9%86%D9%87-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-api-%D8%A8%D8%AF%D9%88%D9%86-api-fjdsks3kpqf5</link>
                <description>تا حالا براتون پیش اومده که بخواین یک رشته رو پردازش کنید؟آموزش رو با یک سوال شروع کردم. یک سوال سرنوشت ساز! چون هر برنامه نویسی باید کتابخانه Regex رو بلد باشه.شاید خوشحال بشید؛ شاید هم ناراحت! برای اینکه میخوام این آموزش رو پروژه محور جلو ببرم. یعنی میخوایم   یک هدف برای خودمون مشخص کنیم؛ همینطور که به هدف نزدیک تر میشویم، به یادگیری بهتر هم دست می‌یابیم.(رسمی صحبت کردن، حس خوبی میده!)پروژه که میخواین درستش کنیم چیه؟بعضی از سایت ها هستن که اطلاعاتی رو به برنامه نویس ها میدن. یعنی با دادن یک api، برنامه نویس میتونه اطلاعات سایت رو بگیره. ولی بعضی از سایت ها هستن که api به برنامه نویس ها نمیدن. مثلا سایت بورس تهران یا سایت time.وبسایت time.irوبسایت timeیکم با api آشناشین https://vrgl.ir/AQwSP امروز میخوایم با کمک کتابخانه ریجکس و requests، وارد سایت time.ir بشیم و از توی کد سایت time.ir، تاریخ شمسی رو استخراج کنیم!مرحله اول - دریافت کد سایتدر اولین مرحله، کتابخانه های لازم رو صدا میکنیم.import requests
import reتعجب نکنید!! کتابخانه re، خلاصه شده همون ریجکسه.در مرحله بعدی باید کد سایت رو با استفاده از کتابخانه requests، دریافت کنیم.r = requests.get(&#039;https://www.time.ir&#039;)اگر r رو پرینت کنیم، باید با خروجی زیر روبرو شویم : &lt;Response [200]&gt;اگر با خروجی بالا روبرو شدین، یعنی همه چی درسته و میتونین وارد سایت بشین. اگر نشدین، پس یعنی صددرصد با یکی از حالت های زیر روبرو شدین(البته باید یادتون باشه که به اینترنت وصل باشید:D) https://fa.wikipedia.org/wiki/%D9%81%D9%87%D8%B1%D8%B3%D8%AA_%DA%A9%D8%AF%D9%87%D8%A7%DB%8C_%D9%88%D8%B6%D8%B9%DB%8C%D8%AA_HTTP حالا اگر کد سایت رو بخوایم چاپ کنیم، باید از دستور زیر استفاده کنیم: r = r.textخروجی کد بالا اینه: &lt;!DOCTYPE html&gt;
&lt;html lang=&#039;fa&#039; xml:lang=&#039;fa&#039; itemscope itemtype=&amp;quothttp://schema.org/WebPage&amp;quot&gt;
&lt;head&gt;&lt;meta charset=&amp;quotutf-8&amp;quot /&gt;&lt;meta http-equiv=&amp;quotX-UA-Compatible&amp;quot content=&amp;quotIE=edge&amp;quot /&gt;&lt;meta name=&amp;quotviewport&amp;quot......دیگه بقیش رو نمینویسم(1600 خطه!)؛ چون اصلا لازم نیست. همینطور که توی این کد میچرخیم، با این کد روبرو میشیم:         &lt;div class=&amp;quottext-center&amp;quot&gt;
            &lt;div class=&amp;quotdateTypeTitle&amp;quot&gt;
                &lt;span
id=&amp;quotctl00_cphTop_Sampa_Web_View_TimeUI_ShowDate00cphTop_3734_lblShamsiTitle&amp;quot
class=&amp;quotshow title&amp;quot&gt;شمسی&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&amp;quotdateTypeBody&amp;quot&gt;
                &lt;span id=&amp;quotctl00_cphTop_Sampa_Web_View_TimeUI_ShowDate00cphTop_3734_lblShamsiNumeral&amp;quot class=&amp;quotshow numeral&amp;quot&gt;۱۳۹۹/۰۱/۲۶&lt;/span&gt;توی کد بالا کلمه &quot;شمسی&quot; و تاریخ امروز وجود داره.(یکم بگردین:)) اگر پیدا کردین، آفرین?آموزش کتابخانه Regexیه همچین عددی رو فرض کنید:149853301250910845287515529568796939729530823567627077867753375684694751845499010198513288240806185488720405794322901755334701505375868241863652321086085464175146674675647227094711698630265397174162942203787811947725632161269061623190529887376840005563889752962138977116240676380579516412977985064270حتی فرض کردنشم سخته! حالا من ازتون یه سوال دارم. همه اعدادی سه رقمی رو که رقم اولشون(صدگان) 2 هست رو از توی عدد بالا پیدا کنید! من که اصلا حس شمردنشون رو ندارم. پس واجب شد regex رو یاد بگیریم. کتابخونه regex(قسمت findall) کل این کار هارو بدون هیچ دردسری انجام میده. میدونی بیل گیتس چی میگه؟بیل گیتس میگه : همیشه سخت ترین کار هارو به تنبل ترین آدم ها بده! اونا ساده ترین راه رو براش پیدا میکنن.با یه مثال ساده میخوایم findall رو در ریجکس رو یاد بگیریم. همونطور که از اسمش معلومه، تابع findall برای پیدا کردن یک الگو است. به کد زیر یه نگاهی بی‌اندازید:import re
text = &#039;salam&#039;
res = re.findall(&#039;[a-z]a&#039;, text)برنامه بالا همه کلماتی را که دو حرفی هستند و حرف دومشان a هست را برای ما پیدا میکند. یعنی میگیم اولین حرف از a تا z باشد و حرف دوم هم a باشد.خروجیoutput : [&#039;sa&#039;, &#039;la&#039;]حالا با چیزی که یاد گرفتیم، میخوایم همه اعداد سه رقمی که رقم اولشان(صدگان) 2 است را از اون عدد خفنه پیدا کنیم.اول که باید کتابخانه ریجکس رو صدا کنیم.import reبعدش باید یه متغییر تعریف کنیم و اون عدده رو توش بریزیم.text = &#039;149853301250910845287515529568796939729530823567627077867753375684694751845499010198513288240806185488720405794322901755334701505375868241863652321086085464175146674675647227094711698630265397174162942203787811947725632161269061623190529887376840005563889752962138977116240676380579516412977985064270&#039; حالا باید با چیزی که یاد گرفتیم، همه اعداد سه رقمی که.... رو پیدا کنیم.res = re.findall(&#039;2[0-9][0-9]&#039;, text)خروجیoutput : [&#039;250&#039;, &#039;287&#039;, &#039;295&#039;, &#039;295&#039;, &#039;235&#039;, &#039;270&#039;, &#039;288&#039;, &#039;240&#039;, &#039;204&#039;, &#039;229&#039;, &#039;241&#039;, &#039;232&#039;, &#039;227&#039;, &#039;265&#039;, &#039;294&#039;, &#039;220&#039;, &#039;256&#039;, &#039;216&#039;, &#039;269&#039;, &#039;231&#039;, &#039;298&#039;, &#039;296&#039;, &#039;213&#039;, &#039;240&#039;, &#039;297&#039;, &#039;270&#039;]دیدین چقدر ساده بود؟ خدا یا اگه تنبل نبودم باید چیکار میکردم؟مطمئنا الان همتون این شکلی شدین:ولی باید بگم تازه این اول راهه:Dبریم سراغ مسئله اصلی. یعنی همون در آوردن تاریخ شمسی از توی سایت time.ir.آخرین کدی که زده بودیم این بود که کد سایت رو برامون در می‌آورد.import requests
import re
r = requests.get(&#039;https://www.time.ir/&#039;)
r = r.textخب حالا وقتشه که با استفاده از findall در ریجکس، تاریخ شمسی رو از توی سایت دربیاریم.import requests
import re
r = requests.get(&#039;https://www.time.ir/&#039;)
r = r.text
halat_haye_momken = &#039;[0-9][0-9][0-9][0-9]/[0-2][0-9]/[0-3][0-9]&#039;
date = re.findall(halat_haye_momken, r)
date_shamsi = date[2]
print(date_shamsi)خروجیoutput : 1398/01/29به همین سادگی!حالا میخوایم با استفاده از این کد و کتابخانه easygui، یک برنامه گرافیکی بسازیم.اینم از آموزش کتابخانه easygui https://virgool.io/pythonisho/how-to-learn-easygui-in-python-qcvxwodzu8uu همه برنامه کد قبلی رو میبریم توی یه تابع:def get_web():
   r = requests.get(&#039;https://www.time.ir/&#039;)
   r = r.text
   date = re.findall(&#039;[0-9][0-9][0-9][0-9]/[0-2][0-9]/[0-3][0-9]&#039;, r)
   date_shamsi = date[2]
   return date_shamsi
date = get_web()
main_page = easygui.msgbox(&#039;What date is today?&#039;, &amp;quotToday&#039;s date&amp;quot, &#039;I do not know. tell me!&#039;)
date_page = easygui.msgbox(&#039;Today is &#039; + date, &amp;quotToday&#039;s date&amp;quot, &#039;OK. I understood&#039;)سوالات خود را در بخش نظرات بپرسیدمنتظر باشید...</description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Fri, 17 Apr 2020 03:38:49 +0430</pubDate>
            </item>
                    <item>
                <title>چطور توی پایتون برنامه گرافیکی بسازیم؟ - قسمت اول</title>
                <link>https://virgool.io/pythonisho/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%DA%A9%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-uzfuhrgwuzz8</link>
                <description>سلامی دوباره.توی قسمت قبلی به نصب کتابخانه easygui پرداختیم. امیدواریم که تونسته باشید نصبش کنید:) توی این قسمت میخوایم با چندتا از دستورات کاربردی این کتابخانه آشنا بشیم. برییییییممم که داشته باشیم...دستور های کاربردی کتابخانه easygui - دستور اولاولین و پرکاربردترین دستور در این کتابخانه، دستور msgbox است. این دستور یک پیام ساده را در یک صفحه نمایش می‌دهد. به نظرتون یک صفحه که یک متن ساده را نمایش میدهد، چه چیز هایی لازم دارد؟پیامنام صفحهimport easygui
msg = &amp;quotsalam donya!&amp;quot
title = &amp;quotsafhe nameyesh&amp;quot
easygui.msgbox(msg, title, &amp;quotOk&amp;quot)دستور های کاربردی کتابخانه easygui - دستور دومبیایید چند گزینه دیگر را که می توانید برای توسعه برنامه خود استفاده کنید را پیدا کنیم.دستور جدیدی که میخواهیم با آن کار کنیم، یک صفحه، مثل دستور msgbox می‌سازد؛ تنها فرقی که با دستور msgbox دارد، آن است که با این دستور می‌توانید از کاربر مقداری را دریافت کنیم. برای مثال ما می‌خواهیم از کاربر بپرسیم که &quot;آیا شما بازی می‌کنید؟&quot;. کاربر در جواب به این سوال باید یا کلمه &quot;بله&quot; را بگوید را کلمه &quot;خیر&quot;.import easygui
msg = &amp;quotbazi mikoni?&amp;quot
title = &amp;quotnazar sanji&amp;quot
res = easygui.ynbox(msg, title, (&amp;quotAre Baba!&amp;quot, &amp;quotNa Omran!&amp;quot))
print(res)دستور ynbox، یک صفحه می‌سازد و دو گزینه بله یا خیر را در پایین صفحه قرار می‌دهد. کاربر هم یکی از این گزینه ها را انتخاب می‌کند. سپس این دستور، مقدار True یا False را برای ما بازمی‌گرداند.همیشه گزینه سمت چپ(&quot;Are baba&quot;) مقدار True و گزینه سمت راست(&quot;Na Omran&quot;) مقدار False را برمی‌گرداند.دستور های کاربردی کتابخانه easygui - دستور سومحالا ممکنه براتون سوال شده باشه که چطور میتونیم از چندتا دکمه توی برناممون استفاده کنیم. دستور buttonbox این کار رو براتون انجام میده. برای اینکه ورودی های این دستور را بهتر متوجه بشید، به کد زیر یه نگاهی بندازید.easygui.buttonbox(Message, Title, (Button1, Button2, Button3,....))حالا میخوایم با استفاده از این کد، یک برنامه ساده برای درک بهتر شما از این دستور بنویسیم.import easygui
title = &amp;quotnazar sanji&amp;quot
res = easygui.buttonbox(&amp;quotChera In Matno Mikhooni?&amp;quot, title,(&amp;quotChon Matn Haye Ashkan Kheyli Khafane!&amp;quot,&amp;quotBaraye Yadgiri Behtar&amp;quot,&amp;quotBe To Che&amp;quot,&amp;quotHamintori&amp;quot))
print(res)خروجیاین تابع برای شما مقداری که کاربر انتخاب میکند را بازمی‌گرداند. یعنی اگر کاربر گزینه دو را انتخاب کرده باشد، این تابع، مقدار گزینه دو را برای شما بازمی‌گرداند.منتظر قسمت های بعد باشید...</description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Sun, 12 Apr 2020 01:18:30 +0430</pubDate>
            </item>
                    <item>
                <title>چطور توی پایتون برنامه گرافیکی بسازیم؟ - قسمت صفرم</title>
                <link>https://virgool.io/pythonisho/how-to-learn-easygui-in-python-qcvxwodzu8uu</link>
                <description>سلام به همگیتوی این سری از آموزش میخوایم به کتابخونه گرافیکی easygui بپردازیم.اصلاً کتابخانه easygui چی هست؟کتابخانه easygui یک کتابخانه برای ساخت برنامه های گرافیکی است؛ این کتابخانه میتونه گزینه خوبی برای افراد مبتدی باشه. چون قابلیت طراحی و... نداره. اگر فرد مبتدی ای نیستید، pyqt میتونه گزینه بهتری برای شما باشه. برای کار کردن با pyqt بهتره به شی گرایی مسلط باشید.نصب کردن کتابخانه easyguiنصب کردن این کتابخانه مثل بقیه کتابخانه هاست. وارد cmd یا terminal شوید.سپس دستور زیر را وارد کنید.pip install easyguiاگر دستور بالا کار نکرد، این دستور را وارد کنید:pip3 install easyguiحالا صبر کنید تا مراحل نصب انجام شود:برای اینکه مطمئن شوید که کتابخانه نصب شده یا نه، وارد idle شوید و کد زیر را بنویسید.import easyguiاگر هیچ اروری نگرفتید، یعنی نصب شده!!در غیر این صورت به این لینک مراجعه کنید!!اگر سوالی داشتید یا ابهامی در آموزش بود، میتونید با این ایمیل در تماس باشید یا سوال های خودتون رو توی بخش نظرات بپرسید!!ایمیل : a.jalali2005@gmail.com https://virgool.io/@ashkanjalali/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%DA%A9%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-uzfuhrgwuzz8 </description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Fri, 10 Apr 2020 14:32:16 +0430</pubDate>
            </item>
                    <item>
                <title>چطور توی پایتون بازی بسازیم؟ - قسمت هشتم</title>
                <link>https://virgool.io/pythonisho/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D8%B4%D8%AA%D9%85-v08yos0tijfs</link>
                <description>متن ها در بازی نقش خیلی مهمی را ایفا می‌کنند. متن ها به کاربران کمک می‌کنند، بازی را بهتر درک کنند. پس اگر چیز خوبی هست، باید کارکرد و طریقه استفاده از آن را بدانیم.گذاشتن متن در پایگیمقبل از ساخت یک متن، باید فونت و اندازه آن متن را مشخص کنیم.myfont = pygame.font.Font(&#039;آدرس فونت&#039;, &lt;font-size&gt;)می‌توانید با گذاشتن فایل فونت کنار برنامه، دیگر آدرس آن را ننویسید. در این صورت فقط نام فایل را مینویسید؛ برای مثال &quot;Arial.ttf&quot;.در قسمت font-size هم باید اندازه متن خود را بنویسید؛ مثلا من میخواهم سایز متنم، 50 باشد. پس عدد 50 را در قسمت font-size می‌گذارم.تا حالا ما فقط مشخصات متنی که می‌خواهیم به کاربر نشان دهیم را مشخص کردیم. حالا نوبت این است که متن را به کاربر نشان دهیم.ساخت متن در پایگیمحالا باید یه متغییر بسازیم و مقدار متن را داخل آن بریزیم.text = myfont.render(&#039;text&#039;, True, (رنگ))بعد از آن نوبت نشان دادن متن است.display.blit(text, (&lt;مختصات&gt;))هر متنی که در پایگیم مینویسید، باید همچنین قالبی داشته باشد. یعنی اول مشخصات فونت را مشخص می‌کنید. بعد متن را به همراه رنگ مشخص میکنید و بعد آن را نشان می‌دهید.import pygame
pygame.init()
display = pygame.display.set_mode((500, 500))
myfont = pygame.font.Font(&#039;arial.ttf&#039;, 60)
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    text = myfont.render(&#039;text&#039;, False, (255, 255, 255))
    display.blit(text, (200, 200))
    pygame.display.update()
pygame.quit()خروجی کد بالا:منتظر قسمت های بعدی باشید:)سوالات و نظرات خود را در بخش نظرات مطرح کنید</description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Mon, 16 Mar 2020 14:10:25 +0330</pubDate>
            </item>
                    <item>
                <title>واقعا فقط فریمورک بزرگ تر ها خوبن؟!</title>
                <link>https://virgool.io/pythonisho/%D9%81%D9%84%D8%B3%DA%A9-%D8%A8%D9%87-%D8%AF%D8%B1%D8%AF-%D9%86%D9%85%DB%8C-%D8%AE%D9%88%D8%B1%D9%87-%D9%81%D9%82%D8%B7-%D8%AC%D9%86%DA%AF%D9%88-%D9%85%D8%AE%D8%A7%D9%84%D9%81%D9%85-yxx6hkmd1nb6</link>
                <description>Flask vs Djangoسلام طبق معمول امیرمهدی هستم :)خب شاید براتون پیش اومده باشه بخواید برای اولین بار یک کاری بکنید و دنبال این باشید که باید چه چیزی برای این کار باید یاد بگیرید این جاست که میرید سرچ کنید. اگر برای نوشتن بک-اند با پایتون سرچ کنید ممکنه دچار مشکل بشید :)داستان اینه که یه بنده خدایی می خواست با پایتون بک-اند بزنه. به من گفت می خواد دقیقا چیکار کنه و من بهش فلسک رو پیشنهاد کردم. با پیشنهادم تعجب کرد. و اون بنده ی خدا گفت من خوندم جنگو بهتر از فلسکه :)) و این باعث شد تا این جا راجع بهش بنویسم :)خود من اولین بار که می خواستم با پایتون بک-اند بزنم،.سرچ کردم، مثل همه با دو گزینه ی معروف فلسک و جنگو بر خوردم :)(چیزای دیگه ای هم هستن که الان سرشون حرفی ندارم) چیزی که بین همشون مشترک بود، گفتن این که جنگو بهتر از فلسکه - فلسک خیلی کوچیکه ... .  بدون استدلال و نمونه بود. یعنی اون بنده خدایی که این حرفو زده بود، نگفته بود تو چه مقیاسی و ... در حدی افکار منو خراب کرده بودن که حتی با یکسری پروژه خفن طور با فلسک رو به رو شدم ولی اصلا تحویلشون نگرفتم(البته این کار من هم غیر حرفه ایی درون خودش داشت) :)خب بدیهی بود که با این وجود برم سراغ جنگو . شروع کردم یاد گرفتن . چند تا پروژه انجام دادم براش و خیلی خوب بود. تا این که خواستم یک پروژه دیگه برای خودم انجام بدم :)‌شرح پروژه :خب من میخوام با یک API کار کنم :) این API از یک crm هست :) ما هیچ دیتابیسی نداریم و باید یک وب اپ داشته باشیم که یوزرنیم و پسورد و رو از کاربر بگیره ، بفرستش برای اون api ، api یک توکن بر می گردونه و از این به بعد با دادن توکن به api می تونیم مشخصات کاربر رو بگیریم و کار های مختلفی انجام بدیم مثلا براش سرویس دیگه ای بگیریم و ...(خیلی شبیه به فرانت ولی با این تفاوت که به دلایلی نمی شد با ری اکت و ویو زد) خب این کار ها رو با جنگو نمی شد انجام داد . بذارید چیز اشتباهی نگم در اصل می شد ولی خیلی بد می شد :کلی فایل اضافهچیزی مثل model که ما نیاز نداریمچیزی مثل admin که ما نیاز نداریمو خیلی از چیزای دیگه که اگر بخوام لیست کنم حوصلتون سر میرهسرعت پایین تر نسبت به فلسکمیدونید، به نظر من کلا جنگو برای کار های از یه حدی بزرگ تر یا پیچیده تر خوبه. توی جنگو شما همه چیو داری، ادمین و فلان و یسری چیزا هم حتی اضافه داری.  ولی خب توی فلسک از اول با هزار تا روش مختلف می تونی اون همه چیو بسازی و چیزی که می خوایو بیاری بالا. وقتیم که نیازش نداشته باشی نداری و چیزی نمیشه :) یعنی به نظر من فلسک هم انعطاف‌پذیرتره.  البته برای اون راه هایی وجود داشت ولی در کل خیلی کثیف کاری می شد و من هم ترجیح میدم یا کاری رو نکنم یا اگر می کنم درست و تمیز بکنم. خب من مونده بودم چیکار کنم تا این که یک جایی دوباره با فلسک بر خوردم :) حقیقتا این دفعه خودم واقعا رفتم تحقیق کردم و دیدم چی به چیه و خیلی ازش خوشم اومد. شروع کردم با فلسک نوشتنش :) و خب کارمم راحت تر شد.مزایا ی فلسک :سبک بودنسریع بودنسادگی سرعت توسعه ی بالاوجود داکیومنت های زیاداز هر چیزی که بخوای استفاده کنی فقط نیازه که ایمپورتش کنی و فایل های اضافه نخواهی داشتدیپلوی آسونو اگر الان از من بپرسن توی یک پروژه ی بدون دیتابیس یا ساده، جنگو یا فلسک؟ ۹۰ درصد جواب من فلسک هست :) این نوشته به معنی این نیست که فلسک خیلی بهتر از جنگو هست، یا من همیشه ترجیحش می دم. موضوع اینه که هر پروژه ای با هر اسکیلی و مشخصاتی یک فریم ورک مناسب براش باید انتخاب بشه و من معتقدم همیشه جنگو بهترین نیست :)در صورت این که خیلی ها خیلی مستقیم به شما میگن فقط جنگو که توی همین ایران خودمون کم نیستن.در کل این نوشته برای این نبود، که بگم چی کجا خوبه، جنگو بده فلسک خوبه یا کلا این جور چیزا. من فقط به شما توصیه می کنم که تصورات خودتونو بریزید دور و یه بار بدون گارد چیزایی هم که ازش استفاده نمی کنید رو ببینید. این طوریه که موقع انجام کاری که می خواید، با دست بازتر و حتی بهتر انتخاب می کنید. پیشنهاد می کنم اگر تا حالا بک-اند با پایتون کار نکردید، اول فلسک رو یاد بگیرید بعد جنگو. باز هم میگم جنگو هم یسری جا ها از فلسک قوی تره ولی توی همچی یک نیست، هر چیزی، جای خودش.ممنونم که تا این جا خوندید، موفق باشید :)</description>
                <category>پایتونی شو !</category>
                <author>امیرمهدی</author>
                <pubDate>Mon, 09 Mar 2020 13:20:32 +0330</pubDate>
            </item>
                    <item>
                <title>5 لایبرری باحال پایتون! (1)</title>
                <link>https://virgool.io/pythonisho/5-%D9%84%D8%A7%DB%8C%D8%A8%D8%B1%D8%B1%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%DA%A9%D9%87-%D8%A7%D8%AD%D8%AA%D9%85%D8%A7%D9%84%D8%A7-%D9%86%DB%8C%D8%A7%D8%B2-%D8%AF%D8%A7%D8%B4%D8%AA%DB%8C%D8%AF-1-kmdaxxkdwawo</link>
                <description>بعد از معرفی چند تا لایبرری جاوااسکریپت نوبت به معرفی 5 تا از لایبرری های کاربردی و باحال پایتون میرسه که بعد از آشنایی باهاشون احتمالا خیلی علاقه به تستشون خواهید داشت?pytubeبجای اینکه یه زمان زیادی برای ور رفتن با BeautifulSoup بذارید تا بتونید لینک های دانلود یه پلی لیست یوتوب رو به دست بیارید و یا حتی اونا رو مستقیما دانلود کنید با این لایبرری میتونید به سادگی هرچه تمام تر لینک دانلود کیفیت های متفاوت یه ویدیو و یا دانلود کل ویدیو های یه پلی لیست رو داشته باشید.نمونه کدfrom pytube import YouTube
video = YouTube(&#039;https://www.youtube.com/watch?v=H7nkC5GKMjE&#039;)
video.streams.filter(progressive=True, file_extension=&#039;mp4&#039;).order_by(&#039;resolution&#039;).desc().first().download(&#039;path/to/save&#039;)کد بالا ویدیوی این آدرس رو با بالاترین کیفیت موجود برامون توی مسیری که براش مشخص کردیم ذخیره میکنه!گیتهاب این لایبرری -&gt; تعداد ستاره ها: 2.8kJustPyاگه خیلی عاشق پایتون هستید و میخواید از اون توی محیط فرانت-اند وب هم استفاده کنید این لایبرری گزینه مناسبیه با استفاده از اون میتونید بدون استفاده از جاوااسکریپت یه وبسایت تعاملی بسازید! یعنی پایتون بزنید و در نهایت جاوااسکریپت تحویل بگیرید?نمونه کدimport justpy as jp
def hello_world():
    wep_page = jp.WebPage()
    hello_world_div = jp.Div(text=&#039;Hello world&#039;)
    wep_page.add(hello_world_div)
    return web_page
jp.justpy(hello_world)کد بالا یه صفحه برامون میسازه با یه div توش که متن توی اون div برابر Hello World هست، به همین سادگی!گیتهاب این لایبرری -&gt; تعداد ستاره ها: 491clickبه احتمال 90 درصد برای هر پایتون کاری پیش میاد که بخواد یه ابزار cli بنویسه و یه سری راه داره برای parse کردن آرگومان هایی که به ابزار داده میشه مثلا کتابخونه argparse خود پایتون اما click یه مزه دیگه ای داره، سادگی در عین حفظ قدرت?نمونه کدimport click
@click.command()
@click.option(&amp;quot--count&amp;quot, default=1, help=&amp;quotNumber of greetings.&amp;quot)
@click.option(&amp;quot--name&amp;quot, prompt=&amp;quotYour name&amp;quot, help=&amp;quotThe person to greet.&amp;quot)
def hello(count, name):
    &amp;quot&amp;quot&amp;quotSimple program that greets NAME for a total of COUNT times.&amp;quot&amp;quot&amp;quot
    for _ in range(count):
        click.echo(&amp;quotHello, %s!&amp;quot % name)
if __name__ == &#039;__main__&#039;:
    hello()کد بالا برای ساخت یه cli هست که با دادن اسم به تعداد باری که مشخص کردیم بهمون Hello میگه?گیتهاب این لایبرری -&gt; تعداد ستاره ها: 8.9kseleniumیه لایبرری خفن برای اتوماتیک کردن کارهایی که توی محیط مرورگر انجام میدیم، مثلا میتونید با این لایبرری یه پروژه بزنید که بیاد توی اکانت ویرگول شما لاگین کنه و محبوب‌ترین پست ها رو لایک کنه یا حتی برای تست پروژه های فرانت-اندتون مثلا وقتی وارد صفحه میشه چک کنه عنوان صفحه My Awesome Project هست یا نه و کلی کارای خفن دیگه?نمونه کدfrom selenium.webdriver import Chrome
username = input(&#039;enter the username : &#039;)
password = input(&#039;enter the password : &#039;)
driver = Chrome()
driver.get(&#039;https://virgool.io/login&#039;)
username_input = driver.find_element_by_xpath(&#039;//*[@id=&amp;quotform-handler&amp;quot]/form/div[1]/input&#039;)
password_input = driver.find_element_by_xpath(&#039;//*[@id=&amp;quotform-handler&amp;quot]/form/div[2]/input&#039;)
login_btn = driver.find_element_by_xpath(&#039;//*[@id=&amp;quotform-handler&amp;quot]/form/div[4]/button&#039;)
username_input.send_keys(username)
password_input.send_keys(password)
login_btn.click()کد بالا رو اگه اجرا کنید نام کاربری و رمزعبورتون رو میخواد بعد یه مرورگر باز میشه و توی ویرگول لاگین میکنه?گیتهاب این لایبرری -&gt; تعداد ستاره ها: 17.1kPyAutoGUIاین لایبرری برای مدیریت موس و کیبورده البته قابلیت های دیگه ای مثل نمایش پیغام، گرفتن مقدار و حتی اسکرین شات گرفتن از صفحه هم داره?نمونه کد برای گرفتن screen shot از صفحهimport pyautogui
pyautogui.screenshot(&#039;screenshot.png&#039;)گیتهاب این لایبرری -&gt; تعداد ستاره ها: 3.5kممنون که تا انتهای مقاله اومدید?لطفا نظراتتون رو برای بهبود مقاله هام بنویسید و لطفا اگر موضوع خاصی برای نوشته بعدی مد نظرتون هست بهم بگید?موفق و پیروز باشید✌</description>
                <category>پایتونی شو !</category>
                <author>محمد محمدعلیان</author>
                <pubDate>Fri, 06 Mar 2020 14:39:32 +0330</pubDate>
            </item>
                    <item>
                <title>چطور توی پایتون بازی بسازیم؟ - قسمت هفتم</title>
                <link>https://virgool.io/pythonisho/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D9%81%D8%AA%D9%85-netwcwmbb8pd</link>
                <description>همانطور که در جلسه قبل گفتیم، صداگذاری روی بازی، بازی را برای کاربران جذاب میکند.صداگذاری روی بازیاولین دستور برای صداگذاری رو بازی، دستور لود کردن صدا است.pygame.mixer.music.load(&#039;آدرس فایل صوتی&#039;)بعد از اینکه صدا را به داخل بازی لود کردیم، موقع پلی کردن صدا است.pygame.mixer.music.play()با استفاده از دستور بالا میتوانیم صدایی را که به داخل بازی لود کردیم را اجرا کنیم.قطع کردن صداحالا حتما این سوال برای شما پیش می‌آید که چطور صدا را در زمانی که میخواهیم قطع کنیم.pygame.mixer.music.stop()هر موقع که از کد بالا استفاده کنید، برنامه به صورت خودکار صداهایی که درحال پخش هستند را قطع می‌کند.تنظیم میزان خروجی صداخب حالا با خودتون فکر کنید که چطور میشه ولوم یه صدا یا آهنگ رو توی پایگیم کم رو زیاد کرد. فقط با یک دستور میشه صدای خروجی رو تنظیم کرد.pygame.mixer.music.load(&#039;sound.mp3&#039;)
pygame.mixer.music.set_volume(&lt;مقدار صدا&gt;)پس یعنی با دستور set_volume میتونین به سادگی میزان خروجی صدا رو تغییر بدین. https://virgool.io/@ashkanjalali/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D8%B4%D8%AA%D9%85-v08yos0tijfs نظرات خود را به اشتراک بگذارید</description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Mon, 02 Mar 2020 00:09:48 +0330</pubDate>
            </item>
                    <item>
                <title>نوشتن یک اسکریپت کوچولو با پایتون</title>
                <link>https://virgool.io/pythonisho/%D9%86%D9%88%D8%B4%D8%AA%D9%86-%DB%8C%DA%A9-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-%DA%A9%D9%88%DA%86%D9%88%D9%84%D9%88-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-fcxnehht3ptx</link>
                <description>خب امروزه بیتکوین زیاد رو مده و همه باکلاس ها دوستدارن قیمت هاش رو بدونن ، ما هم برا سرگرمی میخوایم یه اسکریپت کوچولو بنویسیم که هر 10 مین یه بار قیمت بیتکوین رو برام در بیاره.خب برای شروع باید کتابخونه requests  رو بنصبیم :pip install requests
این برای پایتون ورژن 2pip3 install requests
اینم برای پایتون ورژن 3خب حالا که نصب کردیم میخوام یه api  رو بهتون معرفی کنم که تو سایتش ادرس bitcoin  رو به صورت json  نشون میده.برای شروع کار باید کتاابخونه خودمون رو import کنیم و اینکه میخوایم از زمان استفاده کنیم باید از یک کتابخونه استفاده کنیم که جمعا میشه 2 تا کتابخونه.import requests
import timeخب حالا باید از لینک خودمون یه response  بگیریم تا بدونیم درست کار میکنه یا نه:re = requests.get(&amp;quothttps://api.livecoin.net/exchange/tincker?currencyPair=BTC/USD&amp;quot)
print(re)اگه response که داده 200 بود ینی ما میتونیم ادامه بدیم خب بریم سر ادامه کار حالا ما باید داده های داده شده رو تبدیل به json  کنیم:bit = re.json()و چون دیکشنری هستش ما از kay:last استفاده میکنیم:print(&amp;quotLatest Price Today : &amp;quot , bit[&#039;last&#039;],&amp;quot BIT&amp;quot)و اینکه میخوایم اونو هر 10 دقیقه تکرار کنیم اونو تو حلقه while  میندازیم و بهش time.sleep  میدیم.کد پایین کد نهایی اسکریپ ما هستش:import requests
import time

print(&amp;quotBitcoin\n&amp;quot)
while(True):
     re = requests.get(&amp;quothttps://api.livecoin.net/exchange/ticker?currencyPair=BTC/USD&amp;quot)

     bit = re.json()
     print(&amp;quotLatest Price Today : &amp;quot , bit[&#039;last&#039;],&amp;quot BIT&amp;quot)
     time.sleep(600)خب امیدوارم لذت کافی رو بردا باشین و اینکه با حمایت های شما کلی اسکریپت های کوچیک قشنگ رو باهم دوره میکنیم و بهترشون میکنیم.با امید اینکه انسان ها ت هر طبقه ای از جامعه به هم کمک کنن.#localHost</description>
                <category>پایتونی شو !</category>
                <author>localho3t</author>
                <pubDate>Sun, 01 Mar 2020 22:26:48 +0330</pubDate>
            </item>
                    <item>
                <title>کار در پس زمینه با فریمورک جنگو</title>
                <link>https://virgool.io/pythonisho/%DA%A9%D8%A7%D8%B1-%D8%AF%D8%B1-%D9%BE%D8%B3-%D8%B2%D9%85%DB%8C%D9%86%D9%87-%D8%A8%D8%A7-%D9%81%D8%B1%DB%8C%D9%85%D9%88%D8%B1%DA%A9-%D8%AC%D9%86%DA%AF%D9%88-vb5jwlabwqmt</link>
                <description>سلام سلامحمید هستم و با یک قسمت دیگر از نیمچه آموزش‌های جالب در خدمتتونم.شوخی بسه برم سر اصل مطلب...حدود یک سال پیش که می‌خواستم برای یکی از پروژه‌هایی که دستم بود سرویس پوش نوتیفیکیشن راه اندازی کنم. به یه مشکل برخوردم.مدیر اپلیکیشن می‌خواست با اپلیکیشن مدیریت یک ریکوئست بده و پیغامی رو برای تمام کاربران اپلیکیشن ارسال بکنه. برای ارسال نوتیفیکیشن نیاز داشتم پیغام رو به سرور firebase برسونم که توسط سرویس firebase cloud messaging به دست کاربران برسه. و برای این کار باید یک ریکوئست به سرور firebase ارسال می‌کردم.این روند به نظر ساده و روون میاد اما مشکل دقیقا اونجا بود که بعضی اوقات سرور firebase دیر جواب ریکوئست من رو می‌داد و از اون طرف هم مدیر اپلیکیشن منتظر بود تاییدیه ارسال پوش رو بگیره و خب مشکل پیش می‌اومد دیگه =)))یکمی سرچ کردم و راه حلش رو پیدا کردم و مشکل رو حل کردم ، هم من راضی ، هم مدیر اپلیکیشن راضی و...حالا بعد از یک سال که می‌خواستم به یکی از کارآموزام این مطلب رو آموزش بدم دنبال آموزش روون بودم اما پیدا نمی‌شد برای همین تصمیم گرفتم یکی توی این بلاگ بنویسم که شاااااید به درد بقیه هم بخوره =)))توضیح کلی روند کاردر کنار جنگو از دو پکیج دیگه استفاده می‌کنیماولی که Celery نام داره. یک &quot;صف اعمال درست کن&quot; ( task queue ) هست. ما یک سری عمل یا همون تسک رو براش تعیین می‌کنیم و اون یه سری صف درست میکنه. هرموقع که ما یکی از عمل هامون رو صدا زدیم. اون عمل رو می‌اندازه توی صف تا وقتی که نوبتش رسید انجام بشه و وقت کار اصلی ما رو نگیره.دومی هم redis نام داره ردیس در اصل یک ساختمان داده نگهدارنده درون حافظه ای هست ( مثل یک دیتابیس که درون حافظه کار میکنه ).ما از ردیس برای انتقال اطلاعات بین اپلیکیشن جنگو و celery استفاده می‌کنیم ( راستی این هم بدونید که ردیس به عنوان یک message broker یا همون انتقال دهنده پیام هم استفاده میشه )فکر می‌کنم توی همین دو مورد بالا روند کار هم به صورت خلاصه توضیح دادم بهتون =)))فرضیات و اهداففرض می‌کنیم که یک فضای ایزوله (virtual environment) به نام venv و درون اون یک پروژه جنگو به نام prj و درون اون یک اپلیکیشن جنگو به نام prapp داریم.پس اطلاعات ما به صورت زیر هستن :
venv
prj
├── manage.py
├── prj
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── prapp
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├── tests.py
│   └── views.pyهدفمون هم اینه که یک عمل در پس زمینه راه بیندازیم که دو مقدار رو با همدیگه جمع بکنه و توی فایلی به نام alaki.txt مقدار رو ذخیره بکنه و یک ویو بسازیم که با هر بار صدا کردنش صد بار این کار رو انجام بده.شروع کارابتدا با نصب ردیس شروع می‌کنیم :sudo apt install redis-serverبعد از اون باید ماژول‌های ردیس و سلری برای پایتون رو نصب بکنیم :pipenv install celery redisسپس با اضافه کردن تنظیمات سلری به settings پروژه کار رو ادامه میدیم : 
BROKER_URL = &#039;redis://localhost:6379&#039;
CELERY_RESULT_BACKEND = &#039;redis://localhost:6379&#039;
CELERY_ACCEPT_CONTENT = [&#039;application/json&#039;]
CELERY_TASK_SERIALIZER = &#039;json&#039;
CELERY_RESULT_SERIALIZER = &#039;json&#039;
CELERY_TIMEZONE = &#039;Asia/Tehran&#039;الان باید یک فایل celery.py توی آدرس prj/prj بسازیم و محتویات زیر رو توی اون بنویسیم :from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault(&#039;DJANGO_SETTINGS_MODULE&#039;, &#039;prj.settings&#039;)
app = Celery(&#039;prj&#039;)

app.config_from_object(&#039;django.conf.settings&#039;)
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)هدف از ساخت این فایل این هست که با اجرا کردن این فایل با هربار اجرا شدن پروژه جنگو خودمون تنظیمات سلری بر اساس تنظیماتی که توی فایل settings.py اضافه کردیم انجام بشه و سلری ما آماده استفاده باشه. حالا برای صدا زدن این فایل و اجرا شدن سلری کافیه که به فایل prj/prj/__init__.py اطلاعات زیر رو اضافه بکنیم :from __future__ import absolute_import
from .celery import app as celery_app

__all__ = (&#039;celery_app&#039;,)خب حالا که تمام تنظیمات اولیه انجام شده ، کافیه که اعمال مورد نیاز برای انجام شدن در پس زمینه رو برای سلری مشخص کنیم. برای این کار یک فایل به نام tasks.py در آدرس prj/prapp می‌سازیم و تسک‌های خودمون رو توی اون می‌نویسیم ( به عنوان مثال ما در این آموزش می‌خواستیم یک تسک برای جمع کردن دو عدد و ذخیره اون بنویسیم ) :from celery import shared_task
import time

@shared_task()
def plus(x, y):
    time.sleep(5)
    alaki = open(&amp;quotalaki.txt&amp;quot, &amp;quota+&amp;quot)
    alaki.write(str( x + y ) + &amp;quot\n&amp;quot)
    alaki.close()خب ما از یک decorator به نام shared_task استفاده کردیم که این تابع رو به یک عمل معتبر celery تبدیل می‌کنه و ما می‌تونیم با هر Celery که داریم این تسک رو صدا بزنیم.همچنین برای بهتر شدن تستمون ۵ ثانیه توقف گذاشتیم که تفاوت انجام شدن عمل در background و foreground رو متوجه بشیم.و در انتها ویو هم می‌نویسم تا با نحوه صدا زدن یک تسک سلری آشنا بشید.این هم از محتویات فایل views.py :from .tasks import plus
from django.http import HttpResponse

def alaki(request):
    for i in range(100):
        plus.delay(1398, 1)
    return HttpResponse(&amp;quotOK&amp;quot)خب باقی تنظیمات جنگو و ران کردن پروژه رو به عهده خودتون باقی می‌گذارم اما اینو بگم که شما بعد از ران کردن پروژه جنگو باید worker سلری رو ران بکنید تا تسک های شما رو انجام بده. برای ران کردن worker سلری از دستور زیر می‌تونید استفاده بکنید :celery -A prj worker -l infoتامام تامام =)))نتیجه مطلوبهمونطور که به احتمال زیاد خودتون می‌دونید ما می‌تونستیم ویو خودمون رو به شکل زیر بنویسیم :from django.http import HttpResponse
import time

def alaki(request):
    for i in range(100):
        time.sleep(5)
        alaki = open(&amp;quotalaki.txt&amp;quot, &amp;quota+&amp;quot) 
        alaki.write(str( x + y ) + &amp;quot\n&amp;quot)
        alaki.close()
    return HttpResponse(&amp;quotOK&amp;quot)اما در این صورت وقتی که به این ویو ریکوئست ارسال می‌کردیم باید ۵۰۰ ثانیه صبر می‌کردیم تا یک OK تحویل بگیریمدر حالی که الان با استفاده از celery می‌تونیم همون لحظه OK رو تحویل بگیریم و باقی کار ها توی پس زمینه انجام بشه =))ممنونم از این که این پست رو مطالعه کردیدامیدوارم که براتون مفید باشه =))لایک و کامنت فراموش نشه...سوالی بود در خدمتم.نوشته شده با ❤️ توسط کوچیکتون حمیدرضا شجراوی =)))</description>
                <category>پایتونی شو !</category>
                <author>حمید</author>
                <pubDate>Sun, 01 Mar 2020 04:16:51 +0330</pubDate>
            </item>
                    <item>
                <title>چطور توی پایتون بازی بسازیم؟ - قسمت ششم</title>
                <link>https://virgool.io/pythonisho/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%D9%BE%D9%86%D8%AC%D9%85-tfp8lgvt1cys</link>
                <description>اگر به بازی ها دقت کرده باشید متوجه می‌شود که آنها پر از عکس و صدا هستند. این عکس ها هستند که بازی را برای آدم‌ها سرگرم‌کننده‌تر می‌کنند و صدا ها هم باعث دلچسب شدن بازی می‌شوند.پس اگر بخوایم یک بازی سرگرم‌کننده و دلچسب درست کنیم، باید نحوه گذاشتن عکس و صدا را یاد بگیریم.نحوه گذاشتن عکس در پایگیمهر چیزی را که در پایگیم بخواهیم قرار دهیم، باید این دو کار را انجام دهیم.بارگذاری(load)نمایشبرای گذاشتن عکس در اولین گام باید عکس را به داخل بازی بارگذاری (load) کنیم. و بعد آن را نمایش دهیم.myphoto = pygame.image.load(&#039;آدرس عکس&#039;)بعد از اینکه عکس را داخل بازی بارگذاری (load) کردیم، حالا نوبت آن است که آن را نشان دهیم.display.blit(myphoto, (مختصات))نکته : متغییر display، نام متغییر صفحه نمایش است.تنظیم اندازه عکس در پایگیمما در ساخت بازی با عکس هایی با اندازه های گوناگون آشنا میشویم. برای همین لازم است تا اندازه آنها را به اندازه دلخواه خود تنظیم کنیم. این کار هم باعث زیبایی میشود و هم باعث این میشود که از صفحه بازی بیشترین استفاده را کنیم.img = pygame.image.load(&#039;آدرس عکس&#039;)
img = pygame.transform.scale(img, (x, y)) ## x va y andaze tool va arz aks hastand.چرخش عکس در پایگیمimg = pygame.image.load(&#039;آدرس عکس&#039;)
img = pygame.transform.rotate(img, &lt;درجه چرخش&gt;)
img = pygame.transform.scale(img, (500, 500))برنامه بالا عکس را لود می‌کند و 90 درجه عکس را در جهت عقربه های ساعت می‌چرخاند. بعد از آن اندازه عکس را به 500 در 500 تنظیم می‌کند. https://virgool.io/@a.jalali2005/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%D9%87%D9%81%D8%AA%D9%85-netwcwmbb8pd نظرات و سوالات خود را در بخش نظرات کاربران مطرح کنید.</description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Fri, 28 Feb 2020 00:29:16 +0330</pubDate>
            </item>
                    <item>
                <title>چطور توی پایتون بازی بسازیم؟ - قسمت پنجم</title>
                <link>https://virgool.io/pythonisho/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%D9%BE%D9%86%D8%AC%D9%85-cjvqzylwrlui</link>
                <description>یکی از مهمترین بحث های بازی سازی، متحرک سازی اشکال بازی است. با متحرک سازی اشکال بازی، بازی شما نسبتا شبیه به بازی می‌شود. برای همین به سراغ نوشتن این برنامه می‌رویم.اگر قسمت قبل را خوانده باشید، حتما میدانید که هر شکلی که در بازی معرفی میکنیم، یک مختصات دارد. یعنی روی محور عمودی یک عدد دارد و در محور افقی هم یک عدد دیگر دارد. این عدد ها مشخص میکنند که شکل ما کجای صفحه نمایش قرار بگیرد. پس یعنی با تغییر دادن عدد محور عمودی یا افقی، میتوانیم جای شکل را تغییر دهیم؛ به عبارت دیگر با این کار میتوانیم شکل را متحرک کنیم.قبل از هر کاری باید کارکرد دکمه ها را بدانیم. یعنی بدانیم که چطور میشود که یک کاربر دکمه ای را فشار دهد و ما متوجه آن شویم.فشار دادن دکمه در پایگیموقتی یک کاربر دکمه ای را فشار میدهد، یعنی یک رویدادی دارد اتفاق می‌افتد. در پایگیم، ما رویداد ها را به این شکل پیدا میکنیم.(رویداد مثل اینکه ببینیم که کاربر دکمه موس را فشار داده، توی کیبورد دکمه ای را فشار داده و...)while True:
     for event in pygame.event.get():
          if event.type == pygame.KEYDOWN:
               print(&#039;SalamSalam&#039;)تفسیر کدکد بالا رویداد های کامپیوتر را دریافت میکند. هر موقع یکی از این رویداد ها برابر &quot;فشار دادن کلید&quot; باشد، برنامه کلمه &quot;SalamSalam&quot; را چاپ میکند.انواع رویداد هارویداد KEYDOWN : وقتی کلیدی فشار داده میشود.رویداد KEYUP : وقتی کلیدی را که فشار داده بودیم را رها کردیم.رویداد MOUSEBUTTONDOWN : زمانی که یکی از دکمه های موس را فشار میدهیم.رویداد MOUSEBUTTONUP : وقتی کلیدی از موس را که فشار داده بودیم رها میکنیم.متحرک سازی اشکالحالا که با انواع رویداد ها آشنایی پیدا کردین، موقع اینه برنامه ای که میخواستیم رو بسازیم.در مرحله اول کار های اولیه را انجام میدهیم.import pygame
pygame.init()
display = pygame.display.set_mode((500, 500))
run = True
x = 240
y = 200بعد از انجام مرحله اول، باید حلقه اصلی برنامه رو بنویسیم.while run:
     for event in pygame.event.get()
          if event.type == pygame.QUIT:
               run = False
pygame.quit()حالا نوبت اینه که شکلمان را بسازیم.import pygame
pygame.init()
display = pygame.display.set_mode((500, 500))
run = True
x = 240
y = 200
while run:
     for event in pygame.event.get():
          if event.type == pygame.QUIT:
               run = False
     display.fill((0, 0, 0))
     pygame.draw.rect(display, (255, 0, 0), (x, y, 40, 40))
     pygame.display.update()
pygame.quit()حالا وقتشه که رویداد فشار دادن کلید را بنویسیم. یعنی بگوییم اگر کلید w را فشار داد، مستطیل هم بالا برود.import pygame
pygame.init()
display = pygame.display.set_mode((500, 500))
run = True
x = 240
y = 200
while run:
     for event in pygame.event.get():
          if event.type == pygame.QUIT:
               run = False
          if event.type == pygame.KEYDOWN:
               if event.key == pygame.K_w:
                    y -= 5
               if event.key == pygame.K_s:
                    y += 5
               if event.key == pygame.K_a:
                    x -= 5
               if event.key == pygame.K_d:
                    x += 5
     display.fill((0, 0, 0))
     pygame.draw.rect(display, (255, 0, 0), (x, y, 40, 40))
     pygame.display.update()
pygame.quit()نکته : event.key برای تشخیص کلید ها است. با این دستور میتوانیم بفهمیم که کاربر کدام کلید را فشار داده است. https://virgool.io/yadasan/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%D9%BE%D9%86%D8%AC%D9%85-tfp8lgvt1cys </description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Mon, 03 Feb 2020 23:17:22 +0330</pubDate>
            </item>
                    <item>
                <title>چطور توی پایتون بازی بسازیم؟ - قسمت چهارم</title>
                <link>https://virgool.io/pythonisho/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%DA%86%D9%87%D8%A7%D8%B1%D9%85-wu0u2kx0dse4</link>
                <description>یکی از مهمترین بخش ها در کتابخانه پایگیم، شکل ها هستند. شکل ها هستند که بازی ها را می‌سازند. شما هیچ بازی را نمی‌توانید پیدا کنید که شکل نداشته باشد.ساخت شکل مستطیلpygame.draw.rect(ضخامت, مختصات و طول و عرض, رنگ, نام صفحه نمایش)کد بالا ساختار کد ساخت شکل مستطیل است. حالا میخواهیم به جای اسم فارسی، از متغییر های واقعی استفاده کنیم.pygame.draw.rect(display, (255, 0, 0), (x, y, width, height), 0)نکته: اگر بخواهیم شکلی تو پر درست کنیم(یعنی داخل شکل خالی نباشد)، باید میزان ضخامت شکل را برابر صفر قرار دهیم.ساخت شکل دایرهpygame.draw.circle(ضخامت, شعاع, مختصات, رنگ, نام صفحه نمایش)کد بالا ساختار کد ساخت شکل دایره است. حالا میخواهیم به جای اسم فارسی، از متغییر های واقعی استفاده کنیم.pygame.draw.circle(display, (255, 0, 0), (400, 300), 10, 3)ساخت شکل بیضیpygame.draw.ellipse(ضخامت, مختصات, رنگ, صفحه نمایش)کد بالا ساختار کد ساخت شکل دایره است. حالا میخواهیم به جای اسم فارسی، از متغییر های واقعی استفاده کنیم.pygame.draw.ellipse(display, (0, 255, 0), (150,1,200,50), 0)ساخت شکل خط(البته که شکل نیست!)pygame.draw.line(ضخامت, مختصات نقطه پایانی, مختصات نقطه شروع, رنگ, صفحه نمایش)کد بالا ساختار کد ساخت شکل دایره است. حالا میخواهیم به جای اسم فارسی، از متغییر های واقعی استفاده کنیم.pygame.draw.line(window,(40,36,98),(400,20),(50,200),1) https://virgool.io/@a.jalali2005/%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%A8%D8%B3%D8%A7%D8%B2%DB%8C%D9%85%D9%82%D8%B3%D9%85%D8%AA-%D9%BE%D9%86%D8%AC%D9%85-cjvqzylwrlui سوالات و نظرات خود را در بخش نظرات کاربران مطرح کنید.</description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Tue, 28 Jan 2020 00:47:06 +0330</pubDate>
            </item>
                    <item>
                <title>یه کوچولو وب اسکرپینگ با پایتون‌:) (۳)</title>
                <link>https://virgool.io/pythonisho/%D9%88%D8%A8-%D8%A7%D8%B3%DA%A9%D8%B1%D9%BE%DB%8C%D9%86%DA%AF-%D9%85%D8%A7-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A7%D9%88%D9%85%D8%AF%DB%8C%D9%85-%DB%B3-pynx8brsd2cf</link>
                <description>وب اسکرپینگ (ببخشید قسمت ها روش نمی نویسم)سلام طبق معمول امیرمهدی هستم :)به خاطر تاخیر عذر خواهی می کنمخب تا جایی پیش رفتیم که به سایت request بزنیم و محتواش رو ‌ذخیره کنیم. ولی خب از این جا به بعد می خوایم محتوا ی سایت رو بخونیم و باهاش کار کنیم. برای این کار از لایبری bs4 (BeautifulSoup 4) استفاده می کنیم برای استفاده کردن از کتابخونه با خط زیر ایمپورتش می کنیم :from bs4 import BeautifulSoupحالا ما می خوایم عناصر صفحه رو تجزیه کنیم. یا به اصطلاح پارسش کنیم.  مثلا یک مثالش در دنیای واقعای و باحال گونش اینه که ما یک سوپ داریم میدیمش به bs4  میگیم تمام هویجاش رو به ما بده :)) پیازش رو به ما بده:) ما توی خط کد زیر دیتای requestمون رو به bs4 میدیم تا بعدن بتونیم دیتامون رو پارس کینم یا مثالش این هست که بهش بگیم تمام تگ های A سایت رو بهمون بده. این خط کد رو به بقیه ی کد هامون اضافه می کنیم تا بتونیم بعدن دیتامون رو پارس کنیم ! :soup = BeautifulSoup(site.text, &#039;html.parser&#039;)حالا چجوری می تونیم بخونیم چیزای مختلفو ازش بخونیم؟ این جا یه مثال داریم، که می خوایم توش تمام تگ های a  رو که href دارن رو در بیاریم :)(همه ی لینک ها)for link in soup.find_all(&amp;quota&amp;quot, href=True):
    print(link[&#039;&#039;href&#039;])تا این جا ما الان یاد گرفتیم که چجوری تگ ها رو جدا کنیم و بخونیم. یعنی شما می تونید ریکوءست بزنید و حالا به صورت مقدماتی تگ ها رو فیلتر کنین و دیتا رو بخونین :)</description>
                <category>پایتونی شو !</category>
                <author>امیرمهدی</author>
                <pubDate>Tue, 21 Jan 2020 17:33:01 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش گرفتن اطلاعات با API</title>
                <link>https://virgool.io/pythonisho/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%AF%D8%B1%D9%81%D8%AA%D9%86-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D8%A7-api-tybdjutpe3rp</link>
                <description>تا حالا براتون سوال شده که مثلا چجوری سایت ها یا برنامه ها یک اطلاعاتی مثل قیمت دلار و ...  رو میگیرن؟حالا ما میخوایم متوجه بشیم که چگونه و از کجا این اطلاعات رو به ما نشان می‌دهند.وب سرویس(API) چیست؟وب سرویس(API) یک صفحه از یک سایت است که در آن اطلاعاتی در قالب فایل JSON ارائه می‌شود.برنامه نویسان با همین فایل، اطلاعات مورد نظرشان را دریافت می‌کنند.جیسون(JSON) چیست؟جیسون معادل اختصاری عبارت JavaScript Object Notation به معنی «نمادگذاری اشیا در جاوا اسکریپت» است. جیسون یک قالب استاندارد باز است که امکان تبادل داده‌ها در وب با استفاده از جفت‌های خصوصیت-کلید را ممکن ساخته است. این توضیح ممکن است تا حدودی پیچیده به نظر بیاید؛ پس در ادامه آن را اندکی بیشتر توضیح می‌دهیم.فرض کنید که شخصی یک بالون دارد و شما آن را می‌خواهید. یکی از روش‌های ارسال بالون این است که فرد دیگر عملاً آن را بسته‌بندی کند و از طریق پست برای شما ارسال نماید. اما یک روش دیگر آن است که فرد خصوصیات بالون خود را برای شما توضیح دهد تا شما بتوانید همان بالون را بدون دسترسی عملی فیزیکی به آن، به طور دقیق بازسازی نمایید.بالون آن فرد می‌تواند خصوصیاتی از قبیل جنس، رنگ، قطر و گاز داشته باشد. این چهار جفت خصوصیت کلیدی برای این است بتوانید بالون را تجسم کنید.جیسون نیز در زمان ارسال داده‌ها بر روی اینترنت به همین ترتیب عمل می‌کند.مزیت جیسون چیست؟جیسون نخستین قالبی نیست که از جفت‌های خصوصیت-کلید برای تبادل داده‌ها بر روی اینترنت استفاده می‌کند. فناوری‌های مختلفی در این زمینه وجود دارند که ممکن است حتی برخی از آن‌ها مانند XML را نیز بشناسید. جیسون و ایکس‌ام‌ال تقریباً به روش مشابهی عمل می‌کنند. پس چرا باید جیسون را بر ایکس‌ام‌ال ترجیح بدهیم؟در وب امروز بارگذاری asynchronous (غیر همزمان و یا در مواردی نامتقارن نامیده می‌شود) داده‌ها بسیار مهم است. به بیان دیگر صفحه‌های وب می‌خواهند قادر باشند تا داده‌ها را بدون نیاز به بارگذاری مجدد کل صفحه به کاربر ارسال نمایند. نتیجه چنین امکانی، ایجاد تجربه مرور روان‌تر و مطلوب‌تر برای کاربر است. جیسون برای ارسال و دریافت غیر همزمان داده‌ها عالی است، زیرا ساده است و استفاده از آن آسان است.اما ایکس‌ام‌ال نیز همین کار را انجام می‌دهد! پس چرا برخی افراد جیسون را به آن ترجیح می‌دهند؟یکی از پاسخ‌های ممکن به این سؤال شاید در نام جیسون نهفته باشد: نمادگذاری اشیای جاوا اسکریپت. جیسون معمولاً همراه با جاوا اسکریپت شناسایی می‌شود که یکی از رایج‌ترین زبان‌های برنامه‌نویسی دنیا است. از آنجا که جیسون زیرمجموعه‌ای از جاوا اسکریپت است، برای کسانی که جاوا اسکریپت را می‌دانند نیاز به یادگیری موارد زیادی در زمان استفاده از جیسون وجود نخواهد داشت.دلیل دیگر برای این محبوبیت جیسون آن است که خوانایی آن بالاتر از ایکس‌ام‌ال است. البته وقتی برای مدتی برای با ایکس‌ام‌ال کار کنید، استفاده از آن را نیز آسان خواهید یافت؛ اما نگاهی گذرا به فایل ایکس‌ام‌ال کاربر را با انبوهی از تگ‌ها و موارد توضیحی روبرو می‌کند. در مقابل جیسون تمیزتر است و افراد مبتدی آن راحت‌تر درک می‌کنند. از طرف دیگر با انواع داده‌های مقدماتی خود تا حدودی انعطاف‌پذیری بیشتری ارائه می‌کند.ظاهر جیسون چگونه است؟جیسون تنها یک سری از جفت‌های خصوصیت است که می‌توان در صورت لزوم آن‌ها را به صورت تو در تو نوشت. برای مثال اگر داده‌های ما در مورد یک شخص باشند، این شخص را می‌توان به وسیله داده‌های جیسون زیر نمایش داد:هر خط با یک خصوصیت آغاز می‌شود و با علامت دو نقطه (:) ادامه می‌یابد، سپس مقدار خصوصیت ذکر می‌شود. این مقدار همان طور که در مورد خصوصیت شماره تلفن در مثال فوق مشاهده می‌کنید، می‌تواند یک آرایه باشد. همچنین مقدار یک خصوصیت همان طور که در مورد خصوصیت آدرس در مثال فوق می‌بینید، می‌تواند خود جفت‌هایی دیگر از خصوصیت-کلید باشد. این حالت یک شیء نامیده می‌شود.برای مقایسه در ادامه همان داده‌ها با استفاده از زبان XML تنظیم شده‌اند:همانطور که میبینیم، فایل XML شباهت زیادی به HTML دارد و در مقایسه با JSON، خوانایی کمتری دارد.چطور از یک API، اطلاعات یک فایل JSON را بگیریم؟وب‌سرویس های(API) زیادی وجود دارند که میتوان از آن ها اطلاعات گرفت. ما برای شروع به کار، وب‌سرویس قیمت دلار را انتخاب کردیم.وب‌سرویس قیمت دلار: https://api.tgju.online/v1/data/sana/jsonوارد لینک بالا شوید. بعد از اینکه وارد لینک بالا شدید، با یک فایل JSON مواجه میشود:حالا نوبت اینه که از این فایل جیسون، اطلاعات لازممون رو استخراج کنیم.import requests
r = requests.get(&#039;https://api.tgju.online/v1/data/sana/json&#039;)
print(r.json())اگر کد بالا را اجرا کنید، همان اطلاعات عکس بالا برای شما نمایش داده می‌شود. حالا به نوبت توی فایل جیسون جلو میرویم. یعنی ابتدا وارد &quot;sana_buy_usd&quot; می‌شویم. سپس وارد &quot;p&quot; می‌شویم و مقدار &quot;p&quot; را چاپ می‌کنیم. یعنی &quot;122889&quot; را چاپ می‌کنیم.import requests
r = requests.get(&#039;https://api.tgju.online/v1/data/sana/json&#039;)
print(r.json()[&#039;sana&#039;][&#039;data&#039;][0][&#039;p&#039;])امیدوارم براتون مفید بوده باشه. سوالاتتون رو توی قسمت نظرات کاربران مطرح کنید.</description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Mon, 20 Jan 2020 17:08:36 +0330</pubDate>
            </item>
                    <item>
                <title>مسیریابی در گراف با استفاده از پایتون</title>
                <link>https://virgool.io/pythonisho/%D9%85%D8%B3%DB%8C%D8%B1%DB%8C%D8%A7%D8%A8%DB%8C-%D8%AF%D8%B1-%DA%AF%D8%B1%D8%A7%D9%81-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-pppbkp6acwid</link>
                <description>یکی از مهترین ابزارهای مدل سازی ریاضی که استفاده های متنوعی در علم روز پیدا کرده است گراف می‌باشد. اگر می‌خواهید نحوه پیاده سازی گراف در زبان برنامه نویسی پایتون و الگوریتم های مسیریابی ساده مرتبط با آن را فرابگیرید، این نوشته به شما کمک خواهد کرد. در این نوشته بعد از ساخت گراف با استفاده از شی dictionary به پیاده سازی الگوریتم مسیریابی و کوتاه ترین مسیر پرداخته شده است.فرض کنید که ما نقشه‌ای(گراف) به صورت شکل پایین داشته باشیم:گرافطبق نقشه بالا خانه A به خانه های D و B راه دارد؛ خانه B به خانه های A و C راه دارد و ...A -&gt; B
A -&gt; D
B -&gt; A
B -&gt; C
B -&gt; D
B -&gt; E
C -&gt; E
C -&gt; B
E -&gt; B
E -&gt; C
E -&gt; D
D -&gt; A
D -&gt; B
D -&gt; Eحال میخواهیم با استفاده از دستور دیکشنری همین کاری که انجام دادیم را وارد پایتون کنیم:graph = {
    &#039;A&#039; : [&#039;B&#039;, &#039;D&#039;],
    &#039;B&#039; : [&#039;A&#039;, &#039;C&#039;, &#039;D&#039;, &#039;E&#039;],
    &#039;C&#039; : [&#039;E&#039;, &#039;B&#039;],
    &#039;E&#039; : [&#039;B&#039;, &#039;C&#039;, &#039;D&#039;],
    &#039;D&#039; : [&#039;A&#039;, &#039;B&#039;, &#039;E&#039;]
}در کد بالا ما راه های هر خانه را نوشتیم. برای مثال گفتیم که اگر در خانه A هستی، میتوانی به خانه های B و D بروی.خب تا این قسمت ما توانستیم یک گراف را با امکانات عادی پایتون مدل سازی کنیم. حال تابعی می نویسیم که مسیری بین دو خانه از گراف را برای ما پیدا کند:def find_all_paths(graph, start, end, path=[]):
    path = path + [start]
    if start == end:
        return [path]
    paths = []
    for node in graph[start]:
        if node not in path:
            newpaths = find_all_paths(graph, node, end, path)
            for newpath in newpaths:
                paths.append(newpath)
    return pathsهمانطور که معلوم است، تکه کد بالا سه ورودی دارد؛ اول گرافمان، دوم خانه شروع و سوم خانه پایانی.start = &#039;A&#039;
end = &#039;D&#039;
print(find_all_paths(graph, start, end))حال این کد را برای گرافی که ساخته ایم اجرا نماییم:&gt;&gt;&gt; [[&#039;A&#039;, &#039;B&#039;, &#039;C&#039;, &#039;E&#039;, &#039;D&#039;], [&#039;A&#039;, &#039;B&#039;, &#039;D&#039;], [&#039;A&#039;, &#039;B&#039;, &#039;E&#039;, &#039;D&#039;], [&#039;A&#039;, &#039;D&#039;]]همینطور که مشاهده میکنید، این تابع تمام راه هایی که من میتوانم از خانه A به خانه D بروم را چاپ کرد.حالا با خودتون فکر میکنید که چطور میتونم بهترین راه را از بین این راه ها انتخاب کنم.def find_shortest_path(graph, start, end, path=[]):
    path = path + [start]
    if start == end:
        return path
    shortest = None
    for node in graph[start]:
        if node not in path:
            newpath = find_shortest_path(graph, node, end, path)
            if newpath:
                 if not shortest or len(newpath) &lt; len(shortest):
                      shortest = newpath
    return shortestآموزش جذاب پایگیم https://virgool.io/@a.jalali2005/how-to-learn-pygame-jfwhsa2xz7rv سوال هایتان را در بخش کامنت مطرح کنید.</description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Tue, 17 Dec 2019 01:46:44 +0330</pubDate>
            </item>
                    <item>
                <title>یه کوچولو وب اسکرپینگ با پایتون‌:) (۲)</title>
                <link>https://virgool.io/pythonisho/%D9%88%D8%A8-%D8%A7%D8%B3%DA%A9%D8%B1%D9%BE%DB%8C%D9%86%DA%AF-%D9%85%D8%A7-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A7%D9%88%D9%85%D8%AF%DB%8C%D9%85-%DB%B2-dcvvuigyhlac</link>
                <description>سلام طبق معمول امیرمهدی هستم :)بریم شروع کنیم.وب اسکرپینگ اقلب ۲ بخشه. یسری وقتا برای اتومیشن و ... و یسری وقتا برای جمع آوری داده و این جور چیزا :) برای اتومیشن، معمولا از سلنیوم استفاده می کنن چون باهاش تعامل با سایت راحت تره. ولی برای کار های ساده تر و کراول و اینا معمولا reauests و bs4. البته که از سلنیوم برای این کار ها هم میشه استفاده کرد.فعلا ما هم می خوایم ساده شروع کنیم و قسمت دلار در بیاریم :). برنامه ای که می خوایم روش کار کنیم برنامه ای هست که بره و از این سایت قیمت دلار رو برای ما بگیره و بیاره و مثال هامون رو فعلا روی این برنامه پیش میریم.خب اول از همه ما برای پردازش و استخراج داده باید به سایت  ریکوئست بزنیم برای این کار از لایبری requets استفاده می کنیم پس خط زیر رو به برنامتون اضافه کنید :import requetsبعد متغییری به نام url تعریف می کنیم و url مون رو میزاریم توش :url = &amp;quothttp://www.tgju.org/dollar-chart&amp;quotلایبری requests بخشی داره به نام session که برای ریکوئست زدن استفاده میشه اما خب دقیقا مثل یک سیسن هست :)‌ یعنی مثلا اگر ما با این سیسن توی جایی لاگین کنیم، لاگین می مونیم :) برای کار ما get خالص کافیه ولی خب مثال سیزن میشه این طوری :session = requests.session()site = session.get(url)و با get :site = requests.get(url)کوتاه بود ولی تا این جا با ۴ تا خط کد تونستیم محتوای سایت رو بگیریم و در قسمت بعدی با bs4 روش کار انجام میدیم :)</description>
                <category>پایتونی شو !</category>
                <author>امیرمهدی</author>
                <pubDate>Thu, 12 Dec 2019 15:00:50 +0330</pubDate>
            </item>
                    <item>
                <title>یه کوچولو وب اسکرپینگ با پایتون‌:) (۱)</title>
                <link>https://virgool.io/pythonisho/%D9%88%D8%A8-%D8%A7%D8%B3%DA%A9%D8%B1%D9%BE%DB%8C%D9%86%DA%AF-%D9%85%D8%A7-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A7%D9%88%D9%85%D8%AF%DB%8C%D9%85-%DB%B1-aseohqxrahq4</link>
                <description>سلام طبق معمول امیرمهدی هستم‌ :)یسری نکاتو اول بگم‌ :شاید یکم زیادی بیسیک باشهیه آشنایی اولیه میده و بقیش با خودتونه. سرچ و سرچ :) اگر به نظرتون جایی نیاز به ویرایش داشت حتما در جریان بذاریدپایه ی این مجموعه آموزش با پایتون(۳.۷) هست و قبلش نیاز داردید که تا حدی پایتون کار کرده باشیدسعی می کنم بیشتر سوالاتو جواب بدم.من این آموزش رو روی لینوکس پیش میرم ولی جای نگرانی نیست شما هم می تونید یا نصب کنید یا روی سیستم عاملی که دارید انجام بدید :)خب بریم شروع کنیم اول از همه پیش نیاز هامون رو نصب می کنیم و بعد ادامه میدیم :)پیش نیاز ها :اول از همه برای شروع به پایتون ۳ نیاز داریم. اگر ویندوزی هستید از سایت پایتون این نسخه رو دانلود کنید و نصبش کنید. اگر هم روی لینوکس هستید با کامند های پایین می تونید نصبش کنید (۹۹ ٪ خودش نصبه)برای debian base : sudo apt-get install python3یاsudo apt install python3برای Redhat و fedora :sudo yum install python3بچه های آرچم خودشون زحمتشو بکن :)لایبری(کتابخونه) هایی روکه برای این دوره نیاز داریم :requestsbs4wgetبرای نصبشون کافیه دستور زیر رو در termial یا cmd  کنید برای لینوکس :pip3 install requests bs4 wgetبرای ویندوز :pip install requests bs4 wgetمن خودم از vscode یا vim استفاده می کنم و به شما هم پیشنهاد میدم. </description>
                <category>پایتونی شو !</category>
                <author>امیرمهدی</author>
                <pubDate>Wed, 11 Dec 2019 17:11:23 +0330</pubDate>
            </item>
                    <item>
                <title>کار با بانک داده مونگو با استفاده از پایتون</title>
                <link>https://virgool.io/pythonisho/%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%A8%D8%A7%D9%86%DA%A9-%D8%AF%D8%A7%D8%AF%D9%87-%D9%85%D9%88%D9%86%DA%AF%D9%88-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-av8ctxloxpgo</link>
                <description>پایتون زبانی رایج برای کار در حوزه های مرتبط با هوش مصنوعی می باشد و این روزها در زمینه های مختلفی از قبیل پردازش تصویر، ویدیو و داده کاوی استفاده فراگیری دارد. از طرفی قالب داده های ذخیره شده در جهان دیجیتال، داده های بدون ساختار هستند و معمولا در قالب هایی غیر sql نگه داری می شوند به همین دلیل امروزه بانک های داده غیر sql فراگیر شده اند و درصد قابل توجه از داده های جدید در این نوع بانک داده  ذخیره می شود. در این پست قصد داریم نحوه ذخیره و بازیابی یک رکورد را در بانک غیر sql مونگو با استفاده از پایتون بیان کنیم:کتابخانه pymongoبرای اتصال و انجام عملیات بر روی کتابخانه مونگو از کتابخانه pymongo استفاده می شود. برای نصب این کتابخانه در خط فرمان دستور زیر را وارد کنید:python -m pip install pymongoدرج سند در بانک دادهفرض کنید سندی شامل سه فیلد نام، نام خانوادگی و سن را در اختیار داریم می خواهیم آنها را در کالکشن student ذخیره کنیم به صورت زیر عمل کنیم:خط ۱ و ۲ کتابخانه را اعلام می کنیمخط ۳ و ۴ اتصال به بانک داده مورد نظر که در اینجا بانک test است ایجاد می شودخط ۵ کالکشن(جدول) student برای انجام عملیات انتخاب می شودخط 6 تا ۹ رکوردی(سند) که می خواهیم در بانک داده درج کنیم ایجاد می شودخط ۱۰ با استفاده از تابع insert_one یک سند در کالکشن جاری درج می شودخط 11- با استفاده از تابع find_one یک سند که صفت age‌آن برابر 22 باشد را بازیابی و در خروجی نمایش می دهد.بروز رسانی سندبرای روز رسانی می توان از توابع update و update_one استفاده کنیم. مثال با اجرای دستور زیر یک سند که خصوصیت Age ان برابر ۲۲ باشد را با سند داده شده جایگزین خواهد شد.حذف یک سندبرای حذف یک سند می توان از تابع delete_one استفاده کرد دستور زیر یک سند که مقدار خصوصیت Age آن برابر ۲۳ باشد را حذف می کند:student.delete_one({‘Age’:’23’})منابع برای مطالعه بیشتر می تواند به لینک زیر مراجعه کنید: https://data-flair.training/blogs/nosql-database-in-python/ </description>
                <category>پایتونی شو !</category>
                <author>mehdi sedighi</author>
                <pubDate>Tue, 10 Dec 2019 11:35:38 +0330</pubDate>
            </item>
                    <item>
                <title>پایتون با جلو زدن از جاوا، به دومین زبان پر طرفدار گیت هاب تبدیل شد</title>
                <link>https://virgool.io/pythonisho/%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-%D8%A8%D8%A7-%D8%AC%D9%84%D9%88-%D8%B2%D8%AF%D9%86-%D8%A7%D8%B2-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A8%D9%87-%D8%AF%D9%88%D9%85%DB%8C%D9%86-%D8%B2%D8%A8%D8%A7%D9%86-%D9%BE%D8%B1-%D8%B7%D8%B1%D9%81%D8%AF%D8%A7%D8%B1-%DA%AF%DB%8C%D8%AA-%D9%87%D8%A7%D8%A8-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%B4%D8%AF-b4uq8umceskp</link>
                <description>در گزارش جدید گیت هاب که تحت عنوان «وضعیت اکتوورس» (اشاره به octocat که نماد گیت هاب است) منتشر می شه پایتون از جاوا جلو زده و بعد از جاوااسکریپت، دومین زبانی است که رپوزیتوری‌هاش بیشترین مشارکت رو جذب میکنن. البته پایتون سریعترین زبان در حال پیشرفت نیست. این رکورد متعلق به دارت است که امسال ۵۳۲ درصد پیشرفت داشته - منطقا به خاطر فلاتر که فریمورک کراس پلتفرم گوگل است. رتبه بعدی مربوط می‌شه به راست که ۲۳۵ درصد پیشرفت کرده. پیشرفت پایتون در این یکسال ۱۵۱ درصد بوده که برای زبانی که پیش از این هم جزو ۳ زبان برتر ماجرا بوده، پیشرفت بسیار قابل ملاحظه‌ای است.صدر جدول مشارکت کنندگان هم که به جاوااسکریپت اختصاص داره که منطقی هم هست: تقریبا صد در صد فرانت اند وب با این زبان کار شده و کتابخانه های عظیم مرتبطش، اونو حالا حالاها در جایگاه اول نگه خواهد داشت.</description>
                <category>پایتونی شو !</category>
                <author>Jadi Mirmirani</author>
                <pubDate>Sun, 10 Nov 2019 16:36:05 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش سوکت در پایتون</title>
                <link>https://virgool.io/pythonisho/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D8%B3%D9%88%DA%A9%D8%AA-%D8%AF%D8%B1-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-rs8nstrsswnm</link>
                <description>کتابخانه سوکت چیست؟آموزش برنامه نویسی Socket در زبان Python : در این نوشته و همچنین بخش های بعدی این نوشته می‌خواهیم برنامه نویسی Socket به زبان برنامه نویسی Python را یاد بگیریم!برنامه نویسی تحت شبکه(Socket Programming)، به هر نوع برنامه ای میگویند که کامپیوتر شما باید به یک کامپیوتر دیگر دور از خود وصل شود و با آن ارتباط داشته باشد.کمی درباره برنامه نویسی سوکتوقتی میخواهیم از سوکت استفاده کنیم، کامپیوتر های متصل به هم، به دو نوع تقسیم میشوند:سرورکلاینتسرور به زبان عامیانه، یعنی کامپیوتر اصلی؛ یعنی اون کامپیوتری که همه بهش وصل میشن.کلاینت هم برعکس سرور هست؛ یعنی اینکه به هیچ کلاینت دیگری نمیتواند وصل شود و باید به یک سرور وصل شود.سرور : کامپیوتر اصلی است و همه به آن وصل می‌شوند.کلاینت : کامپیوتر کاربر است و میتواند به یک سرور وصل شود.نکته :معمولا در این نوع برنامه نویسی از هر دو سمت کلاینت و سرور برای جابه‌جایی داده ها بهره گرفته می‌شود. یعنی هم سرور میتواند به کلاینت هایش پیام بدهد و هم کلاینت ها میتوانند به سرور پیام بدهند.چجوری کدش رو بزنیم؟در اولین گام، باید کتابخانه سوکت رو صدا بزنیم.import socketدر گام دوم، باید از روی کتابخانه socket یک شی بسازیم. زیر دیپلمش میشه این: &quot;یه کپی از روی کتابخونه سوکت بگیریم و داخل یه متغییر بریزیم&quot;s = socket.socket()حالا باید یه پورت و شماره ای پی رو برای خودمون بکنیم.s.bind((&#039;Your ip&#039;, &#039;Your Port&#039;))برای اینکه شماره ip لپ تاپتون رو پیدا کنیم، برین توی cmd. بعدش متن زیر رو توی cmd بنویسین. البته این رو باید بدونید که ip کامپیوتر، یه عدد متغییره! یعنی هرچند وقت یکبار عوض میشه. پس هر بار خواستین یه برنامه با سوکت بنویسید، ip تون رو چک کنید.(ip های ثابت، پولی هستند.)ipconfigبعد از آن اینتر را بزنید. با صفحه زیر مواجه میشود:ای پی کامپیوتر رو پیدا کردین.حالا عدد هایی که در کادر قرمز وجود دارد را به کد زیر اضافه کنید.s.bind((&#039;192.168.1.51&#039;, &#039;Your Port&#039;))تا حالا ما ای پی‌مون رو پیدا کردیم. حالا نوبت پر کردن فیلد پورته!پورت عددی نیست که مثل ای پی ثابت باشه؛ یعنی شما میتونین هر بار یه عدد دیگه جاش بذارین. مثل این میمونه که شماره تلفنتون رو چند وقت یه بار عوض کنید؛ شما عوض نمیشید، فقط شمارتون عوض میشه.معمولا برای شماره پورت، عدد 8000 رو انتخاب میکنیم؛ چون توی اتصال انگار قوی تر عمل میکنه؛ خودم هم نمیدونم چرا، ولی 8000 به بالا رو انتخاب کنید.s.bind((&#039;192.168.1.51&#039;, 8000))نکته: bind کردن به معنی رزرو کردن هست؛ یعنی ما جایی را(ای پی) با یک شماره تلفن(پورت)، رزرو می‌کنیم.s.listen()کد نوشتن کد بالا، برنامه درخواست کامپیوتر را منتشر میکند تا کامپیوتر های دیگر بتوانند به آن وصل شوند.حالا میریم تا کد سرور و کلاینت رو بنویسیم.برنامه نویسی سوکت - کد سرور:)import socket
s = socket.socket()
port = 8000
ip = &#039;192.168.1.51&#039;
s.bind((ip, port))
s.listen()
c, addr = s.accept()
print(&#039;Connected&#039;)
while True:
    message = input(&#039;Your Message : &#039;)
    c.send(message.encode())
    print(c.recv(1024).decode())برنامه نویسی سوکت - کد کلاینت:)import socket
s = socket.socket()
port = 8000
ip = &#039;192.168.1.51&#039; #IP کامپیوتر سرور
s.connect((ip, port))
print(&#039;Connected&#039;)
while True:
    print(s.recv(1024).decode())
    message = input(&#039;Your Message : &#039;)
    s.send(message.encode())پیشنهاد من برای شما: آموزش جذاب سلنیوم: https://dataio.ir/what-is-selenium-and-what-does-it-do-djqzb7a8gw1y سوال هایتان را در قسمت کامنت ها مطرح کنید</description>
                <category>پایتونی شو !</category>
                <author>اشکان جلالی</author>
                <pubDate>Sat, 02 Nov 2019 20:02:26 +0330</pubDate>
            </item>
            </channel>
</rss>