<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های اشکان جلالی</title>
        <link>https://virgool.io/feed/@ashkanjalaliq</link>
        <description>&quot;آن کس که نداند و بداند که نداند&quot; هستم</description>
        <language>fa</language>
        <pubDate>2026-06-16 16:54:39</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/51642/avatar/Kdv6aw.jpeg?height=120&amp;width=120</url>
            <title>اشکان جلالی</title>
            <link>https://virgool.io/@ashkanjalaliq</link>
        </image>

                    <item>
                <title>کتابخانه سلنیوم چیه و چیکار میکنه؟(قسمت دوم)</title>
                <link>https://dataio.ir/what-is-selenium-and-what-does-it-do-djqzb7a8gw1y</link>
                <description>سلام بر همگیتوی این قسمت میخوایم کمی بیشتر با کتابخانه سلنیوم آشنا شویم.اگر با کتابخانه requests کار کرده باشید، شما فقط صحنه را میبینید و خبری از پشت صحنه ندارید. منظورم از پشت صحنه، صفحه وبسایت هست. یعنی اگر با کتابخانه requests به یک سایت درخواست بدهید، نمیتوانید ببینید که سایت در چه صفحه ای هست... نمیتوانید ببینید آیا متن های سایت تغییر کرده یا نه... فقط و فقط میتوانید درخواست بدهید و نتیجه رو در قالب کد html ببینید.اما کتابخانه سلنیوم کاملا با کتابخانه requests فرق دارد. در سلنیوم هم صحنه معلومه هم پشت صحنه. یعنی یک صفحه مرورگر باز میشود(کروم، فایرفاکس و...)، آدرسی که شما دادید رو سرچ میکنه و کاری که بهش گفتید رو براتون انجام میده. شما همه این کار ها رو به چشم میبینید تا اگر اشتباهی پیش اومده بود، سریع متوجه شوید. البته که سلنیوم از requests کندتره. ولی قابلیت هایی سلنیوم به ما میده، راحت تر هستن.نکته : توی سلنیوم، چیزی به نام driver وجود داره که مثل یه browser معمولی میمونه با این تفاوت که به ما اجازه جستجو توی اینترنت رو میده. وقتی میخواهیم driver هارو از کتابخانه سلنیوم import کنیم، به این صورت مینویسیم:from selenium import webdriverدر مرحله بعدی driver مون رو انتخاب میکنیم. یعنی انتخاب میکنیم که driver مون فایرفاکس باشه یا کروم یا ...ما کروم رو انتخاب میکنیم:path = &amp;quotpath/chromedriver.exe&amp;quot
