{
  "assessmentTests": {
    "python_test": {
      "name": "Python ٹیسٹ",
      "desc": "نحو، فنکشنز، ڈیٹا سٹرکچرز اور آبجیکٹ کے رویے پر 30 منظرنامے کے سوالات — معلوم کریں کہ آپ کا Python اس سے مطابقت رکھتا ہے یا نہیں جو نوکری کی پوسٹنگ Python کی مہارت سے مراد ہے۔",
      "recommendation": "آپ کا Python مہارت کا پروفائل",
      "results": {
        "beginner": {
          "name": "ابتدائی",
          "desc": "آپ ایک مختصر اسکرپٹ کی پیروی کر سکتے ہیں اور اس میں اقدار تبدیل کر سکتے ہیں، لیکن جو سوالات آپ نے غلط کیے ہیں وہ عام منطق کی بجائے زبان کے اپنے مخصوص رویے کے ارد گرد جمع ہوتے ہیں — ایک ڈیفالٹ آرگومنٹ جو ایک بار بنائی جاتی ہے اور دوبارہ استعمال کی جاتی ہے، is بمقابلہ == دو برابر نظر آنے والی فہرستوں پر، ایک متغیر جو اسی لمحے مقامی بن جاتا ہے جب آپ کسی فنکشن میں کہیں بھی اسے تفویض کرتے ہیں۔ یہ سب پروگرامنگ میں خراب ہونے کے بارے میں نہیں ہے؛ یہ Python کے مخصوص اصول ہیں جو دوسری زبانوں سے آنے والے لوگوں کو اتنی ہی بار پریشان کرتے ہیں جتنا ابتدائی لوگوں کو۔ یہ کام میں اہم ہیں کیونکہ ہر ایک وہ جگہ ہے جہاں ایک بگ اس کوڈ میں چھپا ہوتا ہے جو ایک نظر میں درست لگتا ہے۔",
          "recommendation": "تین چیزوں سے شروع کریں، اسی ترتیب میں: قابل تبدیل ڈیفالٹ آرگومنٹس (کیوں basket=[] خطرناک ہے)، is اور == کے درمیان فرق، اور ایک فنکشن کے اندر متغیر کا دائرہ کیسے کام کرتا ہے۔ docs.python.org پر سرکاری Python ٹیوٹوریل تینوں کو براہ راست کا احاطہ کرتا ہے، اور اصطلاح \"Python gotchas\" ہر ایک کی کام شدہ مثالیں تلاش کرتی ہے۔"
        },
        "intermediate": {
          "name": "درمیانی",
          "desc": "آپ روزمرہ کی اسکرپٹنگ میں آرام سے کام کرتے ہیں — ڈیٹا سٹرکچرز، کنٹرول فلو، سادہ فنکشنز — اور معمول کی دیکھ بھال کے کام یا موجودہ کوڈ بیس پر ایک چھوٹی سی خصوصیت سے سست نہیں ہوں گے۔ یہاں اور Advanced کے درمیان خلاف فی الاصول اس میں ہے جو ہوتا ہے جب Python کی سہولت کی خصوصیات ایک دوسرے کے ساتھ تعامل کرتی ہیں: ایک سطحی کاپی جو نیسٹ شدہ ڈیٹا کو مشترک چھوڑ دیتی ہے جب آپ نے اسے نقل کیا ہوا سمجھا تھا، ایک جنریٹر کی واپسی کی قدر خاموشی سے اس کے آؤٹ پٹ کا حصہ نہیں بنتی، ڈیکوریٹرز ایک ترتیب میں سٹیک کرتے ہیں جو غلط ہونا آسان ہے۔ یہ اس قسم کے بگ ہیں جو ایک سینئر ریویور دس سیکنڈ میں فلیگ کرتا ہے اور باقی سب ایک گھنٹہ شکار کرتے ہیں۔",
          "recommendation": "آبجیکٹ اور تکرار کے اندرونی حصوں پر توجہ دیں: سطحی بمقابلہ گہری کاپی، جنریٹر واقعی return کے ساتھ کیا کرتا ہے، اور ڈیکوریٹر سٹیکنگ کی ترتیب کیسے کام کرتی ہے۔ پھر کلاس کی بنیادی باتیں جو زیادہ تر ٹیوٹوریلز چھوڑ دیتے ہیں — __eq__ کے بغیر ڈیفالٹ برابری، اور کیوں ایک قابل تبدیل کلاس کی خصوصیت ہر مثال میں مشترک ہے۔"
        },
        "advanced": {
          "name": "ماہرانہ",
          "desc": "یہ وہ سطح ہے جو زیادہ تر نوکری کی پوسٹنگز \"مضبوط Python\" سے مراد رکھتی ہے۔ آپ اسے شکار کیے بغیر صحیح ٹول تک پہنچتے ہیں، آپ جانتے ہیں کہ مشترک حالت کیوں تبدیل ہوئی نہ کہ صرف یہ کہ یہ ہوا، اور آپ کسی اور کے فنکشن کو پڑھ سکتے ہیں اور اس کے آؤٹ پٹ کی صحیح طریقے سے پیش گوئی کر سکتے ہیں۔ یہ بینڈ اوپر سے الگ کرتا ہے دفاعی کام کا پہلو: یہ جاننا کہ دو درست نظر آنے والے طریقوں میں سے کون سا غلط رویہ کرے گا جب ایک کلاس کی خصوصیت، ایک کلیدی لفظ کی صرف آرگومنٹ، یا ایک استثنیٰ کی درخت شامل ہو۔",
          "recommendation": "ان حصوں میں دھکیلیں جو ایک کوڈ بیس کو محفوظ رکھتے ہیں جو دوسرے لوگ بھی چھوتے ہیں: کلیدی لفظ کی صرف آرگومنٹس ایک API ڈیزائن کے انتخاب کے طور پر نہ کہ ایک نحو کی تجسس، استثنیٰ کی درخت (تاکہ except شقیں غلطی کے صحیح خاندان کو پکڑیں، نہ کہ صرف ایک کلاس)، اور سیاق و سباق کے منیجرز صفائی کی ضمانت دینے کے معیاری طریقے کے طور پر۔ Real Python کے گہرائی سے غوطہ لگانے والے مضامین تینوں کے لیے ایک اچھا اگلا قدم ہیں۔"
        },
        "expert": {
          "name": "ماہر",
          "desc": "آپ نے ہر حصے میں اعلیٰ اسکور کیا — بنیادی نحو، فنکشنز اور دائرہ، ڈیٹا سٹرکچرز، اور آبجیکٹ پر مبنی اصطلاحات۔ عملی طور پر، اس کا مطلب ہے کہ آپ کو کسی اور کی فائل دی جا سکتی ہے اور وضاحت کر سکتے ہیں کہ یہ کیوں وہ آؤٹ پٹ تیار کرتا ہے جو یہ کرتا ہے، نہ کہ صرف یہ کہ نحو کیا کہتا ہے کہ یہ کرنا چاہیے، جو سخت اور زیادہ قیمتی مہارت ہے۔ اس سطح پر خام زبان شاذ و نادر ہی آپ کے کام میں محدود عامل ہے؛ حد عام طور پر کوڈ کے ارد گرد نظام کے سائز یا شکل ہے۔",
          "recommendation": "اب واپسی ٹولنگ اور ریویو میں ہے: mypy یا pyright کے ساتھ جامد قسم کی جانچ، بہتری سے پہلے پروفائلنگ کی بجائے اندازہ لگانے کے، اور دوسرے لوگوں کے pull requests کو بالکل اسی زمرے کے بگ کے لیے پڑھنا — وہ جو ہر ٹیسٹ سے گزرتے ہیں اور پھر بھی ایک مخصوص ان پٹ کے تحت غلط کام کرتے ہیں۔ اگر آپ کو کسی کردار کے لیے اسکرین کیا جا رہا ہے، تو اس قسم کا بگ بیان کریں جو آپ نے پایا ہے بجائے زبان کی خصوصیات کا نام دینے کے — یہ صرف الفاظ کی بجائے استدلال کو ظاہر کرتا ہے۔"
        }
      },
      "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": "== کے لیے True، is کے لیے False"
            },
            {
              "icon": "",
              "label": "دونوں کے لیے False"
            },
            {
              "icon": "",
              "label": "is کے لیے True، == کے لیے False"
            }
          ]
        },
        {
          "question": "Python 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 raise کرتا ہے"
            },
            {
              "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": "True"
            },
            {
              "icon": "",
              "label": "False"
            },
            {
              "icon": "",
              "label": "ایک SyntaxError"
            },
            {
              "icon": "",
              "label": "3"
            }
          ]
        },
        {
          "question": "bool([]) کیا واپس کرتا ہے، اور bool([0]) کیا واپس کرتا ہے؟",
          "options": [
            {
              "icon": "",
              "label": "False، پھر False"
            },
            {
              "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 raise کرتا ہے"
            },
            {
              "icon": "",
              "label": "یہ 1 واپس کرتا ہے اور global count کو 1 کر دیتا ہے"
            },
            {
              "icon": "",
              "label": "یہ 1 واپس کرتا ہے؛ global count بدستور 0 رہتا ہے"
            },
            {
              "icon": "",
              "label": "یہ TypeError raise کرتا ہے"
            }
          ]
        },
        {
          "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 کو wrap کرتا ہے، پھر a نتیجے کو wrap کرتا ہے"
            },
            {
              "icon": "",
              "label": "a پہلے f کو wrap کرتا ہے، پھر b نتیجے کو wrap کرتا ہے"
            },
            {
              "icon": "",
              "label": "صرف آخر میں define ہونے والا ہی اثر رکھتا ہے"
            },
            {
              "icon": "",
              "label": "یہ import کی ترتیب پر منحصر ہے"
            }
          ]
        },
        {
          "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 کو yield کرتا ہے، پھر 2 کو yield کرتا ہے، پھر return 99 کرتا ہے۔ list(the_generator()) میں کیا ہے، اور 99 کے ساتھ کیا ہوتا ہے؟",
          "options": [
            {
              "icon": "",
              "label": "[1, 2, 99]، کیونکہ return آخری yield بن جاتا ہے"
            },
            {
              "icon": "",
              "label": "[99]، کیونکہ return، yields کو override کرتا ہے"
            },
            {
              "icon": "",
              "label": "[1, 2]، اور 99 StopIteration کی value بن جاتا ہے"
            },
            {
              "icon": "",
              "label": "یہ RuntimeError raise کرتا ہے"
            }
          ]
        },
        {
          "question": "ایک outer() فنکشن میں، x = 1 سیٹ کیا جاتا ہے، پھر ایک nested inner() nonlocal x; x += 1 کرتا ہے، اور outer() inner() کو کال کرتا ہے x واپس کرنے سے پہلے۔ 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": "ان میں سے کون سا ایک iterator واپس کرتا ہے جو پوری sequence کو ایک ساتھ میموری میں بنانے کی بجائے قدریں سستی سے حساب کرتا ہے: [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": "نہیں"
            },
            {
              "icon": "",
              "label": "یہ ایک error پیدا کرتا ہے"
            },
            {
              "icon": "",
              "label": "صرف اگر deepcopy استعمال ہو"
            },
            {
              "icon": "",
              "label": "ہاں"
            }
          ]
        },
        {
          "question": "d = {'x': 1, 'y': 2}۔ 'x' in d کیا چیک کرتا ہے — keys، values، یا دونوں؟",
          "options": [
            {
              "icon": "",
              "label": "values"
            },
            {
              "icon": "",
              "label": "دونوں keys اور values"
            },
            {
              "icon": "",
              "label": "کوئی نہیں؛ یہ TypeError دیتا ہے"
            },
            {
              "icon": "",
              "label": "keys"
            }
          ]
        },
        {
          "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": "None"
            }
          ]
        },
        {
          "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 محفوظ کرتا ہے اور کوئی اور method نہیں بناتا۔ p1 = Point(1) اور p2 = Point(1)۔ p1 == p2 بطور ڈیفالٹ کیا واپس کرتا ہے؟",
          "options": [
            {
              "icon": "",
              "label": "True"
            },
            {
              "icon": "",
              "label": "False"
            },
            {
              "icon": "",
              "label": "None"
            },
            {
              "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: سے کھولتے ہیں اور بلاک کے اندر پڑھتے وقت ایک exception اٹھتا ہے۔ کیا فائل پھر بھی بند ہوتی ہے؟",
          "options": [
            {
              "icon": "",
              "label": "نہیں"
            },
            {
              "icon": "",
              "label": "صرف اگر ایک اضافی finally شق شامل کی جائے"
            },
            {
              "icon": "",
              "label": "ہاں"
            },
            {
              "icon": "",
              "label": "یہ exception کی قسم پر منحصر ہے"
            }
          ]
        },
        {
          "question": "x = [3, 1, 2] اور y = x.sort()۔ y میں کیا ہے؟",
          "options": [
            {
              "icon": "",
              "label": "[1, 2, 3]"
            },
            {
              "icon": "",
              "label": "None"
            },
            {
              "icon": "",
              "label": "[3, 1, 2]"
            },
            {
              "icon": "",
              "label": "ایک TypeError"
            }
          ]
        },
        {
          "question": "جب آپ 'Score: ' + 42 چلاتے ہیں تو کیا ہوتا ہے؟",
          "options": [
            {
              "icon": "",
              "label": "'Score: 42'"
            },
            {
              "icon": "",
              "label": "'Score: '"
            },
            {
              "icon": "",
              "label": "42"
            },
            {
              "icon": "",
              "label": "یہ ایک TypeError دیتا ہے"
            }
          ]
        },
        {
          "question": "آپ کو چیک کرنا ہے کہ results نامی لسٹ خالی ہے یا نہیں۔ Python کا محاوراتی طریقہ کون سا ہے: 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": "Python ٹیسٹ"
  }
}
