<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های دانیال رحیمی</title>
        <link>https://virgool.io/feed/@DanialRahimy</link>
        <description>https://www.linkedin.com/in/danial-rahimy</description>
        <language>fa</language>
        <pubDate>2026-04-15 10:16:54</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/691082/avatar/lTFglU.jpeg?height=120&amp;width=120</url>
            <title>دانیال رحیمی</title>
            <link>https://virgool.io/@DanialRahimy</link>
        </image>

                    <item>
                <title>بررسی آبجکت location در جاوا اسکریپت</title>
                <link>https://virgool.io/js-with-danial-rahimy/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%A2%D8%A8%D8%AC%DA%A9%D8%AA-location-%D8%AF%D8%B1-%D8%AC%D8%A7%D9%88%D8%A7-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-wtc1aruffvhb</link>
                <description>در این مطلب با همدیگه یکی از پر کاربرترین اشیاء (Object) جاوا اسکریپت را که اطلاعاتی در رابطه با URL کنونی صفحه به ما می دهد، مورد بررسی قرار می دهیم.پیش نیاز:آشنایی با جاوا اسکریپت به صورت مقدماتیبعد از مطالعه چه چیزی یاد می گیرم.می توانید کاربر را به URL های مختلف هدایت کنید.پورت URL را تغییر دهید.کوئری استرینگ URL را تغییر دهید.می توانید Id Anchor URL را تغییر دهید. و . . .همانطور که می دانید اشیاء جاوا اسکریپتی همگی در شی بزرگتری با نام window قرار دارند. در این صورت برای دسترسی به location می تواند به صورت مستقیم آن را صدا کرد یا با استفاده از شی window به آن دسترسی داشت. هر سه حالت زیر با یکدیگر برابر است و در ادامه جهت دسترسی راحت تر از location استفاده می کنیم.location;