driver = webdriver.Chrome(path)حواستون باشه که path رو بهش بدین. منظورم از path، آدرس فایل driver کروم هست.از اینجا میتوانید دانلودش کنید. https://drive.google.com/file/d/1kNYqRV8a1sAO8yypJyZ2J4LqXYwvQmIA/view?usp=sharing  https://drive.google.com/file/d/1kNYqRV8a1sAO8yypJyZ2J4LqXYwvQmIA/view?usp=sharing دیجیکالاتا اینجای که چیز خاصی نگفتیم. حالا میخوایم با انجام یک کار، کلیت کار رو متوجه بشیم. پروژه ای که میخوایم انجام بدیم، اینه که با استفاده از کتابخانه selenium وارد سایت دیجی کالا بشیم و یه گوشی ارزون قیمت بخریم:از ایناخب بیاید کارهایی که باید برای رسیدن به این عزیز انجام بدیم رو لیست کنیم:به صفحه خرید این محصول در دیجیکالا برویم.این محصول رو به سبد خریدمان اضافه کنیم.وقتی صفحه ورود دیجیکالا بالا آمد، آنرا پر کنیم و وارد شویم.وارد صفحه &quot;آدرس و زمان ارسال&quot; شویم و محل تحویل کالا رو مشخص کنیم.نزدیک ترین زمان تحویل کالا رو مشخص کنیم.در صفحه پرداخت، گزینه پرداخت در محل را انتخاب کنیم.دکمه ثبت سفارش را میزنیم و تمام!خب بریم کدش رو بزنیم:به صفحه خرید این محصول در دیجیکالا برویم.برای انجام این کار،  از کتابخانه سلنیوم، webdriver رو فراخوانی میکنم.from selenium import webdriverحالا کروم رو به عنوان driver مون انتخاب میکنم.path = &#039;chromedriver.exe&#039;
driver = webdriver.Chrome(path)در مرحله بعدی باید وارد صفحه کالا بشیم. پس در متغییر product_url، آدرس صفحه محصولمون رو میذاریم.product_url = &amp;quothttps://www.digikala.com/product/dkp-2062198/%DA%AF%D9%88%D8%B4%DB%8C-%D9%85%D9%88%D8%A8%D8%A7%DB%8C%D9%84-%D8%A7%D9%BE%D9%84-%D9%85%D8%AF%D9%84-iphone-11-a2223-%D8%AF%D9%88-%D8%B3%DB%8C%D9%85-%DA%A9%D8%A7%D8%B1%D8%AA-%D8%B8%D8%B1%D9%81%DB%8C%D8%AA-128-%DA%AF%DB%8C%DA%AF%D8%A7%D8%A8%D8%A7%DB%8C%D8%AA&amp;quotو در مرحله بعدی با استفاده از دستور زیر وارد صفحه محصول میشویم:driver.get(product_url)وقتی کدمون رو اجرا کنیم، با همچین چیزی مواجه میشیم:میبینید که یه صفحه دقیقا شبیه کروم باز میشه ولی هیچکدوم از اطلاعات شما درونش نیست. اگر یک بار دیگه واردش بشید، تاریخچه(history) پاک میشه. یه چیزی شبیه incognito کروم هست. با این تفاوت که میتوانید اون رو با پایتون کنترل کنید.این محصول رو به سبد خریدمان اضافه کنیم.ما برای اینکه این محصول رو به سبد خریدمون اضافه کنیم، باید چیکار کنیم؟جوابش خیلی ساده ست. باید روی دکمه &quot;افزودن به سبد خرید&quot; کلیک کنیم. حالا این رو چطوری به سلنیوم بفهمونیم؟ برای اینکه بفهمیم که چطوری به سلنیوم همچنین چیزی رو بفهمونیم، باید یه چیزایی رو بدونیم.شبه زبان html و ویژگی های اونما انسان ها خوندن و نوشتن بلدیم و هوش داریم. برای همین میتونیم بفهمیم که اگر روی دکمه &quot;افزودن به سبد خرید&quot;، کلیک کنیم، چه اتفاقی می افته. پس ما بیشتر اوقات از روی متن دکمه، متوجه کارایی اون میشیم.ولی کامپیوتر همچنین هوشی نداره(البته میتونه داشته باشه ولی توی این کار، اصلا بهینه نیست). پس باید به زبان خودش، جایگاه دکمه رو بهش بگیم.3 کلید ctrl + shift + i رو همزمان با هم فشار میدهیم. با یه همچنین صفحه ای روبرو میشیم(inspect):همونطور که میبینید سمت راست کد های html و css صفحه برای ما نمایش داده میشود. اگر یه نگاهی به هر کدام از tag ها بندازید، متوجه میشوید که تقریبا همه‌شان دارای attribute(صفت) هستند. یا دارای id هستند یا دارای class یا...از روی این ویژگی ها میتوانیم به کامپیوتر بفهمانیم که منظورمان کجا و چی هست. پس دنبال اون قسمت از کد میگردیم که مربوط به دکمه &quot;افزودن به سبد خرید&quot; هست.3 کلید ctrl + shift + c رو همزمان با هم فشار میدهیم و بعد روی دکمه &quot;افزودن به سبد خرید&quot; کلیک میکنیم:همونطور که کد هارو میبینید، قسمت انتخاب شده مربوط به جایی هست که ما رویش کلیک کردیم. یعنی همان دکمه &quot;افزودن به سبد خرید&quot;.به صفت class دکمه یه نگاهی بی اندازید. حدود 5 تا class داره(اگر درست گفته باشم). اولیشو کپی میکنیم و به کار قبلی مان ادامه میدیم.آخرین کدی که زده بودیم این بود: from selenium import webdriver
import time

path = &#039;chromedriver.exe&#039;
driver = webdriver.Chrome(path)

product_url = &amp;quothttps://www.digikala.com/product/dkp-2062198/%DA%AF%D9%88%D8%B4%DB%8C-%D9%85%D9%88%D8%A8%D8%A7%DB%8C%D9%84-%D8%A7%D9%BE%D9%84-%D9%85%D8%AF%D9%84-iphone-11-a2223-%D8%AF%D9%88-%D8%B3%DB%8C%D9%85-%DA%A9%D8%A7%D8%B1%D8%AA-%D8%B8%D8%B1%D9%81%DB%8C%D8%AA-128-%DA%AF%DB%8C%DA%AF%D8%A7%D8%A8%D8%A7%DB%8C%D8%AA&amp;quot 

