{
  "assessmentTests": {
    "python_test": {
      "name": "د پایتون ازموینه",
      "desc": "د سینټکس، فنکشنونو، ډیټا جوړښتونو او د آبجکټ چلند په اړه 30 سناریو پوښتنې — ومومئ چې آیا ستاسو پایتون د هغه څه سره سمون لري چې د دندې په اعلان کې د پایتون مهارت څخه مطلب وي.",
      "recommendation": "ستاسو د پایتون مهارتونو پروفایل",
      "results": {
        "beginner": {
          "name": "پیل کونکی",
          "desc": "تاسو کولی شئ یو لنډ سکریپټ تعقیب کړئ او په هغه کې ارزښتونه بدل کړئ، مګر هغه پوښتنې چې تاسو غلطې کړې دي د عمومي منطق پر ځای د ژبې په خپل ځانګړي چلند متمرکزې دي — یو ډیفالټ آرګومنټ چې یو ځل جوړیږي او بیا کارول کیږي، د دوو مساوي ښکارېدونکو لیستونو لپاره is د == په مقابل کې، یو متغیر چې په فنکشن کې هرچېرې د ارزښت ورکولو سره سم سیمه ییز کیږي. دا هیڅ یو په پروګرامینګ کې د کمزورتیا په اړه نه دی؛ دا د پایتون ځانګړي قواعد دي چې د نورو ژبو څخه راغلي خلک او نوي زده کوونکي دواړه ګمراه کوي. دا په کار کې مهم دي ځکه چې هر یو یې هغه ځای دی چې یو بګ په داسې کوډ کې پټیږي چې په لومړي نظر سم ښکاري.",
          "recommendation": "په دې ترتیب سره له دریو شیانو پیل وکړئ: د بدلون وړ ډیفالټ آرګومنټونه (ولې basket=[] خطرناک دی)، د is او == ترمنځ توپیر، او دا چې په فنکشن کې د متغیر ساحه څنګه کار کوي. د docs.python.org رسمي پایتون ټیوټوریل دا درې واړه په مستقیم ډول پوښي، او د «Python gotchas» اصطلاح د هر یو لپاره کاري مثالونه وړاندې کوي."
        },
        "intermediate": {
          "name": "منځنۍ کچه",
          "desc": "تاسو په آرامۍ سره ورځني سکریپټینګ اداره کوئ — د ډیټا جوړښتونه، د کنټرول جریان، ساده فنکشنونه — او د موجوده کوډبیس د معمول ساتنې کار یا کوچنۍ ځانګړتیا له امله به ورو نه شئ. د دې ځای او پرمختللې کچې ترمنځ واټن اکثراً په دې کې دی چې کله د پایتون د اسانتیا ځانګړتیاوې یو له بل سره تعامل کوي څه پیښیږي: یو سطحي کاپي چې ځالې شوې ډیټا شریکه پریږدي کله چې تاسو د هغې د نقل تمه درلوده، د جنراتور د بیرته راستنیدو ارزښت چې په خاموشۍ سره د هغې د محصول برخه نه ګرځي، ډیکوریټرونه په داسې ترتیب کې ځای پر ځای کیږي چې په اسانۍ سره یې برعکس اخیستل کیږي. دا هغه ډول بګونه دي چې یو لوړ پوړی بیاکتونکی یې په لسو ثانیو کې په نښه کوي او نور ټول یې په لټون یو ساعت تیروي.",
          "recommendation": "د آبجکټ او تکرار په داخلي برخو تمرکز وکړئ: سطحي د ژورې کاپي په مقابل کې، یو جنراتور په حقیقت کې د return سره څه کوي، او د ډیکوریټر د ځای پر ځای کولو ترتیب څنګه کار کوي. بیا د کلاس اساسات چې ډیری ټیوټوریلونه یې پریږدي — د __eq__ پرته ډیفالټ مساوات، او ولې د بدلون وړ کلاس ځانګړتیا په هر مثال کې شریکه وي."
        },
        "advanced": {
          "name": "پرمختللې کچه",
          "desc": "دا هغه کچه ده چې د ډیری دندو په اعلانونو کې د «قوي پایتون» څخه مطلب وي. تاسو د سمې وسیلې لپاره پرته له لټون څخه لاس اچوئ، تاسو پوهیږئ چې ولې د شریک حالت یوه ټوټه بدله شوه نه یوازې دا چې بدله شوې، او تاسو کولی شئ د بل چا فنکشن ولولئ او د هغې محصول په سمه توګه وړاندوینه وکړئ. د دې ډلې او لوړې کچې ترمنځ توپیر د کار په دفاعي اړخ کې دی: پدې پوهیدل چې د دوو سم ښکارېدونکو چلندونو څخه کوم یو به غلط چلند وکړي کله چې د کلاس ځانګړتیا، یوازې کیورډ آرګومنټ، یا د استثنا سلسله پکې شامله وي.",
          "recommendation": "هغو برخو ته ځان ورسوئ چې د کوډبیس ساتنه کوي چې نور خلک یې هم کاروي: یوازې کیورډ آرګومنټونه د API ډیزاین انتخاب په توګه نه د سینټکس د کنجکاوۍ په توګه، د استثنا سلسله (نو د except فقرې د خطا سمه کورنۍ نیسي، نه یوازې یو کلاس)، او د شرایطو مدیران د پاکولو تضمین کولو لپاره د معیاري لارې په توګه. د Real Python ژورې مقالې د دې دریو واړو لپاره یو ښه بل تمځای دی."
        },
        "expert": {
          "name": "متخصص",
          "desc": "تاسو په هره برخه کې لوړې نمرې ترلاسه کړې — اصلي سینټکس، فنکشنونه او ساحه، د ډیټا جوړښتونه، او د آبجکټ پر بنسټ اصطلاحات. په عملي توګه، دا پدې مانا ده چې تاسو ته د یو پردي کس فایل درکول کیدی شي او تاسو تشریح کولی شئ چې ولې دا هغه محصول تولیدوي چې کوي یې، نه یوازې دا چې سینټکس څه وايي چې باید یې وکړي، کوم چې یو سخت او ډیر ارزښتناک مهارت دی. په دې کچه، خام ژبه په ندرت سره ستاسو په کار کې محدودونکی فکتور وي؛ محدودیت معمولا د کوډ شاوخوا سیسټم اندازه یا بڼه وي.",
          "recommendation": "اوس ګټه په وسیلو او بیاکتنه کې ده: د mypy یا pyright سره د سټاټیک ډول چیک کول، د اټکل پرځای د اصلاح کولو دمخه پروفایل کول، او د نورو خلکو د پل غوښتنو لوستل دقیقا د دې کټګورۍ بګونو لپاره — هغه چې هره ازموینه پاس کوي او بیا هم د یو ځانګړي انپوټ لاندې غلط کار کوي. که تاسو د یوې دندې لپاره ارزول کیږئ، د ژبې د ځانګړتیاوو د نومولو پرځای د داسې یو بګ تشریح کړئ چې تاسو موندلی وي — دا د استدلال ښودنه کوي، نه یوازې لغتونه."
        }
      },
      "questions": [
        {
          "question": "تاسو def add_item(item, basket=[]): basket.append(item); return basket لیکئ، بیا add_item('a') او add_item('b') دواړه ځله د basket پریښودو سره غواړئ. دوهم غوښتنه څه بیرته راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "['b']"
            },
            {
              "icon": "",
              "label": "یو TypeError"
            },
            {
              "icon": "",
              "label": "['a', 'b']"
            },
            {
              "icon": "",
              "label": "['a']"
            }
          ]
        },
        {
          "question": "a = [1, 2, 3] او b = [1, 2, 3]. a == b څه بیرته راګرځوي، او a is b څه بیرته راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "د دواړو لپاره True"
            },
            {
              "icon": "",
              "label": "د == لپاره سم، د is لپاره ناسم"
            },
            {
              "icon": "",
              "label": "د دواړو لپاره False"
            },
            {
              "icon": "",
              "label": "د is لپاره سم، د == لپاره ناسم"
            }
          ]
        },
        {
          "question": "په پایتون 3 کې، 7 / 2 څه ارزښت لري، او 7 // 2 څه ارزښت لري؟",
          "options": [
            {
              "icon": "",
              "label": "3.5، بیا 3"
            },
            {
              "icon": "",
              "label": "3، بیا 3.5"
            },
            {
              "icon": "",
              "label": "3.5، بیا 3.5"
            },
            {
              "icon": "",
              "label": "3، بیا 3"
            }
          ]
        },
        {
          "question": "s = 'hello'، بیا تاسو s[0] = 'H' چلوئ. څه پیښیږي؟",
          "options": [
            {
              "icon": "",
              "label": "s 'Hello' کیږي"
            },
            {
              "icon": "",
              "label": "s 'Hhello' کیږي"
            },
            {
              "icon": "",
              "label": "دا یو TypeError رامنځته کوي"
            },
            {
              "icon": "",
              "label": "هیڅ نه؛ s 'hello' پاتې کیږي"
            }
          ]
        },
        {
          "question": "x = [10, 20, 30, 40, 50]. x[1:4] څه بیرته راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "[20, 30, 40, 50]"
            },
            {
              "icon": "",
              "label": "[10, 20, 30, 40]"
            },
            {
              "icon": "",
              "label": "[20, 30, 40]"
            },
            {
              "icon": "",
              "label": "[30, 40]"
            }
          ]
        },
        {
          "question": "name = 'Ana' او age = 30. f'{name} is {age}' څه تولیدوي؟",
          "options": [
            {
              "icon": "",
              "label": "{name} is {age}"
            },
            {
              "icon": "",
              "label": "Ana is 30"
            },
            {
              "icon": "",
              "label": "name is age"
            },
            {
              "icon": "",
              "label": "یو TypeError"
            }
          ]
        },
        {
          "question": "1 < 2 < 3 څه ارزښت لري؟",
          "options": [
            {
              "icon": "",
              "label": "رښتیا"
            },
            {
              "icon": "",
              "label": "ناسم"
            },
            {
              "icon": "",
              "label": "یو SyntaxError"
            },
            {
              "icon": "",
              "label": "3"
            }
          ]
        },
        {
          "question": "bool([]) څه بیرته راګرځوي، او bool([0]) څه بیرته راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "ناسم، بیا ناسم"
            },
            {
              "icon": "",
              "label": "False، بیا True"
            },
            {
              "icon": "",
              "label": "True، بیا True"
            },
            {
              "icon": "",
              "label": "True، بیا False"
            }
          ]
        },
        {
          "question": "د ماډیول په کچه count = 0 شتون لري. د def increment(): count += 1; return count دننه، تاسو increment() ته زنګ وهئ. څه به پېښ شي؟",
          "options": [
            {
              "icon": "",
              "label": "دا UnboundLocalError راپورته کوي"
            },
            {
              "icon": "",
              "label": "دا 1 راګرځوي او نړیوال count 1 ته تنظیموي"
            },
            {
              "icon": "",
              "label": "دا 1 راګرځوي؛ نړیوال count 0 پاتې کیږي"
            },
            {
              "icon": "",
              "label": "دا TypeError راپورته کوي"
            }
          ]
        },
        {
          "question": "def f(*args, **kwargs): return args, kwargs. د f(1, 2, x=3) څه راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "([1, 2], {'x': 3})"
            },
            {
              "icon": "",
              "label": "((1, 2), {'x': 3})"
            },
            {
              "icon": "",
              "label": "(1, 2, {'x': 3})"
            },
            {
              "icon": "",
              "label": "یو TypeError"
            }
          ]
        },
        {
          "question": "تاسو په یوه حلقه کې funcs = [lambda: i for i in range(3)] جوړوئ. [f() for f in funcs] څه راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "[2, 2, 2]"
            },
            {
              "icon": "",
              "label": "[0, 1, 2]"
            },
            {
              "icon": "",
              "label": "[0, 0, 0]"
            },
            {
              "icon": "",
              "label": "یو NameError"
            }
          ]
        },
        {
          "question": "یو فنکشن د @a سره مستقیم د @b پورته تعریف شوی، کوم چې مستقیم د def f(): pass پورته دی. ډیکوریټرونه په f باندې په کوم ترتیب پلي کیږي؟",
          "options": [
            {
              "icon": "",
              "label": "b لومړی f پوښي، بیا a پایله پوښي"
            },
            {
              "icon": "",
              "label": "a لومړی f پوښي، بیا b پایله پوښي"
            },
            {
              "icon": "",
              "label": "یوازې وروستی تعریف شوی اغېز کوي"
            },
            {
              "icon": "",
              "label": "دا د واردولو په ترتیب پورې اړه لري"
            }
          ]
        },
        {
          "question": "def f(a, *, b): return a + b. له دې زنګونو څخه کوم یو کار کوي؟",
          "options": [
            {
              "icon": "",
              "label": "f(1, b=2)"
            },
            {
              "icon": "",
              "label": "f(1, 2)"
            },
            {
              "icon": "",
              "label": "f(a=1, 2)"
            },
            {
              "icon": "",
              "label": "f(1)"
            }
          ]
        },
        {
          "question": "یو جنریټر فنکشن 1 تولیدوي، بیا 2 تولیدوي، بیا return 99 کوي. list(the_generator()) څه لري، او د 99 سره څه کیږي؟",
          "options": [
            {
              "icon": "",
              "label": "[1, 2, 99]، ځکه چې return د وروستي yield په توګه کار کوي"
            },
            {
              "icon": "",
              "label": "[99]، ځکه چې return د yields ځای نیسي"
            },
            {
              "icon": "",
              "label": "[1, 2]، او 99 د StopIteration ارزښت کیږي"
            },
            {
              "icon": "",
              "label": "دا یو RuntimeError راپورته کوي"
            }
          ]
        },
        {
          "question": "په یوه outer() فنکشن کې، x = 1 ټاکل شوی، بیا یو ځاله شوی inner() د nonlocal x; x += 1 کوي، او outer() د x راګرځولو دمخه inner() ته زنګ وهي. outer() څه راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "1"
            },
            {
              "icon": "",
              "label": "یو UnboundLocalError"
            },
            {
              "icon": "",
              "label": "یو SyntaxError"
            },
            {
              "icon": "",
              "label": "2"
            }
          ]
        },
        {
          "question": "d = {'a': 1, 'b': 2}. د d.get('c', 0) څه راګرځوي، او ایا دا 'c' ډیکشنري ته اضافه کوي؟",
          "options": [
            {
              "icon": "",
              "label": "0، او نه"
            },
            {
              "icon": "",
              "label": "0، او هو"
            },
            {
              "icon": "",
              "label": "یو KeyError"
            },
            {
              "icon": "",
              "label": "None، او هو"
            }
          ]
        },
        {
          "question": "t = (1, 2, [3, 4]). ایا تاسو t[2].append(5) چلولی شئ، او ایا تاسو t[0] = 10 چلولی شئ؟",
          "options": [
            {
              "icon": "",
              "label": "دواړه کار کوي"
            },
            {
              "icon": "",
              "label": "دواړه TypeError راپورته کوي"
            },
            {
              "icon": "",
              "label": "t[2].append(5) د TypeError لامل کیږي؛ t[0] = 10 کار کوي"
            },
            {
              "icon": "",
              "label": "t[2].append(5) کار کوي؛ t[0] = 10 د TypeError لامل کیږي"
            }
          ]
        },
        {
          "question": "له دې څخه کوم یو ایټریټر راګرځوي چې ارزښتونه په سستۍ سره محاسبه کوي د دې پرځای چې ټوله لړۍ په یوځل په حافظه کې جوړه کړي: [x*x for x in range(1000000)] یا (x*x for x in range(1000000))؟",
          "options": [
            {
              "icon": "",
              "label": "هغه چې قوسونه لري"
            },
            {
              "icon": "",
              "label": "هغه چې مربع قوسونه لري"
            },
            {
              "icon": "",
              "label": "دواړه؛ یوازې د پایلې ډول توپیر لري"
            },
            {
              "icon": "",
              "label": "هیڅ یو؛ دواړه بشپړ لیست جوړوي"
            }
          ]
        },
        {
          "question": "یو try بلاک په صفر ویشي، د except ZeroDivisionError برخه 'a' چاپوي، او یوه finally برخه 'b' چاپوي. څه چاپ کیږي، او په کوم ترتیب؟",
          "options": [
            {
              "icon": "",
              "label": "b بیا a"
            },
            {
              "icon": "",
              "label": "a بیا b"
            },
            {
              "icon": "",
              "label": "یوازې b"
            },
            {
              "icon": "",
              "label": "یوازې a"
            }
          ]
        },
        {
          "question": "import copy; a = [[1, 2], [3, 4]]; b = copy.copy(a); b[0].append(99). ایا a[0] هم بدلیږي؟",
          "options": [
            {
              "icon": "",
              "label": "No"
            },
            {
              "icon": "",
              "label": "دا یوه تېروتنه راپورته کوي"
            },
            {
              "icon": "",
              "label": "یوازې که deepcopy وکارول شي"
            },
            {
              "icon": "",
              "label": "هو"
            }
          ]
        },
        {
          "question": "d = {'x': 1, 'y': 2}. 'x' in d د څه شي په وړاندې ګوري — کیلي ګانې، ارزښتونه، یا دواړه؟",
          "options": [
            {
              "icon": "",
              "label": "ارزښتونه"
            },
            {
              "icon": "",
              "label": "دواړه کیلي ګانې او ارزښتونه"
            },
            {
              "icon": "",
              "label": "هیڅ یو؛ دا TypeError راپورته کوي"
            },
            {
              "icon": "",
              "label": "کیلي ګانې"
            }
          ]
        },
        {
          "question": "names = ['Al', 'Bo'] او scores = [10, 20]. د list(zip(names, scores)) څه راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "[('Al', 'Bo'), (10, 20)]"
            },
            {
              "icon": "",
              "label": "['Al', 10, 'Bo', 20]"
            },
            {
              "icon": "",
              "label": "[('Al', 10), ('Bo', 20)]"
            },
            {
              "icon": "",
              "label": "یو ValueError"
            }
          ]
        },
        {
          "question": "class Dog: tricks = [] د کلاس په کچه لیست لري، او add_trick د self.tricks سره ضمیمه کوي. d1 = Dog() او d2 = Dog() دواړه جوړ شوي، بیا d1.add_trick('sit') چلیږي. d2.tricks څه لري؟",
          "options": [
            {
              "icon": "",
              "label": "[]"
            },
            {
              "icon": "",
              "label": "['sit']"
            },
            {
              "icon": "",
              "label": "یو TypeError"
            },
            {
              "icon": "",
              "label": "هېڅ یو"
            }
          ]
        },
        {
          "question": "class A د def greet(self): return 'A' لري. class B(A) د def greet(self): return 'B' + super().greet() لري. B().greet() څه راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "'AB'"
            },
            {
              "icon": "",
              "label": "'B'"
            },
            {
              "icon": "",
              "label": "'BA'"
            },
            {
              "icon": "",
              "label": "یو AttributeError"
            }
          ]
        },
        {
          "question": "class Point په __init__ کې self.x ذخیره کوي او نور میتودونه نه تعریفوي. p1 = Point(1) او p2 = Point(1). p1 == p2 په ډیفالټ ډول څه راګرځوي؟",
          "options": [
            {
              "icon": "",
              "label": "رښتیا"
            },
            {
              "icon": "",
              "label": "ناسم"
            },
            {
              "icon": "",
              "label": "هېڅ یو"
            },
            {
              "icon": "",
              "label": "یو TypeError"
            }
          ]
        },
        {
          "question": "لاندې کوم except برخه به ZeroDivisionError هم ونیسي: except ArithmeticError، except ValueError، یا except KeyError؟",
          "options": [
            {
              "icon": "",
              "label": "except ValueError"
            },
            {
              "icon": "",
              "label": "except KeyError"
            },
            {
              "icon": "",
              "label": "هیڅ یو یې نه"
            },
            {
              "icon": "",
              "label": "except ArithmeticError"
            }
          ]
        },
        {
          "question": "تاسو یو فایل د open('data.txt') as f: سره خلاصوئ او د بلاک دننه د لوستلو پرمهال یوه استثنا راپورته کیږي. ایا فایل لاهم تړل کیږي؟",
          "options": [
            {
              "icon": "",
              "label": "No"
            },
            {
              "icon": "",
              "label": "یوازې د یوې اضافه شوې finally برخې سره"
            },
            {
              "icon": "",
              "label": "هو"
            },
            {
              "icon": "",
              "label": "دا د استثنا په ډول پورې اړه لري"
            }
          ]
        },
        {
          "question": "x = [3, 1, 2] او y = x.sort(). y څه لري؟",
          "options": [
            {
              "icon": "",
              "label": "[1, 2, 3]"
            },
            {
              "icon": "",
              "label": "هېڅ یو"
            },
            {
              "icon": "",
              "label": "[3, 1, 2]"
            },
            {
              "icon": "",
              "label": "یو TypeError"
            }
          ]
        },
        {
          "question": "کله چې تاسو 'Score: ' + 42 چلوئ څه پیښیږي؟",
          "options": [
            {
              "icon": "",
              "label": "«نمبرې: 42»"
            },
            {
              "icon": "",
              "label": "«نمبرې: »"
            },
            {
              "icon": "",
              "label": "42"
            },
            {
              "icon": "",
              "label": "دا یو TypeError رامنځته کوي"
            }
          ]
        },
        {
          "question": "تاسو اړتیا لرئ وګورئ چې ایا د results په نوم لیست خالي دی. د پایتون کومه اصطلاحي لاره ده: if results == []: ، if len(results) == 0: ، یا if not results: ؟",
          "options": [
            {
              "icon": "",
              "label": "if results == []:"
            },
            {
              "icon": "",
              "label": "if len(results) == 0:"
            },
            {
              "icon": "",
              "label": "if results is None:"
            },
            {
              "icon": "",
              "label": "if not results:"
            }
          ]
        }
      ],
      "optionOrderVersion": "26e0df963ab76db1"
    }
  },
  "testNames": {
    "python-test": "د پایتون ازموینه"
  }
}