window. location;
window. document. location;در طول این مقاله فرض می کنیم که آدرس صفحه مورد بررسی https://virgool.io:443/@DanialRahimy/بررسی-آبجکت-location-در-جاوا-اسکریپت-wtc1aruffvhb?param=value#identifierاست.در ابتدا به بررسی Property های شئ location می پردازیم و سپس Method های آن را بررسی می کنیم.بررسی Property هابررسی location.hrefاین Property شامل آدرس کامل صفحه فعلی کاربر می باشد که در اینجا به صورت زیر است.console.log(location.href)
// خروجی زیر را نمایش می دهد
// https://virgool.io/@DanialRahimy/بررسی-آبجکت-location-در-جاوا-اسکریپت-wtc1aruffvhb?param=value#identifierاین Property قابل ویرایش است که در صورت ویرایش کاربر به صفحه مورد نظر هدایت می شود. مانند زیر می توان آن را جایگزین کرد.location.href = &amp;quothttps://www.linkedin.com/in/danial-rahimy&amp;quotاکنون کاربر به آدرس https://www.linkedin.com/in/danial-rahimy هدایت می شود.بررسی location.protocolهمانطور که از نامش مشخص است پروتکل ارتباطی را نمایش می دهد که شامل : پایانی نیز می باشد.console.log(location.protocol)
// خروجی زیر را نمایش می دهد
// https:این Property نیز قابل ویرایش است و در صورت وارد کردن پروتکل معتبر، کاربر به آن آدرس هدایت می شود. می توان به صورت زیر کاربر را به نسخه http هدایت کرد اما ممکن است پیاده سازی سایت به صورتی باشد که کاربر همیشه به https هدایت شود پس شاید بررسی صحت این موضوع کار دشواری باشد. location.protocol = &amp;quothttp:&amp;quotاکنون کاربر به آدرس http://virgool.io/@DanialRahimy/بررسی-آبجکت-location-در-جاوا-اسکریپت-wtc1aruffvhb?param=value#identifierهدایت می شود.بررسی location.hostnameاین Property آدرس کامل دامنه (در صورت وجود به همراه subdomain) نمایش می دهد.console.log(location.hostname)
// خروجی زیر را نمایش می دهد
// virgool.ioاین Property نیز قابل ویرایش است و در صورت ویرایش مقدار location.hostname در آدرس URL جایگزین می شود و باقی آدرس از URL مانند قبل باقی ماند. به کد زیر توجه کنید.location.hostname = &amp;quottest.com&amp;quotاکنون کاربر به https://test.com/@DanialRahimy/بررسی-آبجکت-location-در-جاوا-اسکریپت-wtc1aruffvhb?param=value#identifierهدایت می شود چون مقدار location.hostname قبلی virgool.io بود و فقط همین مقدار با test.com جایگزین می شود که نتیجه آن هدایت کاربر به آدرس بالا است.بررسی location.portاین Property شماره پورت را نمایش می دهد.console.log(location.port)
// خروجی زیر را نمایش می دهد
// 443این Property نیز قابل ویرایش است و در صورت ویرایش مقدار location.port در آدرس URL جایگزین می شود و باقی آدرس از URL مانند قبل باقی ماند. به کد زیر توجه کنید.location.port = 8080اکنون کاربر به https://virgool.io:8080/@DanialRahimy/بررسی-آبجکت-location-در-جاوا-اسکریپت-wtc1aruffvhb?param=value#identifierهدایت می شود چون مقدار location.port قبلی 443 بود و فقط همین مقدار با 8080 جایگزین می شود که نتیجه آن هدایت کاربر به آدرس بالا است. چون این برای پورت از طرف سرور سایت مورد نظر که در این جا ویرگول است پاسخی دریافت نمی شود. محتوایی نیز جهت نمایش وجود ندارد.بررسی location.hostاین Property آدرس کامل دامنه (در صورت وجود به همراه sub domain) به همراه پورت را نمایش می دهد.console.log(location.host)
// خروجی زیر را نمایش می دهد 
// virgool.io:443این Property نیز قابل ویرایش است و در صورت ویرایش مقدار location.host آدرس URL جایگزین می شود و باقی آدرس از URL مانند قبل باقی ماند. نکته قابل توجه در این مورد این است که می توان فقط مقدار port یا فقط مقدار location.hostname و یا همچنین می توان هر دو را تغییر داد. به کد زیر توجه کنید.location.host = &amp;quottest.com:8080&amp;quot
// تغییر پورت و نام هاست
// کاربر به آدرس زیر هدایت می شود
// https://test.com:8080/@DanialRahimy/بررسی-آبجکت-location-در-جاوا-اسکریپت-wtc1aruffvhb?param=value#identifierبررسی location.searchدر این Property مقدار query string موجود در URL ذخیره شده است.console.log(location.search)
// خروجی زیر را نمایش می دهد
// ?param=valueاین Property نیز قابل ویرایش است و در صورت ویرایش مقدار location.search آدرس URL جایگزین می شود و باقی آدرس از URL مانند قبل باقی ماند. به کد زیر توجه کنید.location.search = &amp;quot?name=DanialRahimy&amp;quotاکنون کاربر به https://virgool.io:443/@DanialRahimy/بررسی-آبجکت-location-در-جاوا-اسکریپت-wtc1aruffvhb?name=DanialRahimy#identifierهدایت می شود چون مقدار location.search قبلی ?param=value بود و فقط همین مقدار با?name=DanialRahimyجایگزین می شود که نتیجه آن هدایت کاربر به آدرس بالا است.بررسی location.hashمقدار این Property شامل # به همراه id anchor است.console.log(location.hash)
// خروجی زیر را نمایش می دهد
// #identifierاین Property نیز قابل ویرایش است و در صورت ویرایش مقدار location.hash آدرس URL جایگزین می شود و باقی آدرس از URL مانند قبل باقی ماند. به کد زیر توجه کنید.location.hash = &amp;quot#DanialRahimy&amp;quotاکنون کاربر به https://virgool.io:443/@DanialRahimy/بررسی-آبجکت-location-در-جاوا-اسکریپت-wtc1aruffvhb?param=value#DanialRahimyهدایت می شود چون مقدار location.hash قبلی که در انتهای آدرس قرار دارد#identifier بود و فقط همین مقدار با#DanialRahimyجایگزین می شود که نتیجه آن هدایت کاربر به آدرس بالا است.بررسی Method هابررسی ()location.assignاین متد یک ورودی string دریافت می کند که کاربر به آن صفحه هدایت می شود. مانند جایگزینی مقدار location.href عمل می کند.location.assign(&amp;quothttps://www.linkedin.com/in/danial-rahimy&amp;quot)اکنون کاربر به آدرس https://www.linkedin.com/in/danial-rahimy هدایت می شود.بررسی متد ()location.reloadبا فراخوانی این متد صفحه رفرش می شود.location.reload()بررسی متد ()location.replaceکاربرد این متد مانند ()location.assign و location.href است. با این تفاوت که URL کنونی کاربر در تاریخچه ذخیره نمی شود و با زدن دکمه Back در مرورگر امکان بازگشت به صفحه فعلی را ندارد.location.replace(&amp;quothttps://www.linkedin.com/in/danial-rahimy&amp;quot)اکنون کاربر به آدرس https://www.linkedin.com/in/danial-rahimy هدایت می شود.بررسی متد ()location.toStringاین متد مقدار location.href را بر میگرداند.console.log(location.toString())
// خروجی زیر را نمایش می دهد
// https://virgool.io:443/@DanialRahimy/بررسی-آبجکت-location-در-جاوا-اسکریپت-wtc1aruffvhb?param=value#identifierسازگاری مرورگرهادر این قسمت میخواهیم سازگاری و پشتیبانی مرورگر ها برای Property ها و Method های location را مورد بررسی قرار دهیم. جزئیات این موارد در جدول زیر قابل مشاهده است.جدول سازگاری مرورگرهابیشتر بخوانید:https://developer.mozilla.org/en-US/docs/Web/API/Locationhttps://www.w3schools.com/js/js_window_location.aspسخن پایانیهدف از این مطلب آشنایی شما با ‌دسترسی به URL صفحه و تغییر آن با استفاده از جاوا اسکریپت است. با تمرین این مباحث تسلط خوبی روی این مبحث به دست میارید.امیدارم آموزش خوبی براتون بوده باشه و کمکی جهت آشنایی بیشتر با جاوا اسکریپت و همچنین برنامه نویسی شده باشه.اگر ابهامی در هر کدام از قسمت های کد دارید در نظرات بفرمایید تا توضیح بیشتری بدم.ممنون میشم نظراتتون رو با من درمیون بزارید تا بتونم محتواهای با کیفیت تری تولید کنم که برای من به عنوان نویسنده و برای شما به عنوان خواننده مفید باشه.می تونید در تلگرام با من در ارتباط باشید:https://t.me/DanialRahimy@DanialRahimy</description>
                <category>دانیال رحیمی</category>
                <author>دانیال رحیمی</author>
                <pubDate>Sat, 10 Apr 2021 08:41:53 +0430</pubDate>
            </item>
                    <item>
                <title>ساخت یک بازی ریاضی ساده با پایتون</title>
                <link>https://virgool.io/python-with-danial-rahimy/%D8%B3%D8%A7%D8%AE%D8%AA-%DB%8C%DA%A9-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%B1%DB%8C%D8%A7%D8%B6%DB%8C-%D8%B3%D8%A7%D8%AF%D9%87-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-en4rdspflniy</link>
                <description> https://virgool.io/p/en4rdspflniy/%D8%AF%D8%B1%D8%A7%DB%8C%D9%86%D9%85%D8%B7%D9%84%D8%A8%D9%82%D8%B5%D8%AF%D8%AF%D8%A7%D8%B1%D9%85%D9%86%D8%AD%D9%88%D9%87%D8%B3%D8%A7%D8%AE%D8%AA%DB%8C%DA%A9%D8%A8%D8%A7%D8%B2%DB%8C%D8%B3%D8%A7%D8%AF%D9%87%D8%B1%DB%8C%D8%A7%D8%B6%DB%8C%D8%AF%D8%B1%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86%DA%A9%D9%87%D8%AF%D8%B1%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84%D8%A7%D8%AC%D8%B1%D8%A7%D9%85%DB%8C%D8%B4%D9%88%D8%AF%D8%B1%D8%A7%D9%85%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C%D9%82%D8%B1%D8%A7%D8%B1%D8%AF%D9%87%D9%85.%D9%87%D8%AF%D9%81%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C%D8%A7%DB%8C%D9%86%D8%A8%D8%A7%D8%B2%DB%8C%D8%AF%D8%B1%DA%A9%D8%A8%D9%87%D8%AA%D8%B1%D8%B2%D8%A8%D8%A7%D9%86%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%D9%86%D9%88%DB%8C%D8%B3%DB%8C%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86%D8%8C%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C%D8%A8%D9%87%D8%AA%D8%B1%D9%88%D8%AF%D9%82%DB%8C%D9%82%D8%AA%D8%B1%D8%A8%D8%A7%D8%B3%DB%8C%D9%86%DA%A9%D8%B3%D8%A7%DB%8C%D9%86%D8%B2%D8%A8%D8%A7%D9%86%D8%8C%D9%87%D9%85%DA%86%D9%86%DB%8C%D9%86%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF%D9%86%DA%AF%D8%B1%D8%B4%D8%B5%D8%AD%DB%8C%D8%AD%D8%A8%D9%87%DA%A9%D8%AF%D9%86%D9%88%DB%8C%D8%B3%DB%8C%D9%88%D8%AA%D9%82%D9%88%DB%8C%D8%AA%D8%AA%D9%88%D8%A7%D9%86%D8%A7%DB%8C%DB%8C%D9%82%D8%B1%D8%A7%D8%B1%D8%AF%D8%A7%D8%AF%D9%86%DA%A9%D8%AF%D9%87%D8%A7%D8%AF%D8%B1%DA%A9%D9%86%D8%A7%D8%B1%DB%8C%DA%A9%D8%AF%DB%8C%DA%AF%D8%B1%D8%AC%D9%87%D8%AA%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF%DB%8C%DA%A9%D9%BE%D8%B1%D9%88%DA%98%D9%87. پیش نیاز:آشنایی با پایتون به صورت مقدماتیتوضیحی در رابطه با بازیبازی در سه سطح ساده، متوسط، سخت تعریف می شود که توسط کاربر قابل انتخاب است. با توجه به سطح انتخاب شده در هر مرحله به کاربر سوالی جهت جمع کردن دو عدد نمایش داده می شود که با پاسخ صحیح به آن به امتیاز او افزوده می شود و در صورت پاسخ منفی از امتیاز او کسر می شود. بعد از هر سوال کابر امکان خروج از بازی را دارد.پس از خروج از بازی خلاصه ای از وضعیت کاربر شامل: امتیاز، تعداد سوال های پرسیده شده، تعداد پاسخ های صحیح و تعداد پاسخ های غلط نمایش داده می شود. https://www.aparat.com/video/video/embed/videohash/wD4rH/vt/frame قدم به قدم پیش می رویمبه دلیل اینکه بهتر با طرز تفکر نحوه کد نویسی برای انجام یک پروژه آشنا شوید کد به صورت خط به خط نوشته نمی شود و ممکن است نیاز باشد به خط های بالاتر کدی اضافه شود یا تغییر کند. چون در واقعیت امر به این شکل است که با توجه به طرز تفکر برنامه نویس و پیشبرد کار کد ها اصلاح می شود و به این صورت نیست که از ابتدا تا انتها یک دست کد ها نوشته شود. البته که با افزایش مهارت و انجام تمرین بیشتر به این سمت پیش خواهید رفت که بدانید در چند خط آینده چه خواهید نوشت پس پیش نیاز آن را نیز می نویسید که نیاز به بازگشت و اصلاح کد های قبلی نباشد.شروع کد نویسیدر ابتدا سطح سختی بازی را از کاربر توسط تابع input سوال می کنیم و آن را در متغییری با نام level قرار می دهیم. ممکن است کاربر پاسخ را از میان گزینه ها به درستی انتخاب نکند و پاسخ که در انتظار آن هستیم را دریافت نکنیم که باعث ایجاد اختلال در روند کار می شود. پس متغییری با نام gotCorrectLevel را تعریف می کنیم و مقدار اولیه آن False را قرار می دهیم. سپس در while سوال خود را از کاربر می پرسیم و با ترکیب دستورهای if و in بررسی می کنیم که یکی از جواب های مورد انتظار ما را داده باشد در این صورت مقدار gotCorrectLevel را برابر با True قرار می دهیم که باعث می شود دیگر وارد while نشود و نرم افزار به کار خود ادامه دهد در غیر این صورت انقدر این پروسه تکرار می شود تا جواب صحیح از کابر دریافت شود.gotCorrectLevel = False