driver.get(product_url)حالا باید با استفاده از سلنیوم، دکمه ای رو با کلاس btn-add-to-cart انتخاب میکنیم:button = driver.find_element_by_class_name(&amp;quotbtn-add-to-cart&amp;quot)با کد بالا، دکمه مورد نظر رو پیدا میکنیم. حالا باید رویش کلیک کنیم:button.click()بعد از اجرای کد بالا با همچنین چیزی مواجه میشویم:حالا باید روی دکمه &quot;ادامه فرآیند خرید&quot; کلیک کنیم. مثل قبل صفت class اون رو پیدا میکنیم و کد زیر رو مینویسیم:button = driver.find_element_by_class_name(&amp;quoto-btn&amp;quot)
button.click()وقتی کد بالا رو اجرا میکنیم، ارور دریافت میکنیم:(چرا باید ارور بگیریم؟ ارور به ما میگه که سلنیوم نمیتونه مشخص کنه که اونجایی که ما مشخص کردیم دقیقا کجاست.این ارور معمولا یه دلیل داره. دلیلش اینه که یک tag دیگه توی این صفحه وجود داره که class ش برابر o-btn هست. برای همین نمیدونه باید کدوم رو انتخاب کنه. اینجا یه چیز جدید میاد و دستمون رو میگیره. فرشته نجات!با استفاده از xpath بدون نیاز به class و id و... میتونید جای دقیق یک تگ رو مشخص کنید.به این صورت xpath یک تگ رو پیدا میکنید:مثل بالا، با استفاده از ctrl + shift + c تگ دکمه رو پیدا میکنیم. بعد از آن روی تگ کلیک راست میکنیم. بعدش از آن روی گزینه &quot;Copy&quot; کلیک میکنیم. در آخر هم روی گزینه &quot;Copy Xpath&quot; کلیک میکنیم.مثل این باید باشه : //*[@id=&quot;cart-data&quot;]/div[1]/div[1]/aside/div/div[1]/ul/li[4]/aوارد پایتون میشویم و کد زیر رو وارد میکنیم:time.sleep(5)
driver.find_element_by_xpath(&#039;//*[@id=&amp;quotcart-data&amp;quot]/div[1]/div[1]/aside/div/div[1]/ul/li[4]/a&#039;).click()شاید براتون سوال باشه که چرا من از دستور time.sleep استفاده کردم؟جوابش اینه که اینکار رو کردم که صفحه به صورت کامل لود بشه و بعد بره سراغ بقیه کار ها. اگر صفحه به صورت کامل لود نشود و ما کاری رو انجام بدیم(مثلا یک فرم رو پر کنیم و اینتر رو بزنیم)، کاری انجام نمیشه و شاید ارور هم بده.حالا اگر کد رو اجرا کنیم، با همچین چیزی روبرو میشیم:خروجیتا اینجای کار تونستیم به صفحه ورود دیجیکالا برسیم.وقتی صفحه ورود دیجیکالا بالا آمد، آنرا پر کنیم و وارد شویم.حالا باید فرم ورود دیجیکالا رو پر کنیم. برای اینکار باز هم مثل قبل باید با استفاده از class یا id یا xpath یا... تگ input مربوط به صفحه ورود رو پیدا کنیم.صفحه ورود دیجیکالابا استفاده از ctrl + shift + i وارد کد سایت میشویم و سپس ctrl + shift + c را فشار میدهیم. بعد از آن فیلد &quot;شماره موبایل یا پست الکترونیک&quot; را انتخاب میکنیم.همونطور که میبینید، کد خاکستری رنگ، مربوط به فیلد &quot;شماره موبایل یا پست الکترونیک&quot; است. صفت name این تگ، برابر &quot;login[email_phone]&quot; است. میتونیم با استفاده از name تگ‌مان، آن را پیدا و سپس پر کنیم.email = &amp;quota.jalali2005@gmail.com&amp;quot
field = driver.find_element_by_name(&#039;login[email_phone]&#039;)حالا باید عبارتی که داخل متغییر email هست را به تگ input صفحه بفرستیم. برای این کار از کد زیر استفاده میکنیم:field.send_keys(email)دستور send_keys میتواند مقداری را که دریافت میکند، به تگ مورد نظرمان بفرستد. البته تگ حتما باید آن چیز را قبول کند. مثلا نمیتوان مقدار &quot;سلام&quot; رو به یک تگ بفرستید که اصلا ورودی نداره(مثل &lt;p&gt;).پس از اینکه ایمیل را به تگ مربوطه ارسال کردیم، باید دکمه &quot;ادامه&quot; را بزنیم.برای اینکار xpath آن را پیدا میکنیم و با استفاده از دستور click() روی آن کلیک میکنیم. driver.find_element_by_xpath(&#039;//*[@id=&amp;quotloginForm&amp;quot]/button&#039;).click()حالا که روی دکمه ادامه کلیک کردیم، وارد صفحه رمزعبور میشویم:باید رمزعبورمان رو وارد کنید و بعدش دکمه ورود رو بزنیم. پس کدش رو میزنیم:time.sleep(2)
password = &amp;quot********&amp;quot
driver.find_element_by_name(&#039;login[password]&#039;).send_keys(password)
driver.find_element_by_xpath(&#039;//*[@id=&amp;quotauthForm&amp;quot]/button&#039;).click()و بعد بالاخره به صفحه طلایی میرسیم:همونطور که میبینید، توی دکمه قرمز رنگ، متن &quot;برای ادامه، زمان ارسال تعیین کنید&quot; را نوشته است. دقیقا رسیدیم به طولانی ترین جا:)باید همه روز هارو از اول تا آخر چک کنیم که آیا تکمیل شده اند یا نه. پس از اون، نزدیک ترین روز رو انتخاب میکنیم و ادامه میدهیم.البته این قسمت از ماجرا برای قسمت بعدی این آموزش هست.آخرین بروزرسانی : امروزمنتظر قسمت بعدی باشید...</description>
                <category>اشکان جلالی</category>
                <author>اشکان جلالی</author>
                <pubDate>Mon, 14 Sep 2020 20:26:41 +0430</pubDate>
            </item>
                    <item>
                <title>کتابخانه سلنیوم چیه و چیکار میکنه؟(قسمت اول)</title>
                <link>https://virgool.io/@ashkanjalaliq/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-%D8%B3%D9%84%D9%86%DB%8C%D9%88%D9%85-%DA%86%DB%8C%D9%87-%D9%88-%DA%86%DB%8C%DA%A9%D8%A7%D8%B1-%D9%85%DB%8C%DA%A9%D9%86%D9%87%D9%82%D8%B3%D9%85%D8%AA-%D8%B5%D9%81%D8%B1%D9%85-tgzor7k35nmo</link>
                <description>سلام بر دوستداران سلنیومتوی این قسمت میخوایم کتابخانه سلنیوم رو نصب کنیم. از اونجایی که میخوایم کتابخانه سلنیوم رو توی پایتون استفاده کنیم، پس باید پایتون رو هم نصب کرده باشیم.وارد سایت پایتون میشید. روی گزینه downloads کلیک میکنید. حالا باید با توجه به مشخصات سیستمتون، یکی از اون نسخه هارو نصب کنید.وبسایت پایتونبرای نصب کردن پایتون، فقط روی next بزنید. بعدش روی install و در آخر هم روی finish کلیک کنید.وقتی که پایتون نصب شد، idle را باز کنید:حالا که پایتون نصب شد، باید لایبرری سلنیوم را نصب کنیم.وارد cmd یا terminal میشویم و دستور زیر را وارد میکنیم:pip install seleniumاگر دستور بالا کار نکرد، این دستور را وارد کنید:pip3 install seleniumبعد از اینکه عملیات نصب انجام شد، وارد idle میشویم و کد زیر را مینویسیم:import seleniumاگر کتابخانه رو به درستی نصب کرده باشیم، باید یه همچنین خروجی به ما نشون بده(خروجی=هیچی):قسمت بعدی و البته جذاب? https://dataio.ir/what-is-selenium-and-what-does-it-do-djqzb7a8gw1y نظرات خود را در بخش نظرات مطرح کنید</description>
                <category>اشکان جلالی</category>
                <author>اشکان جلالی</author>
                <pubDate>Sat, 12 Sep 2020 18:45:58 +0430</pubDate>
            </item>
                    <item>
                <title>نور چیست؟ - قسمت دوم</title>
                <link>https://virgool.io/@ashkanjalaliq/%D9%86%D9%88%D8%B1-%DA%86%DB%8C%D8%B3%D8%AA-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-iskx2lbtxxib</link>
                <description>سلامی مجدد به شما.توی این قسمت از سری &quot;نور چیست؟&quot; میخوایم به بحث شکست نور بپردازیم. پس بررریم که داشته باشیم...شکست نور چیست؟چیزی که ویکی پدیا میگه اینه : شکست نور یک پدیده نورشناسی است که در آن نور رسیده از یک منبع نورانی (مانند لامپ، خورشید و ستارگان) به خاطر تغییر سرعت در دو محیط با ضریب شکست متفاوت تغییر مسیر می‌دهد. هنگامی که شخص به این نور نگاه می‌کند گویی که نور دچار شکست شده‌است.یکم فارسی تر :در واقع شکست نور باعث کند شدن سرعت نور میشود. نور زمانی که در خلا حرکت میکند، سرعتی حدود 300 میلیون متر بر ثانیه دارد. وقتی که پرتوی نور از خلا وارد محیطی مثل آب میشود، شکسته میشود؛ زیرا آب از خلا غلیظ تر است؛ پس یعنی سرعت نور در آب باید کمتر از خلا باشد.زمانی که نور از جایی وارد یک محیط غلیظ تر یا یک محیط رقیق تر میشود، شکست نور اتفاق می‌افتد.وقتی نور از محیط رقیق تری مثل هوا وارد محیط غلیظ‌تری مانند آب میشود، مانند شکل مسیرش تغییر میکند و مقداری از مسیر اصلی اش فاصله میگیرد.شکست نوربد نیست بدونی!حالا شاید از خودتان بپرسید پس چه فرقی میان آب و الماس دارد. یعنی چطور میتوانیم بفهمیم که نور در آب یا الماس چقدر شکسته میشود.هر محیط شفافی که نور بتواند از آن عبور کند، یک ضریب شکست دارد. با استفاده از ضریب شکست میتوانیم تشخیص دهیم که نور در چه حد شکسته میشود.فرمول ضریب شکست نورکاهش قد با رفتن به استخر!آیا از بلندی قد خود رنج میبرید؟! با رفتن به استخر، قد خود را، البته از دید ناظران بیرون استخر، کوتاه کنید! چگونه؟!شکست نور در استخر(مثلاً!!)به علت شکست نور، عمق یک استخر کمتر از آن چیزی که هست دیده میشود. همانطور که گفتیم چشم ما تصویر جسم را در امتداد پرتوهایی که وارد چشم میشوند میبیند!(نگفتیم:) ولی حالا بدونید) به ارتفاع آب درون استخر، عمق واقعی و به عمقی که از بیرون مشاهده میشود عمق ظاهری میگویند.در واقع زمانی که به یک جسم درون یک استخر نگاه میکنیم، جسم را بالاتر از چیزی که هست میبینیم. زیرا چشم ما تصویر جسم را در امتداد پرتوهایی که وارد چشم میشوند میبیند!(شکل بالا رو ببینید)تبلیغات بارزگانی...یه عکس باحال از شکست نوریه آزمایش باحال با سکه و لیوانموارد مورد نیاز :یک لیوان غیرشفافیک سکهآبیک عدد آدمی زاد سالمزمانیک لیوان غیرشفاف را بردارید و یک سکه را در آن بی‌اندازید. آدمی زاد را جلوی لیوان بیاورید و تا زمانی که سکه را درون لیوان میبیند، آن را از لیوان دور کنید.سپس در لیوان آب بریزید. به نظرتون چه اتفاقی می‌افتد؟به دلیل شکست نور(شکل بالا رو ببینید)، میتوانیم سکه را ببینیم. یعنی شکست نور در این آزمایش باعث میشود که ما سکه را بالاتر از چیزی که هست ببینیم.این داستان ادامه دارد...</description>
                <category>اشکان جلالی</category>
                <author>اشکان جلالی</author>
                <pubDate>Sun, 17 May 2020 15:37:45 +0430</pubDate>
            </item>
                    <item>
                <title>اثبات قضیه فیثاغورس به زبان آدمی‌زاد</title>
                <link>https://virgool.io/@ashkanjalaliq/%D8%A7%D8%AB%D8%A8%D8%A7%D8%AA-%D8%B1%DB%8C%D8%A7%D8%B6%DB%8C%D8%A7%D8%AA%DB%8C-%D9%82%D8%B6%DB%8C%D9%87-%D9%81%DB%8C%D8%AB%D8%A7%D8%BA%D9%88%D8%B1%D8%B3-um3cvn6ajjqd</link>
                <description>اسمش رو میذارم &quot;مثلث در مثلث&quot;:)تا حالا براتون سوال شده که چرا در مثلث قائم‌الزاویه، رابطه زیر برقراره؟یک مثلث قائم‌الزاویهرابطه موجود در مثلث قائم‌الزاویهدر مثلث قائم الزاویه، وتر به توان دو، برابر ضلع دوم به توان دو به علاوه ضلع سوم به توان دو است.(وتر = c, ضلع دوم = a, ضلع سوم = b).حالا میخوایم این قضیه رو اثبات کنیم و بفهمیم که چطور میتونیم با استفاده از یک مثلث ساده به این رابطه دست پیدا کنیم.یک مربع مثل شکل زیر میکشیم:(هر ضلع برابر a + b است)مربع به ضلع a + bحالا مانند شکل زیر مثلث اولیه را در مربع قرار میدهیم:ما برای حساب کردن مساحت این مربع دو حالت داریم:مساحت چهار مثلث + مساحت مربع داخلیضلع مربع بزرگ به توان دوحالا اولین حالت را حساب میکنیم(مساحت چهار مثلث + مساحت مربع داخلی):مرحله اولمرحله دومحالا دومین حالت را حساب میکنیم(ضلع مربع بزرگ به توان دو):مرحله اولمرحله دومپس یعنی جواب این دو حالت باید با هم برابر باشند. پس یعنی:معادله نهاییدر معادله بالا 2ab سمت چپ با 2ab سمت راست ساده می‌شود:جواب نهایی و تاماااامخب به جواب نهایی رسیدیم. ساده بود ولی جالب!سوال های خودتان را در بخش نظرات بنویسید. حتما میخونم:)</description>
                <category>اشکان جلالی</category>
                <author>اشکان جلالی</author>
                <pubDate>Wed, 13 May 2020 01:41:39 +0430</pubDate>
            </item>
                    <item>
                <title>نور چیست؟ - قسمت اول</title>
                <link>https://virgool.io/@ashkanjalaliq/%D9%86%D9%88%D8%B1-%DA%86%DB%8C-%DA%86%DB%8C%D9%87-%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-kthgby48vqlc</link>
                <description>سلامی دوباره به همگی.توی این قسمت میخواهیم به مبحث نور بپردازیم و ببینیم که نور چیکار میکنه، چطوری کار میکنه، چه چیزی بوجود میاره و اینکه چطور میشه با استفاده از چند فرمول ساده، باهاش مسئله حل کرد.من توی این بحث، جلوی استادان فیزیک حرفی برای گفتن ندارم. یعنی کسی نیستم که بخوام با استادان فیزیک مباحثه کنم. این آموزش هم کلا برای این بود که بتونم چیزی رو که یاد گرفتم برای شما خوانندگان توضیح بدم.تاریخچه نور چیه و از کجا شروع شده؟قبل از هر چیزی باید بدانیم که نور همیشه در یک خط مستقیم حرکت می‌کند! در سال های پیش، وقتی شما به دنیا نیامده بودید، اقلیدوس طی مشاهده هایش، متوجه شد که حرکت نور، یک حرکت خطی است. یعنی نور همیشه در یک خط مستقیم حرکت می‌کند.داستان از جایی شروع شد، که دانشمندی در قرن 5 قبل از میلاد به نام امپدکلس، نظریه ای درباره نور داد.او میگفت : وقتی ما به جسمی نگاه می‌کنیم، از چشم ما، پرتوهایی از نور به سمت جسم می‌روند و به جسم برخورد می‌کنند؛ سپس آن جسم برای ما قابل دیدن می‌شود.آیا با خواندن نظریه امپدکلس، برای شما سوالی پیش نمی‌آید؟خب اگر طبق نظریه امپدکلس جلو برویم، با یک خطا مواجه می‌شویم و میتوانیم این نظریه رو رد کنیم!!اگر این طور باشد که امپدکلس می‌گوید، پس چطور ما در شب به خوبی روز نمیتوانیم اجسام را ببینیم؟پس یعنی این نظریه غلط میشود.بعد از چند وقت امپدکلس دوباره نظریه ای داد.(مطمئن نیستم خودش بود یا نه:))او میگفت : نور هم از چشم ما به جسم می‌رسد و هم از یک منبع نور(مثل خورشید)! بعد این دو با هم واکنش می‌دهند و آن جسم قابل دیدن می‌شود!حالا رد کردن این نظریه به سادگی رد کردن نظریه اول نیست! ولی خب باید این رو بدانیم که باز هم این نظریه غلط است. دلیلش هم این است از چشم ما پرتویی آزاد نمی‌شود.خب ببینم این قسمت رو خوب یاد گرفتین یا نه?. به سوال تستی زیر جواب بدین ببینم.مثال : هنگامی میتوانیم یک جسم را ببینیم که...پرتو از چشم ما به جسم می‌رسد.پرتو از جسم به چشم ما می‌رسد.پرتوهای نور در محیط وجود داشته باشند.پرتوهای نور از محیط به جسم برسند.گزینه اول غلط است؛ برای اینکه چشم از خودش پرتوی نور آزاد نمی‌کند.گزینه دوم غلط است؛ برای اینکه جسم از خودش پرتوی نور آزاد نمی‌کند.گزینه سوم غلط است؛ برای اینکه وجود پرتوی های نور در محیط کافی نیستند؛ وقتی ما جسمی را میبینیم که پرتوی های نور هم در محیط باشند و هم به جسم برسند. در این صورت میتوانیم جسم را ببینیم.پس یعنی گزینه درست، گزینه چهار است.مراحل دیدن اجسام پرتوی نور از یک منبع نور آزاد می‌شود.به سطح اجسام برخورد می‌کند.از جسم به سوی چشم ما بازتاب می‌شود.چشم ما جسم را می‌بیند.تا اینجای کار ما تقریبا تاریخچه و کار نور رو شناختیم. حالا باید به مبحث بعدی بپردازیم؛ یعنی &quot;تشکیل سایه&quot;!!تشکیل سایه چیست و چگونه اتفاق می‌افتد؟به طور کلی، وقتی جسم کدری که نور از آن عبور نمی‌کند، روبروی پرتوهای نور قرار می‌گیرد، در پشت جسم، ناحیه تاریک بوجود می‌آید که به علت نرسیدن نور به آن، تاریک شده است. نام این قسمت تاریک &quot;سایه&quot; است!!با استفاده از سایه می‌توانیم نشان دهیم که نور در یک خط راست حرکت می‌کند! به مثال توجه کنید:ظهر است و شما بیرون رفته اید(البته الان بیرون نرین!! کرونا می‌گیرینا!!). به سایه خودتون توجه کنید. سایه شما دقیقا مانند خودتان است.(شاید بزرگ تر یا کوچک تر؛ شاید هم هم‌اندازه) اگر این اتفاق بی‌افتد، پس یعنی نور در یک خط راست حرکت می‌کند. اگر در یک خط راست حرکت نمی‌کرد، هیچوقت سایه شما شبیه خودتان نبود.سایه و نیم سایهبعضی وقت ها اگر به سایه تان نگاه کنید، میبینید که مثل قبل نیست. یعنی محیط آن کمی تار شده است.(این عکس اصلا مهم نیست! فقط به قسمت سایه و نیم سایه دقت کنید. اگر هم خواستید کلش رو ببینید. من محدودتون نمیکنم?)طول سایه یک جسمتوی فیزیک، با خیلی از مسائل آسون و سخت مواجه میشین؛ ولی یکی از مسئله های جذاب در فیزیک، سایه است. یعنی مثلا مسئله به ما یه اطلاعاتی رو میده و ما باید با استفاده از اون اطلاعات و چیزی که قراره الان یاد بگیریم، به جواب مسئله برسیم. برای فهم بهتر، یک مسئله حل می‌کنیم.قبل از اینکه به سراغ مسئله برویم، یک سوال از شما دارم. آیا میدونید فرمول ها از کجا می‌آیند؟شاید جوابش رو بدونید؛ شاید هم با خودتون میگید &quot;اینم سواله؟&quot;. ولی خب باید بگم، فهم فرمول ها که از کجا می‌آیند، به شما در حل مسئله خیلی کمک می‌کند.اول باید ببینیم که چه چیز هایی در تشخیص طول سایه یک جسم، موثر هستند:اندازه جسماندازه سایهفاصله جسم از منبع نورفاصله پرده(همان جایی که سایه به رویش می‌افتد) از منبع نوردانشمندانی قبل از ما، این کار را انجام دادند و فرمولشان به دست ما رسیده است. خب پس با استفاده از این فرمول، به سمت جوابمان می‌رویم.با انجام یک مثال ساده، به چگونگی فرمول بالا پی‌ می‌بریم:Oمثال : اگر فاصله یک منبع نور نقطه ای تا جسمی 5 سانتی‌متر و فاصله آن تا پرده 20 سانتی‌متر باشد، اندازه سایه جسمی به طول 4 سانتی‌متر روی پرده چقدر است؟به سادگی هر چه تمام تر و با کمک فرمول بالا، به جواب می‌رسیم:  https://virgool.io/@ashkanjalali/%D9%86%D9%88%D8%B1-%DA%86%DB%8C%D8%B3%D8%AA-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85-iskx2lbtxxib سوالات خود را در بخش نظرات بپرسید:)</description>
                <category>اشکان جلالی</category>
                <author>اشکان جلالی</author>
                <pubDate>Sat, 18 Apr 2020 01:47:06 +0430</pubDate>
            </item>
                    <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/%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/%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/@ashkanjalaliq/%D9%86%D9%88%D8%B1%D9%88%D9%86-%DA%86%DB%8C%D8%B3%D8%AA-qvoes9mrkgvs</link>
                <description>نورون ها همان سلول های عصبی بدمان هستند که اطلاعات را از داخل یا خارج بدن به مغز و نخاع می‌برند.هر نورون از قسمت هایی تشکیل شده که در شکل زیر میبینید.همینطور که میبینید، نورون از هشت قسمت اصلی تشکیل می‌شود.دندریتطبق چیزی که در ویکی پدیا گفته شده:دِندریتها زائده‌های رشته مانندی هستند که به جسم سلولی یاخته‌های عصبی (نورون‌ها)، متصل هستند. دِندریت‌ها نقشِ آورندۀ پیام‌های صادر شده از یاختۀ حسی مجاور یا یاخته‌های عصبی رده بالاتر به درون یاخته را به عهده دارند. این پیام‌های عصبی، به صورت سیگنال‌های الکتریکی در درازایِ دِندریت‌ها حرکت می‌کنند.چکیده توضیح بالا و یکم فارسی تر!: دندریت به قسمت بالایی نورون میگویند و جزو زواید(زایده ها) نورون حساب می‌شوند و پیغام عصبی را از نورون قبلی میگیرید؛ این پیام از این نورون رد میشود و به نورون بعدی داده میشود؛ این روند تا نخاع ادامه دارد و بعد از آن نخاع پیام عصبی را برای تحلیل به مغز میفرستد. آکسونپیام عصبی بعد از اینکه از نورون قبلی می آید و از رد میشود، وارد آکسون میشود. آکسون هم جزو زواید نورون به حساب می آید و دور آن را غلاف میلین پوشانده است.غلاف میلینغلاف میلین دور تا دور آکسون پیچیده است و عایق الکتریسته است و نمیگذارد پیام عصبی از داخل رد شود.غلاف شوآنغلاف شوآن، غلاف میلین را میسازد و به دور آکسون میپیچد.گره رانویهگره رانویه به فواصل آکسون گفته میشود که رسانای الکتریسته است و به پیغام عصبی اجازه رد شدن را میدهد.حالا با خودتون میگین که چجوریه که غلاف میلین رسانای الکتریسته نیست و گره رانویه رسانای الکتریسته است؛ پس چجوری پیام عصبی از نورون عبور میکند؟به این شکل که اول پیام عصبی وارد دندریت میشود و بعد از آن به صورت پرشی از جسم سلولی میگذرد و وارد آکسون میشود؛ میبینید که آکسون به آن اجازه عبور نمیدهد؛ پس کمی پرشش را بلندتر میکند؛ میبیند که بازهم نمیتواند؛ باز هم پرشش را بلندتر میکند؛ میبیند که...این روند تا وقتی که پیام عصبی به گره رانویه نرسد، ادامه دارد؛ وقتی که به گره رانویه رسید، گره رانویه به او اجازه رد شدن میدهد؛ بعد از آن دیگر به صورت خیلی بلند میپرد و به سرعت از اکسون عبور میکند.سوالات و نظرات خود را در قسمت کامنت ها مطرح کنید</description>
                <category>اشکان جلالی</category>
                <author>اشکان جلالی</author>
                <pubDate>Wed, 29 Jan 2020 23:07:44 +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>آموزش گرفتن اطلاعات با 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/%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>
                    <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-%D8%B3%D9%88%D9%85-jlmnoof7nrbz</link>
                <description>حلقه اصلی بازی چیست؟همانطور که در قسمت قبل گفتیم، هر بازی در یک حلقه بینهایت است و همه اتفاقات بازی درون این حلقه انجام میشود.نکته: تمام حلقه هایی که دربازی ها با عنوان حلقه اصلی استفاده میشود، بینهایت هستند؛ یعنی برنامه تا زمانی که کاربر برنامه را نبسته، به کار خود ادامه میدهد.کد زیر مثالی از یک بازی بسیار ساده است که در حلقه ای بینهایت قرار دارد.import pygame
pygame.init()
display = pygame.display.set_mode((400, 500))
pygame.display.set_caption(&#039;Simple Game&#039;)
while True:
    #دستورات برنامه#رویدادها (events) در بازیزمانی که ما یکی از دکمه های کیبورد را فشار میدهیم یا زمانی که با موس به جایی کلیک میکنیم، کتابخانه پایگیم با دستور زیر آن ها را دریافت میکند و ما میتوانیم با استفاده از آنها، به کاربر چیزی را نشان دهیم یا ...pygame.event.get()ما برای اینکه یکی از رویداد های بالا را متوجه شویم، به یک حلقه دیگر نیز نیاز داریم؛ این حلقه اطلاعات را میگیرد و اگر روی شرط های ما درست بود، کاری را که باید انجام میدهد.while True:
    for event in pygame.event.get():
        #ادامه دستورات#حالا میخواهیم داخل حلقه‌مان(حلقه for)، یک شرط برای خودمان تعریف کنیم.مثلا اگر کاربر روی دکمه خروج را کلیک کرد، برنامه بسته شود.حالا میخوایم انجامش بدیم.while True:
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        pygame.quit()خط 1: یک حلقه بینهایت برای بازی‌مان میسازیمخط 2: یک حلقه for میسازیم و این حلقه کلید هایی که کاربر وارد میکند را برای ما میفرستد.خط 3و 4: یک شرط تعریف میکنیم. آن هم این است که اگر کاربر (از طریق موس) روی دکمه خروج از برنامه رفت و روی آن کلیک کرد، از بازی خارج شو.تکلیف: برنامه ای بنویسید که هر موقع که من کلید &quot;t&quot; رو فشار دادم، پرینت کنه &quot;nazan dige!&quot; 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-%DA%86%D9%87%D8%A7%D8%B1%D9%85-wu0u2kx0dse4 اگر سوالی دارید در قسمت کامنت ها بپرسید.</description>
                <category>اشکان جلالی</category>
                <author>اشکان جلالی</author>
                <pubDate>Wed, 30 Oct 2019 22:26:28 +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-%D8%AF%D9%88%D9%85-xipltvws7zgs</link>
                <description>دستور های پایگیمبعد از نصب پایگیم بر روی کامپیوتر، وارد idle پایتون شوید و با این دستور کتابخانه پایگیم را فراخوانی کنید:import pygameبعد از وارد کردن این کد، برنامه را اجرا کنید. با اجرای این کد متوجه می‌شوید که پایگیم به درستی رو سیستم شما نصب شده یا نه.بعد از فراخوانی کتابخانه پایگیم، باید یک کد به برنامه خود اضافه کنید؛ شاید اصلا کارکرد آن را ندانید، ولی یکی از اصلی ترین بخش های پایگیم است.pygame.init()اصلا لازم نیست کارکرد کد بالا را بدانیداصلا لازم نیست کاردکرد آن را بدانید؛ در یک جمله کارکردش را خلاصه می‌کنم؛ &quot;خیلی سخخخخت&quot;!بعد از وارد کردن این کد به برنامه، نوبت ساخت یک صفحه برای بازیمان می‌شود. برای ساختن یک صفحه در پایگیم از کد زیر استفاده می‌کنیم.safhe_namayesh = pygame.display.set_mode((400, 500))کاری که کد بالا انجام می‌دهد، این است که یک متغییر با نام safhe_namayesh میسازد و مقدار یک صفحه بازی با اندازه های 400 و 500 را درون این متغییر می‌ریزد.حال برنامه را اجرا می‌کنیم. با صفحه سیاه رنگی روبه‌رو می‌شویم، که هیچ محتوایی ندارد.حال می‌خواهیم عنوانی برای پنجره باز شده انتخاب کنیم.می توانیم از کد زیر برای انتخاب یک عنوان برای بازیمان استفاده کنیم.pygame.display.set_caption(&#039;First Game&#039;)نکته : هر بازی یا برنامه ای توی یک حلقه بینهایت قرار دارد و همه کار ها درون این حلقه بینهایت انجام می‌شود. 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-%D8%B3%D9%88%D9%85-jlmnoof7nrbz قسمت کامنت منتظر نظر شماست!</description>
                <category>اشکان جلالی</category>
                <author>اشکان جلالی</author>
                <pubDate>Tue, 29 Oct 2019 14:54:22 +0330</pubDate>
            </item>
                    <item>
                <title>چطور توی پایتون بازی بسازیم؟ - قسمت اول</title>
                <link>https://virgool.io/pythonisho/how-to-learn-pygame-jfwhsa2xz7rv</link>
                <description>هر برنامه نویسی توی دنیا دوست داره یک بازی بسازه؛ چون جذابه!موتور هایی برای ساختن بازی وجود دارن که میتونن توی بازی سازی به شما کمک کنن. ولی ما میخوایم با استفاده از پایگیم، در پایتون بازی بسازیم.پایگیم چیست؟پایگیم(Pygame) یک کتابخانه در پایتون است که برنامه نویسان با استفاده از آن میتوانند بازی بسازند. اگر با پایتون کمی کار کرده باشید و اصول اولیه آن را بلد باشید، میتوانید به سادگی این آموزش را پشت سر بگذارید.نصب پایتونpython.orgدر اولین گام، ما باید پایتون را روی کامپیوترمان نصب کنیم. برای نصب پایتون، باید به سایت python.org بروید و با توجه به نسخه کامپیوترتان، پایتون را نصب کنید.نصب پایگیم بر روی ویندوزنصب پایگیم بر روی ویندوز بسیار ساده است. در اولین گام شما باید وارد CMD شوید و عبارت نوشته شده را بنویسید:pip install pygameبعد از حدود گذشت یک دقیقه پیغام نصب آن برای شما می‌آید.اگر از این آموزش خوشتان آمد، قسمت بعدی را نیز بخوانید. 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-%D8%AF%D9%88%D9%85-xipltvws7zgs </description>
                <category>اشکان جلالی</category>
                <author>اشکان جلالی</author>
                <pubDate>Mon, 28 Oct 2019 17:39:46 +0330</pubDate>
            </item>
            </channel>
</rss>