Python 3 سرٹیفائیڈ انجینئر بنیادی امتحان کے لیے درست بنیادی نصابی کتاب کون سی ہے؟
O'Reilly Japan کی شائع کردہ 『Pythonチュートリアル』(Python Tutorial)
Shoeisha کی شائع کردہ 『あたらしいデータ分析の教科書』(The New Textbook of Data Analysis)
Impress کی شائع کردہ 『Pythonデータ分析 実践ハンドブック』(Python Data Analysis Practical Handbook)
Gijutsu-Hyoronsha کی شائع کردہ 『Python実践レシピ』(Python Practical Recipes)
درست جوابA. O'Reilly Japan کی شائع کردہ 『Pythonチュートリアル』(Python Tutorial)
بنیادی امتحان (基礎試験) کی بنیادی نصابی کتاب (主教材) O'Reilly Japan کی 『Pythonチュートリアル』(Python Tutorial) ہے، اور سرکاری صفحے پر بتایا گیا ہے کہ 1 ستمبر 2021 سے یہ امتحان اس کے 4th ایڈیشن کے مطابق ہے۔ امتحانی نصاب (出題範囲) بھی اسی کتاب کے باب نمبروں اور باب کے عنوانات کے ساتھ شائع کیا جاتا ہے، اس لیے تیاری کا طریقہ یہ ہے کہ ہر باب کے وزن کے مطابق کتاب کے مواد پر گرفت حاصل کی جائے۔ Gijutsu-Hyoronsha کی 『Python実践レシピ』(Python Practical Recipes) عملی امتحان کی، Shoeisha کی 『Pythonによるあたらしいデータ分析の教科書』(The New Textbook of Data Analysis with Python) ڈیٹا تجزیہ امتحان کی، اور Impress کی 『Pythonデータ分析 実践ハンドブック』(Python Data Analysis Practical Handbook) ڈیٹا تجزیہ عملی امتحان کی بنیادی نصابی کتاب ہے — یہ سب اسی ادارے کے منعقد کردہ دوسرے امتحانات کی کتابیں ہیں۔ نصابی کتاب میں غلطی ہو جائے تو آپ بلاوجہ نصاب سے باہر کا مواد پڑھتے رہیں گے، اس لیے پہلے یہ بات یقینی بنا لینا بہتر ہے۔
سوال 2 | سب سے زیادہ سوالات والا باب
بنیادی امتحان کے نصاب میں، بنیادی نصابی کتاب کے کس باب سے سب سے زیادہ سوالات آتے ہیں؟
باب 5، "Data Structures"
باب 4، "More Control Flow Tools"
باب 3، "An Informal Introduction to Python"
باب 8، "Errors and Exceptions"
درست جوابB. باب 4، "More Control Flow Tools"
سب سے زیادہ سوالات باب 4، "More Control Flow Tools" سے آتے ہیں، جسے 40 میں سے 9 سوالات دیے گئے ہیں۔ اس کے بعد باب 5، "Data Structures" کے 7، پھر باب 3، "An Informal Introduction to Python" کے 6، اور باب 8، "Errors and Exceptions" کے 4 سوالات ہیں۔ صرف باب 3، 4 اور 5 مل کر 22 سوالات بنتے ہیں، جو کل کے نصف سے زیادہ ہیں۔ اس لیے مطالعے کا زیادہ وقت انہی تین ابواب کو دینا معقول ہے، اور خاص طور پر for اسٹیٹمنٹ اور فنکشن کی تعریف (関数定義) والے باب 4 کو مؤخر کرنا بعد میں پورا کرنا مشکل ہو سکتا ہے۔
سوال 3 | ابواب کے لحاظ سے تقسیم
بنیادی امتحان کے نصاب میں باب 4، "More Control Flow Tools" کا حصہ کتنا ہے؟
17.5%
10.0%
22.5%
15.0%
درست جوابC. 22.5%
باب 4، "More Control Flow Tools" کے 40 میں سے 9 سوالات ہیں، جو 22.5 فیصد بنتے ہیں۔ ابواب میں یہ سب سے بڑا حصہ ہے، اور اس کے بعد باب 5، "Data Structures" کے 7 سوالات یعنی 17.5 فیصد ہیں۔ 15.0 فیصد باب 3، "An Informal Introduction to Python" کے 6 سوالات کے برابر ہے، اور 10.0 فیصد باب 8، "Errors and Exceptions" اور باب 10، "Brief Tour of the Standard Library" میں سے ہر ایک کے 4 سوالات کے برابر ہے۔ یہ تقسیم کوئی عملی اعداد و شمار نہیں بلکہ خود امتحانی نصاب (出題範囲) کے طور پر شائع کی گئی ہے، اس لیے اسے مطالعے کے منصوبے کی بنیاد بنایا جا سکتا ہے۔
سوال 4 | باب 13 کا حصہ
بنیادی امتحان کے نصاب میں باب 13، "What Now?" کے لیے کتنے سوالات مقرر ہیں؟
0 سوالات
1 سوال
4 سوالات
2 سوالات
درست جوابA. 0 سوالات
باب 13، "What Now?" کے 0 سوالات ہیں، یعنی امتحانی نصاب میں یہی واحد باب ہے جس سے کوئی سوال نہیں آتا۔ چونکہ اس کا مواد قاری کو اگلے قدم کی رہنمائی دیتا ہے، اس لیے گرامر جانچنے والے امتحان میں اسے شامل نہیں کیا گیا۔ باب 1، 2، 7، 11، 12 اور 14 کو 1 سوال؛ باب 6 اور 9 کو 2 سوالات؛ اور باب 8، "Errors and Exceptions" اور باب 10، "Brief Tour of the Standard Library" کو 4 سوالات دیے گئے ہیں۔ چونکہ باب 13 کے سوا ہر باب سے کم از کم 1 سوال آتا ہے، اس لیے کم حصے والے ابواب کی اصطلاحات پر بھی کم از کم ایک نظر ڈال کر تیاری کر لینا مفید ہے۔
سوال 5 | print کا sep
درج ذیل پروگرام چلانے پر اسکرین پر کون سی اسٹرنگ دکھائی دے گی؟
print('Python', 3, 'exam', sep='/')
Python3exam
Python 3 exam
Python/3/exam/
Python/3/exam
درست جوابD. Python/3/exam
print() اپنے وصول کردہ آرگیومنٹس کو کی ورڈ آرگیومنٹ (キーワード引数) sep کے ذریعے جوڑتا ہے۔ sep کی ڈیفالٹ قدر ایک ہاف وڈتھ اسپیس ہے، اس لیے اسے متعین نہ کیا جائے تو نتیجہ Python 3 exam ہوتا ہے، لیکن یہاں sep='/' متعین کیا گیا ہے، اس لیے حصے سلیش سے جڑ کر Python/3/exam بنتے ہیں۔ Python3exam وہ آؤٹ پٹ ہے جو sep کو خالی اسٹرنگ رکھنے پر آتا ہے۔ آخر میں بھی جداکار والا Python/3/exam/ تب چنا جاتا ہے جب یہ سمجھا جائے کہ sep ہر عنصر کے بعد لگتا ہے؛ حقیقت میں یہ صرف آرگیومنٹس کے درمیان داخل ہوتا ہے۔ آخر میں جو چیز لگتی ہے وہ end ہے۔
سوال 6 | print کا end
درج ذیل تین سطریں اوپر سے ترتیب وار چلائی جائیں تو اسکرین پر کیا دکھائی دے گا؟
print('A', end='')print('B', end='')print('C')
AB اور C 2 سطروں میں دکھائی دیتے ہیں
ABC ایک ہی سطر میں دکھائی دیتا ہے
A B C ایک ہی سطر میں دکھائی دیتا ہے
A، B، C 3 سطروں میں دکھائی دیتے ہیں
درست جوابB. ABC ایک ہی سطر میں دکھائی دیتا ہے
print() اپنے آؤٹ پٹ کے آخر میں کی ورڈ آرگیومنٹ end لگاتا ہے۔ اس کی ڈیفالٹ قدر نئی سطر کا کیریکٹر (改行文字) ہے، اس لیے اسے متعین نہ کیا جائے تو ہر بار print() بلانے پر نئی سطر لگتی ہے۔ یہاں پہلے دو میں end='' استعمال کر کے نئی سطر روک دی گئی ہے، اس لیے A اور B ساتھ ساتھ دکھائی دیتے ہیں، اور آخری print() ڈیفالٹ نئی سطر لگاتا ہے، اس لیے ABC ایک ہی سطر میں دکھائی دیتا ہے۔ اسپیس کے ساتھ A B C تب آتا ہے جب تینوں کو ایک ہی print() کال میں آرگیومنٹس کے طور پر دیا جائے؛ 3 سطروں میں بٹنا تب ہوتا ہے جب end بالکل متعین نہ کیا جائے؛ اور 2 سطروں میں بٹنا تب ہوتا ہے جب صرف ایک میں سے end='' ہٹا دیا جائے۔
سوال 7 | ان پیک کر کے آؤٹ پٹ
لسٹ کو ان پیک کر کے دکھانے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
nums = [10, 20, 30]print(*nums, sep=', ')
10, 20, 30 دکھائی دیتا ہے
102030 دکھائی دیتا ہے
[10, 20, 30] دکھائی دیتا ہے
10 20 30 دکھائی دیتا ہے
درست جوابA. 10, 20, 30 دکھائی دیتا ہے
ستارہ (asterisk) لگا ہوا print(*nums) لسٹ کے ہر عنصر کو print() کو الگ آرگیومنٹ کے طور پر دیتا ہے (アンパック)۔ چنانچہ تین آرگیومنٹس sep سے جڑتے ہیں، اور چونکہ sep=', ' ہے، نتیجہ 10, 20, 30 ہوتا ہے۔ ستارے کے بغیر print(nums) لکھنے سے لسٹ ایک ہی آرگیومنٹ کے طور پر جاتی ہے، اس لیے وہ مربع بریکٹس سمیت جوں کی توں [10, 20, 30] نکلتی ہے۔ sep متعین نہ کیا جائے تو ڈیفالٹ ہاف وڈتھ اسپیس سے 10 20 30 بنتا ہے، اور sep='' کے ساتھ سب جڑ کر 102030 نکلتا ہے۔
سوال 8 | کمنٹ کی علامت
درج ذیل میں سے کون سا بیان Python کے کمنٹس کو درست طور پر بیان کرتا ہے؟
/* اور */ کے درمیان کا حصہ کمنٹ کے طور پر نظر انداز ہوتا ہے
# سے سطر کے آخر تک سب کچھ کمنٹ کے طور پر نظر انداز ہوتا ہے
-- سے سطر کے آخر تک سب کچھ کمنٹ کے طور پر نظر انداز ہوتا ہے
// سے سطر کے آخر تک سب کچھ کمنٹ کے طور پر نظر انداز ہوتا ہے
درست جوابB. # سے سطر کے آخر تک سب کچھ کمنٹ کے طور پر نظر انداز ہوتا ہے
Python میں کمنٹ (コメント) ہیش کی علامت سے لکھا جاتا ہے، اور وہاں سے سطر کے آخر تک سب کچھ نظر انداز ہوتا ہے۔ اسے سطر کے شروع میں رکھا جائے تو پوری سطر کمنٹ بن جاتی ہے؛ درمیان میں رکھا جائے تو وہاں سے آگے کا حصہ۔ کئی سطروں پر پھیلے کمنٹ کے لیے کوئی خاص سنٹیکس نہیں، اس لیے ہر سطر پر ہیش لگایا جاتا ہے۔ متن کو ٹرپل کوٹس میں بند کرنے کا انداز کبھی کبھی بلاک کمنٹ کے متبادل کے طور پر استعمال ہوتا ہے، لیکن سنٹیکس کے لحاظ سے یہ اسٹرنگ لٹرل ہے، اور اگر اسے فنکشن یا کلاس کے شروع میں رکھا جائے تو یہ رن ٹائم پر docstring کے طور پر محفوظ رہتا ہے۔ ڈبل سلیش Python میں فلور ڈویژن کا آپریٹر ہے، اور سلیش-ستارہ جوڑا یا ڈبل ہائفن دوسری زبانوں کا کمنٹ سنٹیکس ہے۔
سوال 9 | انڈینٹیشن
درج ذیل پروگرام کو فائل میں محفوظ کر کے چلایا جائے تو کیا ہو گا؟
if True: print('one') print('two')
صرف two دکھائی دیتا ہے اور عمل ختم ہو جاتا ہے
صرف one دکھائی دیتا ہے اور عمل ختم ہو جاتا ہے
one اور two اسی ترتیب سے دکھائی دیتے ہیں
IndentationError آتا ہے اور عمل رک جاتا ہے
درست جوابD. IndentationError آتا ہے اور عمل رک جاتا ہے
چونکہ Python بلاک کو انڈینٹیشن (インデント) کی گہرائی سے ظاہر کرتا ہے، اس لیے ایک ہی بلاک کے اسٹیٹمنٹس کی انڈینٹیشن کی چوڑائی یکساں ہونی چاہیے۔ صرف تیسری سطر زیادہ گہری انڈینٹ کی گئی ہے، اور اس سے پہلے والی سطر نیا بلاک شروع کرنے والی (کولن پر ختم ہونے والی) سطر نہیں، اس لیے یہ IndentationError: unexpected indent بن جاتا ہے۔ یہ غلطی چلانے سے پہلے ہونے والے سنٹیکس تجزیے کے دوران پکڑی جاتی ہے، اس لیے دوسری سطر کا print بھی نہیں چلتا اور one تک نہیں دکھائی دیتا۔ جہاں انڈینٹیشن ضروری ہو وہاں انڈینٹ نہ کرنے پر expected an indented block کا الگ پیغام آتا ہے، اور درمیان میں چوڑائی بے میل ہو جانے پر unindent does not match any outer indentation level آتا ہے، لیکن دونوں بھی IndentationError ہی ہیں۔
سوال 10 | کیریکٹر انکوڈنگ
Python 3 سورس فائل کی کیریکٹر انکوڈنگ کے بارے میں درست بیان کون سا ہے؟
Shift_JIS ڈیفالٹ ہے، اور اسے ڈیکلریشن سے بدلا جا سکتا ہے
UTF-8 ڈیفالٹ ہے، اور جاپانی جوں کی توں لکھی جا سکتی ہے
EUC-JP ڈیفالٹ ہے، اور جاپانی جوں کی توں لکھی جا سکتی ہے
ASCII ڈیفالٹ ہے، اور جاپانی شامل کرنے کے لیے ڈیکلریشن ضروری ہے
درست جوابB. UTF-8 ڈیفالٹ ہے، اور جاپانی جوں کی توں لکھی جا سکتی ہے
Python 3 کی سورس فائل ڈیفالٹ طور پر UTF-8 کے طور پر پڑھی جاتی ہے، اس لیے کمنٹس اور اسٹرنگ لٹرلز دونوں میں جاپانی جوں کی توں لکھی جا سکتی ہے۔ Python 2 میں ڈیفالٹ ASCII تھا، اور جاپانی شامل کرنے کے لیے فائل کی پہلی یا دوسری سطر پر coding ڈیکلریشن (エンコーディング宣言) لکھنا پڑتا تھا، لیکن Python 3 میں یہ ڈیکلریشن غیر ضروری ہو گیا۔ ڈیکلریشن صرف تب لکھنا پڑتا ہے جب UTF-8 کے سوا کسی اور کیریکٹر انکوڈنگ میں محفوظ فائل پڑھوانی ہو۔ یاد رہے کہ شناخت کنندگان (متغیر اور فنکشن کے نام) میں بھی جاپانی استعمال ہو سکتی ہے، اگرچہ پڑھنے میں آسانی کے لحاظ سے اس کی سفارش نہیں کی جاتی۔
سوال 11 | تقسیم کی قسم
درج ذیل پروگرام انٹیجرز کی تقسیم کرتا ہے، اور سطر 1 پر قدر اور سطر 2 پر اس کی قسم کا نام دکھاتا ہے۔ درست جوڑا کون سا ہے؟
print(9 / 3)print(type(9 / 3).__name__)
قدر 3.0 ہے، اور قسم int ہے
قدر 3.0 ہے، اور قسم float ہے
قدر 3 ہے، اور قسم int ہے
قدر 3 ہے، اور قسم float ہے
درست جوابB. قدر 3.0 ہے، اور قسم float ہے
ایک سلیش، / ، حقیقی تقسیم (真の除算) ہے، اور اس کا نتیجہ ہمیشہ float ہوتا ہے۔ یہ پوری تقسیم ہونے پر بھی لاگو ہوتا ہے، اس لیے 9 / 3 کا نتیجہ 3 نہیں بلکہ 3.0 ہے، اور اس کی قسم بھی float ہے۔ اگر آپ سمجھیں کہ انٹیجرز کا حساب ہونے کی وجہ سے یہ int بنے گا تو آپ 3 اور int چنیں گے، لیکن int چاہیے ہو تو فلور ڈویژن استعمال کر کے 9 // 3 لکھنا ہو گا، جس سے 3 اور int ملتا ہے۔ ایسے جوڑے جن میں قدر کی شکل اور قسم میل نہ کھائیں، جیسے 3 اور float، یا 3.0 اور int، اس ایکسپریشن سے پیدا نہیں ہوتے۔
سوال 12 | منفی اعداد کی فلور ڈویژن
فلور ڈویژنز کو ساتھ ساتھ دکھانے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
print(9 // 4)print(-9 // 4)
سطر 1: 2.0، سطر 2: -3.0
سطر 1: 2، سطر 2: -3
سطر 1: 2.25، سطر 2: -2.25
سطر 1: 2، سطر 2: -2
درست جوابB. سطر 1: 2، سطر 2: -3
ڈبل سلیش، // ، فلور ڈویژن (床除算) ہے، اور یہ حاصلِ تقسیم کو نیچے کی طرف، یعنی عددی خط پر چھوٹی جانب، گول کرتی ہے۔ چونکہ 9 / 4 کا نتیجہ 2.25 ہے، اس لیے 9 // 4 کا نتیجہ 2 ہے؛ اور چونکہ -9 / 4 کا نتیجہ -2.25 ہے، اس لیے -9 // 4 کا نتیجہ -2 نہیں بلکہ -3 ہوتا ہے۔ اہم نکتہ یہ ہے کہ یہ 0 کی طرف گول نہیں کرتی؛ -2 تب چنا جاتا ہے جب یہ سمجھا جائے کہ یہ C کی طرح 0 کی طرف گول کرتی ہے۔ 2.25 اور -2.25 وہ قدریں ہیں جو // کی جگہ / استعمال کرنے سے ملتی ہیں، اور 2.0 اور -3.0 وہ قدریں ہیں جو float آپرینڈ شامل کر کے 9.0 // 4 لکھنے سے ملتی ہیں — جب دونوں طرف int ہو تو نتیجہ بھی int ہوتا ہے۔
سوال 13 | divmod
divmod(-11, 3) کون سی قدر واپس کرتا ہے؟
(-4, 1)
(-3, -2)
(-4, -2)
(-3, 2)
درست جوابA. (-4, 1)
divmod(a, b) ٹپل (a // b, a % b) واپس کرتا ہے۔ چونکہ Python کا // نیچے کی طرف گول کرتا ہے، اس لیے -11 // 3 کا نتیجہ -4 ہوتا ہے، اور چونکہ باقی (剰余) کی علامت دائیں جانب والے عدد کے مطابق ہوتی ہے، اس لیے -11 % 3 کا نتیجہ 1 ہوتا ہے۔ چنانچہ جواب (-4, 1) ہے۔ اگر 0 کی طرف گول کرنے کے انداز سے سوچا جائے تو حاصلِ تقسیم -3 اور باقی -2 آتا ہے، یعنی (-3, -2)، لیکن Python یہ طریقہ استعمال نہیں کرتا۔ حاصلِ تقسیم اور باقی ہمیشہ اس تعلق کو برقرار رکھتے ہیں کہ مقسوم علیہ ضرب حاصلِ تقسیم جمع باقی اصل قدر کے برابر ہو، اس لیے 3 ضرب -4 جمع 1 برابر -11 سے جانچ کی جا سکتی ہے۔ اس تعلق سے جانچیں تو نہ (-3, 2) اور نہ (-4, -2) واپس -11 بنتے ہیں۔
سوال 14 | int سے کٹائی
کٹائی (切り捨て) کی سمتوں کا موازنہ کرنے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
print(int(-2.7))print(-2.7 // 1)
سطر 1: -2، سطر 2: -2.0
سطر 1: -3، سطر 2: -3.0
سطر 1: -2، سطر 2: -3.0
سطر 1: -3، سطر 2: -2.0
درست جوابC. سطر 1: -2، سطر 2: -3.0
بلٹ اِن فنکشن (組み込み関数) int() کسری حصہ ہٹا کر 0 کی طرف گول کرتا ہے، اس لیے int(-2.7) کا نتیجہ -3 نہیں بلکہ -2 ہوتا ہے۔ دوسری طرف // نیچے کی طرف گول کرتا ہے، اس لیے -2.7 // 1 کا نتیجہ -3 کی طرف جاتا ہے، اور چونکہ float آپرینڈ شامل ہے، اس لیے نتیجہ بھی float یعنی -3.0 ہوتا ہے۔ مثبت اعداد میں int(2.7) اور 2.7 // 1 دونوں 2 کی طرف جاتے ہیں، اس لیے فرق نظر نہیں آتا، لیکن منفی اعداد میں سمتیں الگ ہو جاتی ہیں۔ ان میں سے کوئی بھی قریب ترین عدد کی طرف گول نہیں کرتا، اس لیے -2.7 کو -3 بنانا ہو تو round(-2.7) استعمال کرنا چاہیے۔
سوال 15 | اعشاریہ کی خطا
دو سطروں پر بولین قدریں دکھانے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
چونکہ float اعشاری اعداد کو بائنری میں رکھتا ہے، اس لیے اعشاری نظام میں سادہ نظر آنے والی قدریں، جیسے 0.1 یا 0.7، بالکل درست طور پر ظاہر نہیں ہو سکتیں۔ دراصل 0.1 + 0.7 دکھانے پر 0.7999999999999999 آتا ہے، جو 0.8 سے تھوڑا مختلف ہے، اس لیے سطر 1 False ہے۔ سطر 2 موازنے سے پہلے round() سے 2 اعشاری مقامات تک گول کرتی ہے، اس لیے دونوں طرف 0.8 بنتا ہے اور نتیجہ True ہے۔ یہ Python کی کوئی خاص خرابی نہیں بلکہ IEEE 754 بائنری فلوٹنگ پوائنٹ (浮動小数点数) کی خاصیت ہے، اور اسی وجہ سے 0.1 + 0.2 کا نتیجہ 0.30000000000000004 اور 1.1 + 2.2 کا نتیجہ 3.3000000000000003 ہوتا ہے۔ float پر برابری کا موازنہ کرنے سے بچیں؛ اس کے بجائے ضروری ہندسوں تک گول کر کے موازنہ کریں، مطلق فرق کو کسی رواداری (tolerance) سے موازنہ کریں، یا رقم جیسے معاملات میں جہاں درستی لازمی ہو، decimal ماڈیول استعمال کریں۔
سوال 16 | round سے گول کرنا
گول کی ہوئی قدریں ایک سطر میں دکھانے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
print(round(1.5), round(2.5), round(3.5))
2 2 4
2 3 4
1 3 3
1 2 3
درست جوابA. 2 2 4
Python کا round() قریب ترین جفت عدد کی طرف گول کرتا ہے، جسے banker's rounding (銀行家の丸め) کہا جاتا ہے۔ صرف بالکل درمیان والی قدروں پر یہ قریب والے جفت عدد کی طرف جاتا ہے، اس لیے 1.5 کا 2، 2.5 کا 2، اور 3.5 کا 4 بنتا ہے، اور آؤٹ پٹ 2 2 4 ہوتا ہے۔ اسکول میں سکھایا جانے والا گول کرنا (四捨五入) 2 3 4 دیتا، لیکن Python یہ طریقہ استعمال نہیں کرتا۔ 1 2 3 وہ قدر ہے جو کسری حصہ سیدھا کاٹ دینے سے آتی ہے، اور 1 3 3 وہ قدر ہے جو طاق کی طرف گول کرنے سے آتی ہے؛ دونوں میں سے کوئی بھی اصل رویے سے میل نہیں کھاتی۔ یاد رہے کہ دوسرا آرگیومنٹ چھوڑ دیا جائے تو round() ایک int واپس کرتا ہے، جبکہ round(2.5, 0) کی طرح ہندسوں کی تعداد متعین کرنے پر float 2.0 واپس کرتا ہے۔
سوال 17 | bool بھی int ہے
بولین قدروں کو اعداد کے طور پر استعمال کرنے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
print(True + True)print(isinstance(True, int))
سطر 1: True، سطر 2: True
سطر 1: 2، سطر 2: False
سطر 1: 2، سطر 2: True
سطر 1: True، سطر 2: False
درست جوابC. سطر 1: 2، سطر 2: True
چونکہ bool، int سے وراثت (継承) لیتا ہے، اس لیے True کو عددی عملیات میں براہِ راست انٹیجر 1 کے طور پر اور False کو انٹیجر 0 کے طور پر استعمال کیا جا سکتا ہے۔ True + True کا مطلب 1 جمع 1 ہے، جس سے 2 ملتا ہے، اور isinstance(True, int) بھی True واپس کرتا ہے۔ سطر 1 کو True سمجھنا تب ہوتا ہے جب + کو منطقی OR سمجھ لیا جائے؛ Python کا منطقی OR، or ہے، اور True or True کا نتیجہ True ہے۔ issubclass(bool, int) بھی True ہے، اور sum([True, False, True]) کا 2 بننا بھی اسی وجہ سے ہے۔ یہ خاصیت اکثر یہ گننے کے لیے استعمال ہوتی ہے کہ کتنی شرائط پوری ہوئیں۔
سوال 18 | انٹیجر کی درستی
Python 3 کی int قسم کا درست بیان کون سا ہے؟
ہندسوں کی تعداد کی کوئی بالائی حد نہیں، اور میموری جتنی اجازت دے اتنی بڑی قدریں سنبھالی جا سکتی ہیں
32 بٹس سے بڑی قدریں اوور فلو ہو کر منفی بن سکتی ہیں
ہندسوں کی تعداد ایک بالائی حد سے بڑھتے ہی OverflowError آتا ہے
64 بٹس سے آگے حساب کے لیے یہ خود بخود float میں بدل جاتا ہے
درست جوابA. ہندسوں کی تعداد کی کوئی بالائی حد نہیں، اور میموری جتنی اجازت دے اتنی بڑی قدریں سنبھالی جا سکتی ہیں
Python 3 کا int لامحدود درستی (任意精度) رکھتا ہے، اور اس کے ہندسوں کی تعداد کی کوئی بالائی حد نہیں۔ 3 ** 40 کا حساب بالکل درست طور پر 12157665459056928801 آتا ہے، جو signed 64-bit قدر کی حد سے باہر ہے، لیکن اس کی قسم int ہی رہتی ہے۔ یہ 2 ** 1000 جیسی قدر بھی سنبھال سکتا ہے، اور len(str(2 ** 1000)) سے اس کے ہندسے گنیں تو 302 ہندسے آتے ہیں۔ چونکہ یہ C کی طرح مقررہ لمبائی کا انٹیجر نہیں، اس لیے نہ کبھی اوور فلو ہو کر منفی بنتا ہے اور نہ خود بخود float میں بدلتا ہے۔ OverflowError ایسی صورتوں میں آتا ہے جیسے float کی ظاہر کی جا سکنے والی حد سے تجاوز؛ صرف int کے ہندسے بڑھنے سے یہ نہیں آتا۔ البتہ ہندسے بڑھنے کا مطلب زیادہ حسابی وقت اور میموری ضرور ہے۔
سوال 19 | bytes کی انڈیکسنگ
بائٹ اسٹرنگ کو استعمال کرنے والے درج ذیل پروگرام کے آؤٹ پٹ کی سطر 1 اور سطر 2 کیا ہیں؟
b = 'abc'.encode()print(b[0])print(b[0:1])
سطر 1: b'a'، سطر 2: b'a'
سطر 1: 97، سطر 2: b'a'
سطر 1: 97، سطر 2: 97
سطر 1: a، سطر 2: b'a'
درست جوابB. سطر 1: 97، سطر 2: b'a'
bytes تک انٹیجر انڈیکس (添字) سے رسائی کرنے پر اس مقام کی بائٹ قدر int کے طور پر واپس آتی ہے۔ 'abc' کو UTF-8 میں انکوڈ کرنے سے بننے والے b'abc' کی پہلی بائٹ 'a' کا کوڈ پوائنٹ ہے، اس لیے یہ 97 ہے۔ اس کے برعکس سلائس سے نکالنے پر لمبائی 1 کا bytes آبجیکٹ واپس آتا ہے، اس لیے b[0:1] کا نتیجہ b'a' ہے۔ str میں s[0] اور s[0:1] دونوں ایک ہی str یعنی 'a' دیتے ہیں، اس لیے یہی وہ نکتہ ہے جہاں str اور bytes ایک دوسرے کے برعکس ہیں۔ ڈسپلے a کے بجائے b'a' آنے کی وجہ یہ ہے کہ print()، bytes کو repr شکل میں دکھاتا ہے؛ اسے واپس اسٹرنگ بنانا ہو تو b.decode() استعمال کریں۔
سوال 20 | اساس اور کیریکٹرز
اساس کی تبدیلی (基数変換) اور کیریکٹر کوڈ کی تبدیلی کو ساتھ ساتھ دکھانے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
int() کا دوسرا آرگیومنٹ اساس (base) ہے، اس لیے int('1010', 2) اسٹرنگ کو اساس 2 کے طور پر پڑھ کر 10 واپس کرتا ہے۔ اسے 1010 ہی سمجھنا تب ہوتا ہے جب متعین کردہ اساس نظر انداز ہو جائے۔ bin() سابقہ 0b والی اسٹرنگ '0b1010' واپس کرتا ہے، اور hex() سابقہ 0x والی چھوٹے حروف کی اسٹرنگ '0xff' واپس کرتا ہے۔ یہ کبھی بڑے حروف والا 0xFF نہیں بنتا؛ بڑے حروف کی شکل چاہیے ہو تو format(255, 'X') استعمال کریں۔ ord() کسی کیریکٹر کا کوڈ پوائنٹ واپس کرتا ہے، اور بڑے A کا کوڈ پوائنٹ 65 ہے۔ 97 چھوٹے a کا کوڈ پوائنٹ ہے؛ الٹی تبدیلی chr(65) ہے، جو واپس 'A' دیتی ہے۔
سوال 21 | سلائسنگ
اسٹرنگ کی سلائسنگ استعمال کرنے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
s = 'Pythonic'print(s[2:5])print(s[-3:])
سطر 1: tho، سطر 2: nic
سطر 1: tho، سطر 2: ic
سطر 1: thon، سطر 2: nic
سطر 1: yth، سطر 2: nic
درست جوابA. سطر 1: tho، سطر 2: nic
s[2:5] انڈیکس 2 سے شروع ہو کر انڈیکس 5 تک کے عناصر لیتا ہے، لیکن آخری انڈیکس شامل نہیں ہوتا۔ چونکہ 'Pythonic' کا انڈیکس 2، t ہے، اس لیے t، h اور o کے تین کیریکٹرز مل کر tho بنتے ہیں۔ آخری مقام شامل نہ ہونے کی وجہ سے یہ thon نہیں بنتا۔ اگر انڈیکس کو 1 سے گنا جائے، گویا "کیریکٹر نمبر 2 سے" شروع ہو، تو آپ yth چنیں گے، جو s[1:4] کے برابر ہے۔ s[-3:] منفی انڈیکس استعمال کرتا ہے، اس لیے یہ آخر سے گنتا ہے اور آخر سے کیریکٹر نمبر 3، یعنی n کو نقطۂ آغاز بنا کر آخر تک لیتا ہے، یعنی nic۔ -3 کو "آخر سے کیریکٹر نمبر 3 تک" سمجھنے کی غلطی ic چنواتی ہے، جو s[-2:] کے برابر ہے۔ یہ یاد رکھنا کہ انڈیکس 0 سے شروع ہوتے ہیں، اور منفی انڈیکس آخر سے گنے جاتے ہیں جن میں -1 آخری کیریکٹر ہے، الجھن سے بچاتا ہے۔
سوال 22 | حد سے باہر اور in
جانچ کے دو نتائج دکھانے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
s = 'Python'print(s[100:200] == '')print('py' in s)
سطر 1: True، سطر 2: False
سطر 1: True، سطر 2: True
سطر 1: False، سطر 2: True
سطر 1: False، سطر 2: False
درست جوابA. سطر 1: True، سطر 2: False
سلائس کی حد اسٹرنگ کی لمبائی سے بڑھ جائے تب بھی کوئی ایکسیپشن (例外) نہیں آتا؛ یہ صرف مشترک حصہ واپس کرتا ہے۔ 'Python' میں صرف 6 کیریکٹرز ہیں، اس لیے s[100:200] خالی اسٹرنگ بنتا ہے، اور خالی اسٹرنگ سے موازنہ True دیتا ہے۔ اس کے برعکس اکیلا انڈیکس s[100] ہوتا تو IndexError آتا۔ سطر 2 میں in آپریٹر ذیلی اسٹرنگ (部分文字列) کی موجودگی جانچتا ہے، لیکن یہ بڑے اور چھوٹے حروف میں فرق کرتا ہے، اس لیے چھوٹے حروف والا 'py'، 'Python' میں شامل نہیں اور نتیجہ False ہے۔ 'Py' یا 'th' ہوتا تو True آتا۔
سوال 23 | اسٹرنگز ناقابلِ تبدیل ہیں
درج ذیل پروگرام کو فائل میں لکھ کر چلایا جائے تو کیا ہو گا؟
s = 'abc's[0] = 'z'print(s)
TypeError آتا ہے اور اسائنمنٹ ناکام ہو جاتی ہے
یہ zbc سے بدل کر دکھایا جاتا ہے
IndexError آتا ہے اور اسائنمنٹ ناکام ہو جاتی ہے
یہ بغیر تبدیلی کے abc کے طور پر دکھایا جاتا ہے
درست جوابA. TypeError آتا ہے اور اسائنمنٹ ناکام ہو جاتی ہے
str ناقابلِ تبدیل (immutable، イミュータブル) ہے، یعنی بننے کے بعد اس کا مواد بدلا نہیں جا سکتا، اس لیے انڈیکس سے صرف ایک کیریکٹر دوبارہ نہیں لکھا جا سکتا۔ s[0] = 'z' کا نتیجہ TypeError: 'str' object does not support item assignment ہوتا ہے اور عمل وہیں رک جاتا ہے، اس لیے print بھی نہیں چلتا۔ IndexError وہ ہے جو انڈیکس حد سے باہر ہونے پر آتا ہے، لیکن یہاں 0 درست حد کے اندر ہے، اس لیے یہ الگ معاملہ ہے۔ مواد بدلنا ہو تو s = 'z' + s[1:] کی طرح نئی اسٹرنگ بنا کر دوبارہ اسائن کریں۔ لسٹ قابلِ تبدیل (mutable) ہے، اس لیے اس کا عنصر اسی طرح دوبارہ لکھا جا سکتا ہے۔
سوال 24 | میتھڈ کی ریٹرن ویلیو
اسٹرنگ میتھڈز بلانے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
s = 'exam's.upper()print(s)print(s.replace('e', 'E'))
سطر 1: EXAM، سطر 2: Exam
سطر 1: EXAM، سطر 2: EXAM
سطر 1: exam، سطر 2: exam
سطر 1: exam، سطر 2: Exam
درست جوابD. سطر 1: exam، سطر 2: Exam
اسٹرنگ میتھڈ اصل اسٹرنگ کو دوبارہ نہیں لکھتا؛ یہ نئی اسٹرنگ بنا کر واپس کرتا ہے (戻り値)۔ سطر 2 پر s.upper()، 'EXAM' بناتا ہے، لیکن چونکہ یہ کہیں اسائن نہیں کیا گیا، وہ قدر ضائع ہو جاتی ہے اور s بدستور 'exam' رہتا ہے۔ چنانچہ print(s)، exam دکھاتا ہے۔ سطر 4، s.replace('e', 'E') کی ریٹرن ویلیو براہِ راست دکھاتی ہے، اس لیے Exam نکلتا ہے، لیکن یہ بھی خود s کو نہیں بدلتا۔ نتیجہ رکھنا ہو تو s = s.upper() کی طرح دوبارہ اسائن کریں۔ یہ لسٹ کے sort() جیسے میتھڈ کے برعکس ہے، جو اپنی جگہ پر ترتیب بدلتا ہے اور None واپس کرتا ہے۔
سوال 25 | f-string
فارمیٹ متعین کر کے دکھانے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
n = 2.71828print(f'{n:.2f}')print(f'{"ok"!r}')
سطر 1: 2.71، سطر 2: 'ok'
سطر 1: 2.72، سطر 2: ok
سطر 1: 2.718، سطر 2: ok
سطر 1: 2.72، سطر 2: 'ok'
درست جوابD. سطر 1: 2.72، سطر 2: 'ok'
f-string کا فارمیٹ اسپیسیفائر (書式指定) :.2f دکھانے کے لیے 2 اعشاری مقامات تک گول کرتا ہے، اس لیے 2.71828 کا 2.72 بنتا ہے۔ چونکہ یہ کٹائی نہیں، اس لیے 2.71 نہیں بنتا، اور 2.718 وہ قدر ہے جو :.3f لکھنے سے ملتی۔ سطر 2 پر !r ایک کنورژن اسپیسیفائر ہے جو قدر کو repr() شکل میں دکھاتا ہے۔ اسٹرنگ پر استعمال کرنے سے کوٹس لگ جاتے ہیں، اس لیے 'ok' آتا ہے؛ !r کے بغیر صرف ok نکلتا ہے۔ فارمیٹ اسپیسیفائر کا سنٹیکس str.format() کے ساتھ مشترک ہے، اس لیے '{n:.2f}'.format(n=2.71828) لکھنے سے بھی وہی 2.72 ملتا ہے۔
سوال 26 | split
اسٹرنگز کو تقسیم کرنے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
print('a b c'.split())print('a,b,c'.split(',', 1))
['a', 'b', 'c'] اور ['a', 'b', 'c']
['a', 'b', '', 'c'] اور ['a', 'b,c']
['a', 'b', 'c'] اور ['a', 'b,c']
['a', 'b', '', 'c'] اور ['a', 'b', 'c']
درست جوابC. ['a', 'b', 'c'] اور ['a', 'b,c']
split() کو بغیر آرگیومنٹ کے بلانے پر یہ لگاتار وائٹ اسپیس (空白) کے سلسلے کو ایک ہی جداکار مانتا ہے اور خالی عناصر نہیں بناتا۔ چنانچہ 'a b c'.split() 3 عناصر والی ['a', 'b', 'c'] بنتی ہے۔ جب جداکار واضح طور پر متعین کر کے 'a b c'.split(' ') لکھا جائے تو یہ ہر ایک اسپیس پر تقسیم کرتا ہے، اس لیے ایک خالی اسٹرنگ بچ جاتی ہے، اور 4 عناصر والی ['a', 'b', '', 'c'] بنتی ہے۔ دوسرا آرگیومنٹ maxsplit ہے، جو تقسیم کی تعداد کی بالائی حد ظاہر کرتا ہے؛ 1 دینے سے صرف پہلی بار تقسیم ہوتی ہے، اور ['a', 'b,c'] بنتی ہے، جس میں باقی حصہ بغیر تقسیم ایک عنصر رہتا ہے۔ اسے چھوڑ دیا جائے تو سب تقسیم ہو کر ['a', 'b', 'c'] بنتی ہے۔
سوال 27 | strip
دونوں سروں سے کیریکٹرز ہٹانے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
strip() کا آرگیومنٹ "ہٹائے جانے والے کیریکٹرز کا مجموعہ (集合)" ہے، اور جب تک اس مجموعے کا کوئی کیریکٹر آتا رہے، یہ دونوں سروں سے ہٹاتا رہتا ہے۔ یہ ذیلی اسٹرنگ 'x' کا ایک ہی وقوعہ نہیں ہٹاتا، اس لیے 'xxabxx'.strip('x') دونوں سروں سے تمام x ہٹا کر ab دیتا ہے۔ اگر آپ سمجھیں کہ یہ ایک وقت میں صرف ایک کیریکٹر ہٹاتا ہے تو آپ xabx چنیں گے۔ lstrip() صرف بائیں سرے کو نشانہ بناتا ہے، اور abxx دیتا ہے، جبکہ rstrip() صرف دائیں سرے کو، اور xxab دیتا ہے۔ آرگیومنٹ چھوڑ دیا جائے تو وائٹ اسپیس کیریکٹرز ہٹائے جاتے ہیں۔ چونکہ اسے مجموعے کے طور پر لیا جاتا ہے، اس لیے 'xxabxx'.strip('xa') لکھنے سے شروع کے xx اور a بھی ہٹ جاتے ہیں اور صرف b بچتا ہے۔
سوال 28 | join اور تکرار
اسٹرنگز کو جوڑنے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
print('-'.join('abc'))print('ab' * 3)
سطر 1: -a-b-c-، سطر 2: ababab
سطر 1: abc، سطر 2: ababab
سطر 1: a-b-c، سطر 2: ab ab ab
سطر 1: a-b-c، سطر 2: ababab
درست جوابD. سطر 1: a-b-c، سطر 2: ababab
join() بلانے والی اسٹرنگ کو جداکار کے طور پر استعمال کرتا ہے، اور دیے گئے iterable (イテラブル) کے ہر عنصر کو جوڑتا ہے۔ اسٹرنگ بھی ایک iterable ہے جس سے ایک ایک کیریکٹر نکالا جا سکتا ہے، اس لیے '-'.join('abc')، 'a'، 'b' اور 'c' کو ہائفن سے جوڑ کر a-b-c دیتا ہے۔ جداکار صرف عناصر کے درمیان داخل ہوتا ہے، آگے یا پیچھے نہیں، اس لیے -a-b-c- نہیں بنتا۔ جداکار کے بغیر abc تب ملتا ہے جب ''.join('abc') لکھا جائے۔ * آپریٹر اسٹرنگ کو متعین تعداد میں دہراتا ہے، اس لیے 'ab' * 3 کا نتیجہ ababab ہے، جس کے درمیان کوئی اسپیس نہیں ہوتی۔ ab ab ab چاہیے ہو تو ' '.join(['ab'] * 3) لکھیں۔
سوال 29 | find اور index
ذیلی اسٹرنگ تلاش کرنے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
ذیلی اسٹرنگ نہ ملنے پر find()، -1 واپس کرتا ہے اور کوئی ایکسیپشن نہیں اٹھاتا۔ 'banana' میں 'z' نہیں ہے، اس لیے نتیجہ -1 ہے۔ 0 وہ قدر ہے جو بالکل شروع میں ملنے پر آتی ہے، اس لیے اسے نہ ملنے کی صورت سے نہ ملائیں۔ index() بھی find() کی طرح ملنے کا مقام واپس کرتا ہے؛ 'banana' میں 'n' پہلی بار انڈیکس 2 پر آتا ہے، اس لیے نتیجہ 2 ہے۔ 3 تب آتا ہے جب انڈیکس کو 1 سے گن کر "کیریکٹر نمبر 3" سمجھا جائے، اور 4 آخری وقوعے کا مقام ہے، جو rfind() یا rindex() سے ملتا۔ دونوں میں فرق صرف نہ ملنے کی صورت کا ہے: index()، ValueError: substring not found اٹھا کر عمل روک دیتا ہے۔
سوال 30 | خام اسٹرنگز
کیریکٹرز گننے والے درج ذیل پروگرام کا آؤٹ پٹ کیا ہے؟
print(len(r'a\nb'), len('a\nb'))
3 4
4 4
3 3
4 3
درست جوابD. 4 3
لٹرل سے پہلے r لگا کر بننے والی خام اسٹرنگ (raw string، raw文字列) میں بیک سلیش کو ایسکیپ سیکوئنس (エスケープシーケンス) کا آغاز نہیں سمجھا جاتا۔ r'a\nb'، a، بیک سلیش، n اور b کے 4 کیریکٹرز ہیں، اس لیے اس کا len، 4 ہے۔ دوسری طرف عام اسٹرنگ 'a\nb' میں \n ایک نئی سطر کے کیریکٹر سے بدل جاتا ہے، اس لیے یہ a، نئی سطر اور b کے 3 کیریکٹرز ہیں، اور len، 3 ہے۔ دونوں کو ایسکیپ مان کر گنیں تو 3 3 آتا ہے، اور دونوں کو خام کیریکٹرز مان کر گنیں تو 4 4، لیکن اہم نکتہ یہ ہے کہ r کی موجودگی سلوک بدل دیتی ہے۔ r کے ساتھ بھی قسم عام str ہی رہتی ہے؛ کوئی خاص قسم نہیں بنتی۔ یاد رہے کہ len('\\') کا نتیجہ 1 ہے، کیونکہ ایک لفظی بیک سلیش کیریکٹر لکھنے کے لیے دو بیک سلیش درکار ہوتے ہیں۔
مشق: اس صفحے کے سوالات حل کریں
یہ بے ترتیب سوالات والا مشق کا ٹول ہے (JavaScript فعال ہونے پر کام کرتا ہے)۔ اوپر دیے گئے تمام سوالات اور وضاحتیں اس کے بغیر بھی پڑھی جا سکتی ہیں۔
※ وضاحتیں مطالعے کے مقصد کے لیے معلومات ہیں۔ امتحان کا نصاب اور نظام سال بہ سال بدل سکتا ہے، اس لیے امتحان منعقد کرنے والے ادارے کے سرکاری اعلانات ضرور دیکھیں۔
یہ صفحہ جاپانی اصل متن کا ترجمہ ہے۔ اگر ترجمے اور اصل متن میں فرق ہو تو جاپانی ورژن کو ترجیح دی جائے گی۔ یہ ترجمہ AI کی مدد سے کیا گیا ہے اور اس میں غلطیاں ہو سکتی ہیں۔ترجمے کی غلطی کی اطلاع دیںجاپانی اصل متن دیکھیں