while not gotCorrectLevel :
    level = input(&#039;Choose the level (easy, normal, difficult): &#039;)
    if level in [&#039;easy&#039;, &#039;normal&#039;, &#039;difficult&#039;] :
        gotCorrectLevel = Trueنیاز است در ابتدا ماژول random را جهت استفاده import کنیم.سه تابع با نام های easyPlus, normalPlus, difficultPlus با توجه به سه سطح موجود جهت دریافت دو عدد رندوم با استفاده از تابع randrange برای انجام محاسبات می نویسیم. سه تابع با نام های easyScore, normalScore, difficultScore جهت دریافت ضریب امتیاز می نویسیم (این سه می توانند به جای تابع متغییر نیز باشند.)import random

def easyPlus():
    numberOne, numberTwo = random.randrange(0, 100), random.randrange(0, 100)
    return [numberOne, numberTwo]

def normalPlus():
    numberOne, numberTwo = random.randrange(100, 10000), random.randrange(100, 10000)
    return [numberOne, numberTwo]

def difficultPlus():
    numberOne, numberTwo = random.randrange(10000, 1000000000), random.randrange(10000, 1000000000)

def easyScore():
    return 1

def normalScore():
    return 2

def difficultScore():
  return 3برنامه به این صورت طراحی خواهد شد: تا زمانی که کاربر خارج نشده است به صورت مستمر از او سوال های ریاضی پرسیده خواهد شد و پس جهت شروع نیاز است که کد ها را در while قرار دهیم. در بیرون while یک متغیر با نام exitApp و مقدار اولیه False تعریف می کنیم که جهت بررسی شرط while از آن استفاده می کنیم و در صورتیکه کابر تمایل خروج از بازی را داشت مقدار آن را True قرار می دهیم که while دیگر کار خود را ادامه ندهد. همچنین متغییری با نام score با مقدار اولیه 0 جهت نگهداری امتیاز کابر قبل تعریف می کنیم.در ابتدا با بررسی سطح انتخابی کاربر توسط if دو متغییر numberOne و numberTwo را تعریف و با استفاده از توابعی که بالاتر تعریف کردیم مقدار دهی می کنیم.exitApp = False
score = 0 

while not exitApp :      

    if level == &#039;easy&#039; :
         numberOne, numberTwo = easyPlus()
     elif level == &#039;normal&#039; :
         numberOne, numberTwo = normalPlus()
     elif level == &#039;difficult&#039; :
         numberOne, numberTwo = difficultPlus()سپس همچنین در داخل while پاسخ صحیح را محاسبه و در متغییر correctAnswer جهت مقایسه و امتیاز دهی به کاربر نگه داری می کنیم. سپس متغیری با نام question ایجاد و سوالی که قرار است از کابر بپرسیم را در آن نگه داری می کنیم (با استفاده از متد format دو brace {} داخل string را جایگزین می کنیم) پس از آن با استفاده از دستور input سوال را از کاربر پرسیده و در متغیر answer نگه داری می کنیم. با استفاده از تابع int آن را به integer تبدیل می کنیم.    correctAnswer = numberOne + numberTwo

    question = &#039;{0} + {1} = &#039;.format(numberOne, numberTwo)
    answer = input(question)
    answer = int(answer)در ابتدا در قبل از while متغیر های correctAnswers و incorrectAnswer را با مقدار  0 ایجاد می کنیم که نگه دارنده تعداد پاسخ صحیح و غلط کاربر است.سپس همچنین در داخل while با توجه به سطح انتخابی کاربر ضریب امتیاز را در متغیر scoreLevel قرار می دهیم. سپس پاسخ کاربر را با پاسخ صحیح مقایسه می کنیم. با توجه به صحیح یا غلط بودن به امتیاز او اضافه یا کسر می کنیم، به پاسخ های صحیح یا غلط او یک واحد اضافه می کنیم و در انتها با استفاده از تابع print پیغامی به کاربر نمایش می دهیم که نشان دهنده صحیح یا غلط بودن پاسخ اوست و مجموع امتیاز او را نیز تا کنون نمایش می دهیم.     if level == &#039;easy&#039; :
         scoreLevel = easyScore()
     elif level == &#039;normal&#039; :
         scoreLevel = normalScore()
     elif level == &#039;difficult&#039; :
         scoreLevel = difficultScore()

      if answer == correctAnswer:
         score += scoreLevel
         correctAnswers += 1
         print(&#039;Hoora, your score is: {0}&#039;.format(score))
     else :
         score -= scoreLevel
         incorrectAnswer += 1
         print(&#039;Bad lock, your score is: {0}&#039;.format(score))همانطور که پیش تر هم گفتم میخواهیم پس از هر دریافت جواب هر سوال از کاربر از اون بپرسیم که آیا میخواهد بازی را ادامه دهد یا خیر پس در ادامه کد های قبلی در داخل while کد های زیر را می نویسم.در ابتدا متغیر gotCorrectCountinueAnswer را با False مقدار  دهی می کنیم که بررسی کنیم آیا پاسخ دریافتی از کاربر جز موارد مورد انتظار ما است یا نه که اگر صحیح بود مقدار با True می کنیم که دوباره پرسش از کاربر تکرار نشود.پاسخ دریافتی از کاربر را جهت مقایسه در متغییر userWantToCountinue قرار می دهیم. سپس بررسی میکنیم اگر پاسخ منفی بود مقدار exitApp را True می کنیم که شرط بررسی while اصلی برنامه است که در این صورت دیگر سوالی از کاربر پرسیده نخواهد شد و نرم افزار بسته خواهد شد. همچنین نیاز است که بررسی شود آیا پاسخ کاربر جزو موارد مورد انتظار ما بوده است یا خیر که در صورت صحیح بودن مقدار متغییر gotCorrectCountinueAnswer را True قرار می دهیم که پرسش خروج را دوباره از کاربر نپرسد.    gotCorrectContinueAnswer = False

    while not gotCorrectContinueAnswer :
        userWantToContinue = input(&#039;Do you want to continue? (y/n)&#039;)

        if userWantToContinue == &#039;n&#039; :
            exitApp = True

        if userWantToContinue in [&#039;y&#039;, &#039;n&#039;] :
            gotCorrectContinueAnswer = Trueدر اتنها پس از while اصلی قطعه کد زیر را قرار می دهیم و زمانی اجرا می شود که کاربر تمایل خروج از نرم افزار را داشته باشد که آمار بازی که شامل امتیاز، تعداد سوالات پاسخ داده شده، پاسخ های صحیح و پاسخ های نا درست است.else :
    print(&#039;your score is: {0}&#039;.format(score))
    print(&#039;You answered {0} questions&#039;.format(correctAnswers + incorrectAnswer))
    print(&#039;Your correct answers : {0}&#039;.format(correctAnswers))
    print(&#039;Your incorrect answers : {0}&#039;.format(incorrectAnswer))کد نهایی به صورت زیر خواهد بودجهت دانلود کد کلیک کنیدimport random

def easyScore():
    return 1

def normalScore():
    return 2

def difficultScore():
    return 3

def easyPlus():
    numberOne, numberTwo = random.randrange(0, 100), random.randrange(0, 100)
    return [numberOne, numberTwo]

def normalPlus():
    numberOne, numberTwo = random.randrange(100, 10000), random.randrange(100, 10000)
    return [numberOne, numberTwo]

def difficultPlus():
    numberOne, numberTwo = random.randrange(10000, 1000000000), random.randrange(10000, 1000000000)
    return [numberOne, numberTwo]

gotCorrectLevel = False
while not gotCorrectLevel :
    level = input(&#039;Choose the level (easy, normal, difficult): &#039;)
    if level in [&#039;easy&#039;, &#039;normal&#039;, &#039;difficult&#039;] :
        gotCorrectLevel = True
        score = 0
        correctAnswers = 0
        incorrectAnswer = 0

exitApp = False
while not exitApp :
    if level == &#039;easy&#039; :
        numberOne, numberTwo = easyPlus()
    elif level == &#039;normal&#039; :
        numberOne, numberTwo = normalPlus()
    elif level == &#039;difficult&#039; :
        numberOne, numberTwo = difficultPlus()

    correctAnswer = numberOne + numberTwo
    question = &#039;{0} + {1} = &#039;.format(numberOne, numberTwo)
    answer = input(question)
    answer = int(answer)
    
    if level == &#039;easy&#039; :
        scoreLevel = easyScore()
    elif level == &#039;normal&#039; :
        scoreLevel = normalScore()
    elif level == &#039;difficult&#039; :
        scoreLevel = difficultScore()

    if answer == correctAnswer:
        score += scoreLevel
        correctAnswers += 1
        print(&#039;Hoora, your score is: {0}&#039;.format(score))
    else :
        score -= scoreLevel
        incorrectAnswer += 1
        print(&#039;Bad lock, your score is: {0}&#039;.format(score))

    gotCorrectContinueAnswer = False
    while not gotCorrectContinueAnswer :

        userWantToContinue = input(&#039;Do you want to continue? (y/n)&#039;)

        if userWantToContinue == &#039;n&#039; :
            exitApp = True

        if userWantToContinue in [&#039;y&#039;, &#039;n&#039;] :
            gotCorrectContinueAnswer = True
else :
    print(&#039;your score is: {0}&#039;.format(score))
    print(&#039;You answered {0} questions&#039;.format(correctAnswers + incorrectAnswer))
    print(&#039;Your correct answers : {0}&#039;.format(correctAnswers))
    print(&#039;Your incorrect answers : {0}&#039;.format(incorrectAnswer))امیدارم آموزش خوبی براتون بوده باشه و کمکی جهت آشنایی بهتر با پایتون و همچنین برنامه نویسی شده باشه. ممنون میشم نظراتتون رو با من درمیون بزارید تا تقاط قوت و ضعف کار مشخص بشه تا بتونم محتواهای با کیفیت تری تولید کنم که هم برای من به عنوان نویسنده و برای شما به عنوان خواننده مفید باشه.</description>
                <category>دانیال رحیمی</category>
                <author>دانیال رحیمی</author>
                <pubDate>Wed, 31 Mar 2021 10:10:18 +0430</pubDate>
            </item>
                    <item>
                <title>ساخت بازی سنگ، کاغذ، قیچی با پایتون</title>
                <link>https://virgool.io/python-with-danial-rahimy/%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A8%D8%A7%D8%B2%DB%8C-%D8%B3%D9%86%DA%AF-%DA%A9%D8%A7%D8%BA%D8%B0-%D9%82%DB%8C%DA%86%DB%8C-%D8%A8%D8%A7-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-nxoehiomtewj</link>
                <description>در این مطلب قصد دارم شما رو با پایتون بیشتر آشنا کنم و با هم بازی خاطره انگیز سنگ، کاغذ، قیچی رو بنویسم. امیدوارم در این چند دقیقه ای که با هم هستیم لحظات خوشی داشته باشیم.پیش نیازآشنایی با پایتون به صورت مقدماتیتوضیحی در رابطه با بازیبازی به صورت چند زبانه طراحی شده است.همچنین در هر تعامل، کاربر امکان خروج از بازی را دارد.مراجل بازی: کاربر زبان مورد نظر خود را انتخاب می کند.کاربر امکان انتخاب تعداد دست بازی را دارد. می تواند نامحدود نیز باشد.کاربر از بین سنگ، کاغذ، قیچی یکی را انتخاب می کند.اپلیکیشن به صورت رندوم برای خود از موارد یکی را انتخاب می کند و سپس نتیجه را اعلام می کندپرسه بالا تا زمان به اتمام رسیدن تعداد دست های بازی یا خارج شدن کاربر ادامه پیدا می کند.پس از اتمام بازی خلاصه ای از وضعیت بازی که شامل تعداد دست بازی شده، تعداد بردهای کاربر، تعداد برد های اپلیکیشن، تعداد مساوی ها و همچنین برنده نهایی بازی نمایش داده می شود.جهت مشاهده ویدیو خروجی بازی در آپارات کلیک کنیدقدم به قدم پیش می رویمبه دلیل اینکه بهتر با طرز تفکر نحوه کد نویسی برای انجام یک پروژه آشنا شوید کد به صورت خط به خط نوشته نمی شود و ممکن است نیاز باشد به خط های بالاتر کدی اضافه شود یا تغییر کند. چون در واقعیت امر به این شکل است که با توجه به طرز تفکر برنامه نویس و پیشبرد کار کد ها اصلاح می شود و به این صورت نیست که از ابتدا تا انتها یک دست کد ها نوشته شود. البته که با افزایش مهارت و انجام تمرین بیشتر به این سمت پیش خواهید رفت که بدانید در چند خط آینده چه خواهید نوشت پس پیش نیاز آن را نیز می نویسید که نیاز به بازگشت و اصلاح کد های قبلی نباشد.شروع کد نویسیسورس کد به صورت یکجا در انتهای پست قرار دارد.در ابتدا متغییری از نوع دیکشنری با نام messagesInAllLanguages تعریف می کنیم که حاوی پیام ها و سوالاتی است که برای تعامل با کاربر به آن ها نیاز داریم. از آن جایی که این بازی چند زبانه است به صورت ساختاری که زبان ها در کلید متغییر قرار می گیرند و جملات در مقدار آن تعریف می شود.با توجه به ساختار زیر که جملات برای زبان انگلیسی و اسپانیایی نوشته شده است به راحت می توانید گسترش دهید و زبان های دیگر را نیز به آن اضافه کنید. فقط کافی است مقادیر کلید هر عنوان را ترجمه کنید.messagesInAllLanguages = {
    &amp;quoten&amp;quot: {
        &amp;quotwelcome&amp;quot: &amp;quotWelcome to the game&amp;quot,
        &amp;quotchoose language&amp;quot: &amp;quotPlease choose your language en, es, (q to exit): &amp;quot,
        &amp;quotchoose action&amp;quot: &amp;quotPlease choose between stone(st), paper(pa), scissors(sc) (q to exit): &amp;quot,
        &amp;quotbye&amp;quot: &amp;quotWe&#039;re glad you used our game. hope to see you again&amp;quot,
        &amp;quotuser score&amp;quot: &amp;quotYour score: {0}&amp;quot,
        &amp;quotapp score&amp;quot: &amp;quotApp&#039;s score: {0}&amp;quot,
        &amp;quotequal round&amp;quot: &amp;quotequal round: {0}&amp;quot,
        &amp;quotequal rounds&amp;quot: &amp;quotequal rounds: {0}&amp;quot,
        &amp;quotsame action&amp;quot: &amp;quotwhoops! you and app select the same&amp;quot,
        &amp;quotapp win round&amp;quot: &amp;quotApp wins round&amp;quot,
        &amp;quotuser win round&amp;quot: &amp;quotYou win round&amp;quot,
        &amp;quotapp win game&amp;quot: &amp;quotApp wins game&amp;quot,
        &amp;quotuser win game&amp;quot: &amp;quotYou win game&amp;quot,
        &amp;quotsame result&amp;quot: &amp;quotWhoops! you and app has the same score&amp;quot,
        &amp;quotapp chosen&amp;quot: &amp;quotApp chosen: {0}&amp;quot,
        &amp;quotgame round&amp;quot: &amp;quotHow many rounds do you want to play (-1 for unlimited)? (q to exit) &amp;quot,
        &amp;quotplay round&amp;quot: &amp;quotYou play 1 round&amp;quot,
        &amp;quotplay rounds&amp;quot: &amp;quotYou play {0} rounds&amp;quot,
    },
    &amp;quotes&amp;quot: {
        &amp;quotwelcome&amp;quot: &amp;quotBienvenida al juego&amp;quot,
        &amp;quotchoose language&amp;quot: &amp;quotElija su idioma en, es, (q para salir): &amp;quot,
        &amp;quotchoose action&amp;quot: &amp;quotElija entre piedra(pi), papel(pa), tijeras(ti) (q para salir): &amp;quot,
        &amp;quotbye&amp;quot: &amp;quotNos alegra que hayas usado nuestro juego. espero verte de nuevo&amp;quot,
        &amp;quotuser score&amp;quot: &amp;quotTu puntuación: {0}&amp;quot,
        &amp;quotapp score&amp;quot: &amp;quotPuntuación de la aplicación: {0}&amp;quot,
        &amp;quotequal round&amp;quot: &amp;quotronda igual: {0}&amp;quot,
        &amp;quotequal rounds&amp;quot: &amp;quotrondas iguales: {0}&amp;quot,
        &amp;quotsame action&amp;quot: &amp;quot¡Ups! dusted y la aplicación seleccionan lo mismo&amp;quot,
        &amp;quotapp win round&amp;quot: &amp;quotLa aplicación gana ronda&amp;quot,
        &amp;quotuser win round&amp;quot: &amp;quotTu ganas ronda&amp;quot,
        &amp;quotapp win game&amp;quot: &amp;quotLa aplicación gana el juego&amp;quot,
        &amp;quotuser win game&amp;quot: &amp;quotTu ganas el juego&amp;quot,
        &amp;quotsame result&amp;quot: &amp;quot¡Ups! tú y la aplicación tienen la misma puntuación&amp;quot,
        &amp;quotapp chosen&amp;quot: &amp;quotAplicación elegida: {0}&amp;quot,
        &amp;quotgame round&amp;quot: &amp;quot¿Cuántas rondas quieres jugar (-1 para ilimitado)? (q para salir) &amp;quot,
        &amp;quotplay round&amp;quot: &amp;quotTu juegas 1 ronda&amp;quot,
        &amp;quotplay rounds&amp;quot: &amp;quotJuegas {0} rondas&amp;quot,
    }
}در ابتدا متغییری با نام languages از نوع لیست تعریف می کنیم که دارای کلید های متغییر messagesInAllLanguages است که مقدار آن نام زبان های بازی می شود.languages = list(messagesInAllLanguages.keys())متغیری با نام language تعریف می کنیم و به صورت پیشفرض زبان را روی en قرار می دهیم.language = &amp;quoten&amp;quotمتغییری با نام quitApp تعریف می کنیم که مقدار اولیه False دارد و با توجه به اسم آن مشخص کننده نگهدارنده وضعیت خروج از بازی است که بعدا با ورودی که از کاربر گرفته می شود در صورت نیاز True می شود.quitApp = Falseدر یک while اقدام به پرسیدن زبان بازی از کاربر می کنیم به این دلیل که اگر به درستی پاسخ نداد آن قدر این پرسه تکرار شود تا پاسخ مورد انتظار ما دریافت شود.پرسش انتخاب زبان را از کاربر می پرسیم و در متغییر language  نگه داری می کنیم. آن را به حروف کوچک تبدیل می کنیم. با انجام این کار، امکان این که کاربر با حرف بزرگ و یا ترکیبی وارد کند را داده ایم. می تواند در تعامل با کاربر حس خوبی به وجود آورد.while True:
     language = input(messagesInAllLanguages[&amp;quoten&amp;quot][&amp;quotchoose language&amp;quot])
     language = language.lower()بررسی می کنیم که اگر زبان وارد شده کاربر جز زبان های بازی بود لوپ را بشکند و بازی به جریان خود ادامه دهد.if language in languages:
         breakدر غیر اینصورت بررسی می کنیم که اگر کاربر q را به جهت خروج وارد کرده است لوپ بشکند و ادامه روند پیش برد. نکته قابل توجه این که چون کاربر در پاسخ پرسش q وارد کرده است و مقدار را در language ریخته ایم دوباره به صورت پیشفرض en را قرار می دهیم و مقدار متغییر quitApp را نیز برابر True قرار می دهیم.    if language == &amp;quotq&amp;quot:
        language = &amp;quoten&amp;quot
        quitApp = True
        breakاگر هیچ کدام از حالت های بالا رخ ندهد یعنی کاربر زبان درستی را وارد نکرده است که باعث می شود while به کار خود ادامه دهد و روند بالا از اول تکرار شود.در قسمت قبل زبان بازی مشخص شده و با استفاده از آن پیام های زبان مورد نظر را در متغییر messages قرار می دهیم.messages = messagesInAllLanguages[language]سپس دو متغییر originalGameRound  و gameRoundRemind که به ترتیب نگه دارنده تعداد دست انتخاب شده توسط کاربر و تعداد دست باقی مانده از بازی هستند که به صورت پیشفرض 0 مقدار دهی می شوند.originalGameRound = gameRoundRemind = 0پیام خوش آمد گویی به کاربر نمایش داده می شود.print(messages[&amp;quotwelcome&amp;quot])در while  اقدام به پرسش از کاربر جهت دریافت تعداد دست هایی که میخواهد بازی کند می کنیم و مقدار را در متغییر gameRoundRemind ذخیره می کنیم.while not quitApp:
      gameRoundRemind = input(messages[&amp;quotgame round&amp;quot])بررسی میکنیم که اگر مقدار q را جهت خروج از بازی وارد کرده است لوپ شکسته شود و مقدار متغییر quitApp را True قرار می دهیم.    if gameRoundRemind == &amp;quotq&amp;quot:
            quitApp = True         
             breakبررسی می کنیم که اگر مقدار دریافت شده از کاربر عددی نباشد و -1 نیز نباشد (-1 برای دست نامحدود است) لوپ کار خود از ابتدا شروع کند.    if not gameRoundRemind.isdecimal() and gameRoundRemind != &amp;quot-1&amp;quot:
             continueاگر اتفاق بالا نیفتاد پس ورودی کاربر صحیح است و مقدار دریافتی از کاربر را به نوع عدد تبدیل می کنیم و سپس آن را در متغییر های gameRoundRemind  و originalGameRound  که از قبل تعریف کرده ایم قرار می دهیم.    gameRoundRemind = originalGameRound = int(gameRoundRemind)با استفاده از کلمه کلیدی break لوپ را می شکنیم که روند بازی ادامه پیدا کند.    breakدر ادامه مقادیر سنگ، کاغذ، قیچی را با توجه به زبان های بازی تعریف می کنیم و در کلید long در هر زبان قرار می دهیم اگر توجه کنید برای هر مقدار یک کلید wins against تعریف کرده ایم که نشان دهنده این است که در مقابل چه چیزی برنده است. به عنوان مثال: سنگ در مقابل قیچی برنده می شود پس مقدار آن کلید برابر با قیچی است.کلید short در هر زبان نشان دهنده مخفف ها است که به عنوان مثل کاربر به جای وارد کردن stone از st استفاده می کند که در بازی با استفاده از مقادیر short آن را با مقدار کامل خود جایگزین می کنیم.در ادامه که از این دیکشنری استفاده کنیم بهتر این توضیحات را درک خواهید کرد.actionsDetails = {
    &amp;quoten&amp;quot: {
        &amp;quotshort&amp;quot: {
            &amp;quotst&amp;quot: &amp;quotstone&amp;quot,
            &amp;quotpa&amp;quot: &amp;quotpaper&amp;quot,
            &amp;quotsc&amp;quot: &amp;quotscissors&amp;quot,
        },
        &amp;quotlong&amp;quot: {
            &amp;quotstone&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotscissors&amp;quot]
            },
            &amp;quotpaper&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotstone&amp;quot]
            },
            &amp;quotscissors&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotpaper&amp;quot]
            }
        }
    },
    &amp;quotes&amp;quot: {
        &amp;quotshort&amp;quot: {
            &amp;quotpi&amp;quot: &amp;quotpiedra&amp;quot,
            &amp;quotpa&amp;quot: &amp;quotpapel&amp;quot,
            &amp;quotti&amp;quot: &amp;quottijeras&amp;quot,
        },
        &amp;quotlong&amp;quot: {
            &amp;quotpiedra&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quottijeras&amp;quot]
            },
            &amp;quotpapel&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotpiedra&amp;quot]
            },
            &amp;quottijeras&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotpapel&amp;quot]
            }
        }
    }
}در دو متغییر actionsLong و actionsShort، همانطور که از نام آن ها مشخص است با توجه به زبان انتخاب شده مقادیر short و long را در آن نگه داری می کنیم.actionsLong = list(actionsDetails[language][&amp;quotlong&amp;quot].keys()) actionsShort = actionsDetails[language][&amp;quotshort&amp;quot]در ادامه در while با کاربر تعامل میکنیم و بازی شروع می شود.متغییری با نام scores از نوع دیکشنری تعریف می کنیم که امتیاز کاربر و بازی را در خود نگه داری می کند.scores = {&amp;quotuser&amp;quot: 0, &amp;quotapp&amp;quot: 0}در تعامل با کاربر گزینه مورد نظر او از میان سنگ، کاغذ و قیچی را دریافت می کنیم. در متغییر action مقادیر انتخاب شده کاربر و بازی (به صورت رندم) را نگه داری می کنیم. مقدار دریافت شده از کاربر را به حروف کوچک تبدیل می کنیم.while gameRoundRemind != 0:
     action = {
         &amp;quotuser&amp;quot: input(messages[&amp;quotchoose action&amp;quot]),
         &amp;quotapp&amp;quot: random.choice(actionsLong)
     }
     action[&amp;quotuser&amp;quot] = action[&amp;quotuser&amp;quot].lower()بررسی میکنیم که اگر کابر q را جهت خروج انتخاب کرده است لوپ بشکند و روند بازی ادامه پیدا کند.    if action[&amp;quotuser&amp;quot] == &amp;quotq&amp;quot:
         quitApp = True
         breakگر کاربر مقدار مخفف را وارد کرده باشد به مقدار اصلی تبدیل کنیم.    longFromShort = actionsShort.get(action[&amp;quotuser&amp;quot])
    if longFromShort:
        action[&amp;quotuser&amp;quot] = longFromShortاگر مقدار وارد شده کاربر صحیح نباشد لوپ از اول اجرا می شود و پروسه بالا تکرار می شود.    if action[&amp;quotuser&amp;quot] not in actionsLong:
         continueجهت جدا شدن پیغام ها از سوالات تعداد * چاپ می کنیم. مقدار انتخاب شده توسط سیستم به کاربر نمایش داده می شود.    print(&amp;quot*&amp;quot * 40)
    print(messages[&amp;quotapp chosen&amp;quot].format(action[&amp;quotapp&amp;quot]))بررسی می شود که اگر مقدار انتخابی کاربر و سیستم یکی باشد اقدامی صورت نگیرد و صرفا پیغامی جهت این مورد به کاربر نمایش داده می شود.اگر مقدار وارد شده کاربر جز لیست برندگان مورد انتخاب سیستم باشد، پس سیستم برنده است و به امتیاز او اضافه می کنیم و پیغام مناسب نمایش داده می شود.در غیر اینصورت کاربر برنده است و به امتیاز او اضافه می کنیم و پیغام نمایش داده می شود.     if action[&amp;quotuser&amp;quot] == action[&amp;quotapp&amp;quot]:
        print(messages[&amp;quotsame action&amp;quot])
    elif action[&amp;quotuser&amp;quot] in actionsDetails[language][&amp;quotlong&amp;quot][action[&amp;quotapp&amp;quot]][&amp;quotwins against&amp;quot]:
        scores[&amp;quotapp&amp;quot] += 1
        print(messages[&amp;quotapp win round&amp;quot])
    else:
        scores[&amp;quotuser&amp;quot] += 1
        print(messages[&amp;quotuser win round&amp;quot])در انتها از مقدار دست های بازی یکی کم می شود و پروسه بالا تا انتهای بازی ادامه پیدا می کند.     print(&amp;quot*&amp;quot * 40)
     gameRoundRemind -= 1با بررسی شرط زیر متوجه می شویم که کاربر بازی انجام داده است یا خیر. و کد های بعد از آن در صورت True بودن شرط اجرا می شود.if originalGameRound != gameRoundRemind:محاسبه می کنیم که چند دست بازی انجام شده است.gameRoundPlayed = originalGameRound - gameRoundRemindتعداد دست های بازی شده را نمایش می دهیم. اگر یک بازی انجام شده باشد داخل if اجرا می شود و در غیر اینصورت else     if (originalGameRound - 1) == gameRoundRemind:
         print(messages[&amp;quotplay round&amp;quot])
     else:
         print(messages[&amp;quotplay rounds&amp;quot].format(originalGameRound - gameRoundRemind))تعداد برد های کاربر و سیستم را نمایش می دهیم.     print(messages[&amp;quotuser score&amp;quot].format(scores[&amp;quotuser&amp;quot]))
     print(messages[&amp;quotapp score&amp;quot].format(scores[&amp;quotapp&amp;quot]))تعداد مساوی ها را محاسبه می کنیم و بررسی می کنیم اگر بیشتر از  0 است نمایش داده شود.اگر برابر 1 است داخل if در غیر اینصورت else اجرا می شود.     equal = gameRoundPlayed - (scores[&amp;quotuser&amp;quot] + scores[&amp;quotapp&amp;quot])
     if equal == 1:
         print(messages[&amp;quotequal round&amp;quot].format(equal))
     elif equal &gt; 1:
         print(messages[&amp;quotequal rounds&amp;quot].format(equal))با توجه به وضعیت بازی که کاربر یا سیستم برنده شده است و یا مساوی شده اند پیغام مناسب نمایش داده می شود.     if scores[&amp;quotuser&amp;quot] &gt; scores[&amp;quotapp&amp;quot]:
         print(messages[&amp;quotuser win game&amp;quot])
     elif scores[&amp;quotuser&amp;quot] &lt; scores[&amp;quotapp&amp;quot]:
         print(messages[&amp;quotapp win game&amp;quot])
     else:
         print(messages[&amp;quotsame result&amp;quot])در انتهای بازی هم پیغام خداحافظی نمایش می دهیم!print(messages[&amp;quotbye&amp;quot])کد نهایی به صورت زیر خواهد بودجهت دانلود کد کلیک کنیدimport random

messagesInAllLanguages = {
    &amp;quoten&amp;quot: {
        &amp;quotwelcome&amp;quot: &amp;quotWelcome to the game&amp;quot,
        &amp;quotchoose language&amp;quot: &amp;quotPlease choose your language en, es, (q to exit): &amp;quot,
        &amp;quotchoose action&amp;quot: &amp;quotPlease choose between stone(st), paper(pa), scissors(sc) (q to exit): &amp;quot,
        &amp;quotbye&amp;quot: &amp;quotWe&#039;re glad you used our game. hope to see you again&amp;quot,
        &amp;quotuser score&amp;quot: &amp;quotYour score: {0}&amp;quot,
        &amp;quotapp score&amp;quot: &amp;quotApp&#039;s score: {0}&amp;quot,
        &amp;quotequal round&amp;quot: &amp;quotequal round: {0}&amp;quot,
        &amp;quotequal rounds&amp;quot: &amp;quotequal rounds: {0}&amp;quot,
        &amp;quotsame action&amp;quot: &amp;quotwhoops! you and app select the same&amp;quot,
        &amp;quotapp win round&amp;quot: &amp;quotApp wins round&amp;quot,
        &amp;quotuser win round&amp;quot: &amp;quotYou win round&amp;quot,
        &amp;quotapp win game&amp;quot: &amp;quotApp wins game&amp;quot,
        &amp;quotuser win game&amp;quot: &amp;quotYou win game&amp;quot,
        &amp;quotsame result&amp;quot: &amp;quotWhoops! you and app has the same score&amp;quot,
        &amp;quotapp chosen&amp;quot: &amp;quotApp chosen: {0}&amp;quot,
        &amp;quotgame round&amp;quot: &amp;quotHow many rounds do you want to play (-1 for unlimited)? (q to exit) &amp;quot,
        &amp;quotplay round&amp;quot: &amp;quotYou play 1 round&amp;quot,
        &amp;quotplay rounds&amp;quot: &amp;quotYou play {0} rounds&amp;quot,
    },
    &amp;quotes&amp;quot: {
        &amp;quotwelcome&amp;quot: &amp;quotBienvenida al juego&amp;quot,
        &amp;quotchoose language&amp;quot: &amp;quotElija su idioma en, es, (q para salir): &amp;quot,
        &amp;quotchoose action&amp;quot: &amp;quotElija entre piedra(pi), papel(pa), tijeras(ti) (q para salir): &amp;quot,
        &amp;quotbye&amp;quot: &amp;quotNos alegra que hayas usado nuestro juego. espero verte de nuevo&amp;quot,
        &amp;quotuser score&amp;quot: &amp;quotTu puntuación: {0}&amp;quot,
        &amp;quotapp score&amp;quot: &amp;quotPuntuación de la aplicación: {0}&amp;quot,
        &amp;quotequal round&amp;quot: &amp;quotronda igual: {0}&amp;quot,
        &amp;quotequal rounds&amp;quot: &amp;quotrondas iguales: {0}&amp;quot,
        &amp;quotsame action&amp;quot: &amp;quot¡Ups! dusted y la aplicación seleccionan lo mismo&amp;quot,
        &amp;quotapp win round&amp;quot: &amp;quotLa aplicación gana ronda&amp;quot,
        &amp;quotuser win round&amp;quot: &amp;quotTu ganas ronda&amp;quot,
        &amp;quotapp win game&amp;quot: &amp;quotLa aplicación gana el juego&amp;quot,
        &amp;quotuser win game&amp;quot: &amp;quotTu ganas el juego&amp;quot,
        &amp;quotsame result&amp;quot: &amp;quot¡Ups! tú y la aplicación tienen la misma puntuación&amp;quot,
        &amp;quotapp chosen&amp;quot: &amp;quotAplicación elegida: {0}&amp;quot,
        &amp;quotgame round&amp;quot: &amp;quot¿Cuántas rondas quieres jugar (-1 para ilimitado)? (q para salir) &amp;quot,
        &amp;quotplay round&amp;quot: &amp;quotTu juegas 1 ronda&amp;quot,
        &amp;quotplay rounds&amp;quot: &amp;quotJuegas {0} rondas&amp;quot,
    }
}
languages = list(messagesInAllLanguages.keys())
language = &amp;quoten&amp;quot
quitApp = False

while True:
    language = input(messagesInAllLanguages[&amp;quoten&amp;quot][&amp;quotchoose language&amp;quot])
    language = language.lower()

    if language in languages:
        break

    if language == &amp;quotq&amp;quot:
        language = &amp;quoten&amp;quot
        quitApp = True
        break

messages = messagesInAllLanguages[language]
originalGameRound = gameRoundRemind = 0
print(messages[&amp;quotwelcome&amp;quot])

while not quitApp:

    gameRoundRemind = input(messages[&amp;quotgame round&amp;quot])

    if gameRoundRemind == &amp;quotq&amp;quot:
        quitApp = True
        break

    if not gameRoundRemind.isdecimal() and gameRoundRemind != &amp;quot-1&amp;quot:
        continue

    gameRoundRemind = originalGameRound = int(gameRoundRemind)

    break

actionsDetails = {
    &amp;quoten&amp;quot: {
        &amp;quotshort&amp;quot: {
            &amp;quotst&amp;quot: &amp;quotstone&amp;quot,
            &amp;quotpa&amp;quot: &amp;quotpaper&amp;quot,
            &amp;quotsc&amp;quot: &amp;quotscissors&amp;quot,
        },
        &amp;quotlong&amp;quot: {
            &amp;quotstone&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotscissors&amp;quot]
            },
            &amp;quotpaper&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotstone&amp;quot]
            },
            &amp;quotscissors&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotpaper&amp;quot]
            }
        }
    },
    &amp;quotes&amp;quot: {
        &amp;quotshort&amp;quot: {
            &amp;quotpi&amp;quot: &amp;quotpiedra&amp;quot,
            &amp;quotpa&amp;quot: &amp;quotpapel&amp;quot,
            &amp;quotti&amp;quot: &amp;quottijeras&amp;quot,
        },
        &amp;quotlong&amp;quot: {
            &amp;quotpiedra&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quottijeras&amp;quot]
            },
            &amp;quotpapel&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotpiedra&amp;quot]
            },
            &amp;quottijeras&amp;quot: {
                &amp;quotwins against&amp;quot: [&amp;quotpapel&amp;quot]
            }
        }
    }
}
actionsLong = list(actionsDetails[language][&amp;quotlong&amp;quot].keys())
actionsShort = actionsDetails[language][&amp;quotshort&amp;quot]
scores = {&amp;quotuser&amp;quot: 0, &amp;quotapp&amp;quot: 0}

while gameRoundRemind != 0:
    action = {
        &amp;quotuser&amp;quot: input(messages[&amp;quotchoose action&amp;quot]),
        &amp;quotapp&amp;quot: random.choice(actionsLong)
    }
    action[&amp;quotuser&amp;quot] = action[&amp;quotuser&amp;quot].lower()

    if action[&amp;quotuser&amp;quot] == &amp;quotq&amp;quot:
        quitApp = True
        break

    longFromShort = actionsShort.get(action[&amp;quotuser&amp;quot])
    if longFromShort:
        action[&amp;quotuser&amp;quot] = longFromShort

    if action[&amp;quotuser&amp;quot] not in actionsLong:
        continue

    print(&amp;quot*&amp;quot * 40)
    print(messages[&amp;quotapp chosen&amp;quot].format(action[&amp;quotapp&amp;quot]))

    if action[&amp;quotuser&amp;quot] == action[&amp;quotapp&amp;quot]:
        print(messages[&amp;quotsame action&amp;quot])
    elif action[&amp;quotuser&amp;quot] in actionsDetails[language][&amp;quotlong&amp;quot][action[&amp;quotapp&amp;quot]][&amp;quotwins against&amp;quot]:
        scores[&amp;quotapp&amp;quot] += 1
        print(messages[&amp;quotapp win round&amp;quot])
    else:
        scores[&amp;quotuser&amp;quot] += 1
        print(messages[&amp;quotuser win round&amp;quot])

    print(&amp;quot*&amp;quot * 40)
    gameRoundRemind -= 1

if originalGameRound != gameRoundRemind:
    gameRoundPlayed = originalGameRound - gameRoundRemind

    if (originalGameRound - 1) == gameRoundRemind:
        print(messages[&amp;quotplay round&amp;quot])
    else:
        print(messages[&amp;quotplay rounds&amp;quot].format(originalGameRound - gameRoundRemind))

    print(messages[&amp;quotuser score&amp;quot].format(scores[&amp;quotuser&amp;quot]))
    print(messages[&amp;quotapp score&amp;quot].format(scores[&amp;quotapp&amp;quot]))
    equal = gameRoundPlayed - (scores[&amp;quotuser&amp;quot] + scores[&amp;quotapp&amp;quot])

    if equal == 1:
        print(messages[&amp;quotequal round&amp;quot].format(equal))
    elif equal &gt; 1:
        print(messages[&amp;quotequal rounds&amp;quot].format(equal))

    if scores[&amp;quotuser&amp;quot] &gt; scores[&amp;quotapp&amp;quot]:
        print(messages[&amp;quotuser win game&amp;quot])
    elif scores[&amp;quotuser&amp;quot] &lt; scores[&amp;quotapp&amp;quot]:
        print(messages[&amp;quotapp win game&amp;quot])
    else:
        print(messages[&amp;quotsame result&amp;quot])

print(messages[&amp;quotbye&amp;quot])امیدارم آموزش خوبی براتون بوده باشه و کمکی جهت آشنایی بهتر با پایتون و همچنین برنامه نویسی شده باشه.اگر ابهامی در هر کدام از قسمت های کد دارید در نظرات بفرمایید تا توضیح بیشتری بدهم.ممنون میشم نظراتتون رو با من درمیون بزارید تا نقاط قوت و ضعف کار مشخص بشه تا بتونم محتواهای با کیفیت تری تولید کنم. برای من به عنوان نویسنده و برای شما به عنوان خواننده مفید باشه.</description>
                <category>دانیال رحیمی</category>
                <author>دانیال رحیمی</author>
                <pubDate>Wed, 31 Mar 2021 05:29:57 +0430</pubDate>
            </item>
            </channel>
</rss>