متفرق میرا پراجیکٹ

محمدصابر

محفلین
مجھے اپنے پراجیکٹ کے لئے ایک سے پچاس تک ہندسوں کو جمع کرنا ہے۔ اس کے لئے مجھے جو طریقہ سمجھ آ رہا ہے اس کے مطابق میں اگر ایک متغیر x لوں اور سو دفعہ اس میں ایک جمع کر لوں تو کیا جواب نکل آئے گا اورکیا یہ طریقہ ٹھیک ہو گا؟ جیسے
PHP:
x=1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
print(x)
 

محمداحمد

لائبریرین
میرا خیال ہے آپ ایک ویری ایبل میں ٹوٹل کو جمع کرو الیں اور پھر x کی ویلیو ایک ایک کر کے بڑھا لیجے۔

میں نے یہ چھوٹا سا فنکشن کچھ دنوں پہلے بنایا تھا، جو بالکل سادہ سا ہے۔

PHP:
def sum_up_range(x,y):
    accumulated_total = 0
    while x <= y:
        accumulated_total = accumulated_total + x
        x = x + 1
    return accumulated_total

نتیجہ :

PHP:
>>> sum_up_range(1,5)
15
>>> sum_up_range(1,50)
1275
 

محمدصابر

محفلین
میرا خیال ہے آپ ایک ویری ایبل میں ٹوٹل کو جمع کرو الیں اور پھر x کی ویلیو ایک ایک کر کے بڑھا لیجے۔

میں نے یہ چھوٹا سا فنکشن کچھ دنوں پہلے بنایا تھا، جو بالکل سادہ سا ہے۔

PHP:
def sum_up_range(x,y):
    accumulated_total = 0
    while x <= y:
        accumulated_total = accumulated_total + x
        x = x + 1
    return accumulated_total
مجھے اس کی ہر لائن کی علیحدہ علیحدہ تشریح کر دیں۔ پہلی لائن میں تو آپ نے کچھ ڈیفائن کیا ہے۔ دوسری میں تو یقینا ایک متغیر کو صفر مقدار سے شروع کیا ہے۔ پھر؟؟؟؟
 

محمداحمد

لائبریرین
مجھے اس کی ہر لائن کی علیحدہ علیحدہ تشریح کر دیں۔ پہلی لائن میں تو آپ نے کچھ ڈیفائن کیا ہے۔ دوسری میں تو یقینا ایک متغیر کو صفر مقدار سے شروع کیا ہے۔ پھر؟؟؟؟

اس فنکشن میں ایک رینج کے نمبرز کو آپس میں جمع کیا جائے گا۔ فرض کیجے کہ x کی ویلیو 1 اور y کی ویلیو 5 ۔ تو یہ فنکشن پہلے0 میں1 جمع کرے گا ، پھر 1 میں 2 اور ہر بار حاصل جمع کو accumulated total کے ویری ایبل میں شامل کردے گا۔

یعنی پہلی دفع لوپ چلنے سے پہلے accumulated_total ویری ایبل کی قدر 0 ہے۔ x کی قدر 1 اور y کی قدر 5۔

جب پہلی بار لوپ چلے گا تو x کی قدر کو accumulated_total میں جمع کردیا جائے گا۔ یعنی اب accumulated_total کی ویلیو 1 ہوگئی۔ اور پھر x کی ویلیو میں 1 جمع کردیا جائے گا، اور اس طرح دوسری بار لوپ چلنے سے پہلے x کی ویلیو 2 ہو جائے گی۔

جب دوسری بار لوپ چلے گا تو x جس کی ویلیو اب 2 ہے کو اب accumulated_total جس کی ویلیو 1 ہوگئی تھی جمع کردیا جائے گا اور اس طرح accumulated_total کی ویلیو 3 ہو جائے گی۔

اسی طرح یہ لوپ چلتا رہے گا یہاں تک کے x کی ویلیو y سے بڑی ہو جائے گی اور وائل لوپ ٹرمینیٹ ہو جائے گا۔

آخر میں accumulated_total کی ویلیو ریٹرن کر دی جائے گی۔

پس نوشت: معمولی تدوین کی ہے۔
 

محمداحمد

لائبریرین
مجھے اپنے پراجیکٹ کے لئے ایک سے پچاس تک ہندسوں کو جمع کرنا ہے۔ اس کے لئے مجھے جو طریقہ سمجھ آ رہا ہے اس کے مطابق میں اگر ایک متغیر x لوں اور سو دفعہ اس میں ایک جمع کر لوں تو کیا جواب نکل آئے گا اورکیا یہ طریقہ ٹھیک ہو گا؟ جیسے
PHP:
x=1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
x=x+1
print(x)

ویسے جہاں تک مجھے سمجھ آ رہا ہے (پھر سے غور کرنے پر:)) آپ شاید 1 کو پچاس دفعہ جمع کروانا چاہ رہے ہیں۔ جس کے لئے سادہ ضرب کا فارمولا استعمال ہو سکتا ہے۔ یعنی 1x50۔ اگر میں ٹھیک سمجھ رہا ہوں تو۔

میں نے جو فنکشن لکھا ہے اس میں پہلے 1 میں 2 جمع ہوگا۔ پھر حاصل جمع میں 3، پھر اس کے حاصل جمع میں 4 اور پھر اسی طرح آگے چلے گا یہاں تک کے مطلوبہ ہندسے تک پہنچ جائیں۔

کچھ وضاحت کیجے کہ آپ کو کس طرح کے فنکشن کی ضرورت ہے۔
 

محمدصابر

محفلین
اس فنکشن میں ایک رینج کے نمبرز کو آپس میں جمع کیا جائے گا۔ فرض کیجے کہ x کی ویلیو 1 اور y کی ویلیو 5 ۔ تو یہ فنکشن پہلے0 میں1 جمع کرے گا ، پھر 1 میں 2 اور ہر بار حاصل جمع کو accumulated total کے ویری ایبل میں شامل کردے گا۔

یعنی پہلی دفع لوپ چلنے سے پہلے accumulated_total ویری ایبل کی قدر 0 ہے۔ x کی قدر 1 اور y کی قدر 5۔

جب پہلی بار لوپ چلے گا تو x کی قدر کو accumulated_total میں جمع کردیا جائے گا۔ یعنی اب accumulated_total کی ویلیو 1 ہوگئی۔ اور پھر x کی ویلیو میں 1 جمع کردیا جائے گا، اور اس طرح دوسری بار لوپ چلنے سے پہلے x کی ویلیو 2 ہو جائے گی۔

جب دوسری بار لوپ چلے گا تو x جس کی ویلیو اب 2 ہے کو اب accumulated_total جس کی ویلیو 1 ہوگئی تھی جمع کردیا جائے گا اور اس طرح accumulated_total کی ویلیو 3 ہو جائے گی۔

اسی طرح یہ لوپ چلتا رہے گا یہاں تک کے x کی ویلیو y سے بڑی ہو جائے گی اور وائل لوپ ٹرمینیٹ ہو جائے گا۔

آخر میں accumulated_total کی ویلیو ریٹرن کر دی جائے گی۔

پس نوشت: معمولی تدوین کی ہے۔
لوپ کی وضاحت درکار ہے۔ یہ کیا ہے ، کہاں چلا ہے اور کیسے چلا ہے؟
 

محمداحمد

لائبریرین
لوپ کی وضاحت درکار ہے۔ یہ کیا ہے ، کہاں چلا ہے اور کیسے چلا ہے؟

اس کوڈ میں while loop استعمال ہوا ہے۔ بقول محب علوی بھائی، while بیان ایک ایسا حلقہ ہے جو تب تک چلتا رہتا ہے جب تک اس کی شرط (condition) درست رہتی ہے یعنی جب تک دی گئی شرط (condition) سچ رہتی ہے۔ یہ حلقہ (loop) کی مثال ہے اس میں اختیاری طور پر else جزو بھی ہوتا ہے۔
ربط
اس مثال میں جب تک x کی ویلیو y کے برابر یا کم رہے گی تب تک یہ لوپ چلتا رہے گا، جیسے ہی x کی قدر y کی قدر سے تجاوز کر جائے گی لوپ ٹرمینٹ ہو جائے گا اور اس کے بعد accumulated_total کی ویلیو ریٹرن کر دی جائے گی۔
 
ایک طریقہ کی وضاحت تو محمد احمد نے کر دی ۔ ایک اور طریقہ for لوپ کے استعمال سے واضح ہو جائے گا۔

PHP:
accum_total = 0
for i in range(51):
    accum_total += i
 
print(accum_total)
 
Result:
1275

کوڈ:
for i in range(51):
اس لائن میں for لوپ کو 51 دفعہ چلایا گیا ہے (51 دفعہ چلانے کے لیے range کا فنکشن استعمال ہوا ہے)۔

کوڈ:
accum_total += i
اس کے بعد ایک متغیر (variable) جس کا نام accum_total ہے اس میں ہر بار i کی نئی قیمت کو جمع کرکے رکھا جا رہا ہے۔

آخر میں ہم نے accum_total کی قیمت کو پرنٹ کروا لیا ہے جس میں 0 سے لے کر پچاس تک تمام اعداد کو جمع کرکے رکھا گیا ہے۔
 
اس کے علاوہ ایک اور طریقہ بھی ہے ۔
اگر نمبر جفت (even) ہو تو اس میں سے ایک نفی کر کے اسے طاق (odd) کرلیں، جیسے 50 کو 49 اور اس کا نصف لے کر اوپر کی طرف عدد کو مکمل کرلیں۔ جیسے 49 کا 25
اب 49 کو 25 سے ضرب دے لیں ۔ اور اس میں 50 جمع کرلیں ( جو عدد آپ نے طاق کرنے کیلئے نکالا تھا), اور اگر طاق تھا تو اس کو جمع کرنے کی ضرورت ہی نہیں ۔ اس طرح اگر آپ بڑی رقم کو اس طرح جمع کرنا چاہیں گے تو لمبا لوپ نہیں چلانا پڑے گا۔
کوڈ:
49*25+50 = 1275
 

محمدصابر

محفلین
اس کوڈ میں while loop استعمال ہوا ہے۔ بقول محب علوی بھائی، while بیان ایک ایسا حلقہ ہے جو تب تک چلتا رہتا ہے جب تک اس کی شرط (condition) درست رہتی ہے یعنی جب تک دی گئی شرط (condition) سچ رہتی ہے۔ یہ حلقہ (loop) کی مثال ہے اس میں اختیاری طور پر else جزو بھی ہوتا ہے۔
ربط
اس مثال میں جب تک x کی ویلیو y کے برابر یا کم رہے گی تب تک یہ لوپ چلتا رہے گا، جیسے ہی x کی قدر y کی قدر سے تجاوز کر جائے گی لوپ ٹرمینٹ ہو جائے گا اور اس کے بعد accumulated_total کی ویلیو ریٹرن کر دی جائے گی۔
میں نے آپ والا کوڈ چلایا ہے لیکن کچھ جواب نہیں ملا۔ میں نے کیا غلطی کی؟
کوڈ:
def sum_up_range(x,y):
    accumulated_total = 0
    while x <= y:
        accumulated_total = accumulated_total + x
        x = x + 1
    return accumulated_total
 

محمداحمد

لائبریرین
میں نے آپ والا کوڈ چلایا ہے لیکن کچھ جواب نہیں ملا۔ میں نے کیا غلطی کی؟
کوڈ:
def sum_up_range(x,y):
    accumulated_total = 0
    while x <= y:
        accumulated_total = accumulated_total + x
        x = x + 1
    return accumulated_total

لگتا ہے آپ FAQs تیار کر رہے ہیں۔ :)

آپ نے آرگیومینٹس میں کون کون سی ویلیوز پاس کی تھی؟ آپ اپنی فنکشن کال بھی بتا دیجے۔
 

محمدصابر

محفلین
ایک طریقہ کی وضاحت تو محمد احمد نے کر دی ۔ ایک اور طریقہ for لوپ کے استعمال سے واضح ہو جائے گا۔

PHP:
accum_total = 0
for i in range(51):
    accum_total += i
 
print(accum_total)
 
Result:
1275

کوڈ:
for i in range(51):
اس لائن میں for لوپ کو 51 دفعہ چلایا گیا ہے (51 دفعہ چلانے کے لیے range کا فنکشن استعمال ہوا ہے)۔

کوڈ:
accum_total += i
اس کے بعد ایک متغیر (variable) جس کا نام accum_total ہے اس میں ہر بار i کی نئی قیمت کو جمع کرکے رکھا جا رہا ہے۔

آخر میں ہم نے accum_total کی قیمت کو پرنٹ کروا لیا ہے جس میں 0 سے لے کر پچاس تک تمام اعداد کو جمع کرکے رکھا گیا ہے۔
بہت شکریہ۔ مجھے یہ تو سمجھ آ گئی کہ لوپ کسی ہدایت کو بار بار چلانے کے لئے استعمال ہوتی ہے۔
لیکن پھر بھی دو سوال ہیں۔
ایک آپ نے for لوپ استعمال کیا ہے۔ اوپر محمداحمد نے while لوپ استعمال کیا ہے۔ دونوں میں کیا فرق ہے؟
دوسرا مجھے پچاس تک ہندسوں کا مجموعہ چاہیے آپ نے range میں 51لکھا ہے کیا اس کا مطلب ہے کہ یہ لوپ 51 دفعہ چلے گا؟ یہ کہاں سے شروع ہو گا اور کہاں ختم ہو گا؟
 

محمدصابر

محفلین
لگتا ہے آپ FAQs تیار کر رہے ہیں۔ :)

آپ نے آرگیومینٹس میں کون کون سی ویلیوز پاس کی تھی؟ آپ اپنی فنکشن کال بھی بتا دیجے۔
آرگیومنٹس کیا ہوتے ہیں؟ اور فنکشن کال کا کیا مطلب ہے؟ :) میں نے تو جو آپ نے لکھا تھا اسی طرح کاپی پیسٹ کر کےچلا دیا۔
 

محمدصابر

محفلین
میرا خیال ہے آپ ایک ویری ایبل میں ٹوٹل کو جمع کرو الیں اور پھر x کی ویلیو ایک ایک کر کے بڑھا لیجے۔

میں نے یہ چھوٹا سا فنکشن کچھ دنوں پہلے بنایا تھا، جو بالکل سادہ سا ہے۔

PHP:
def sum_up_range(x,y):
    accumulated_total = 0
    while x <= y:
        accumulated_total = accumulated_total + x
        x = x + 1
    return accumulated_total

نتیجہ :

PHP:
>>> sum_up_range(1,5)
15
>>> sum_up_range(1,50)
1275
میں نے بعد میں دیکھا ہے کہ آپ نے نیچے بھی دو لائنیں لکھیں ہیں۔ اب میں نے کوڈ دوبارہ کاپی پیسٹ کر کے چلایا ہے۔ تو اب پھر مسئلہ آ رہا ہے۔
پہلے یہ کوڈ لکھا ہے
کوڈ:
def sum_up_range(x,y):
    accumulated_total = 0
    while x <= y:
        accumulated_total = accumulated_total + x
    x = x + 1
    return accumulated_total
پھر کمانڈ شیل میں یہ کمانڈ لکھی ہے۔
کوڈ:
sum_up_range(1,5)
لیکن رزلٹ کوئی نہیں۔ کہاں مسئلہ ہے؟
 

محمداحمد

لائبریرین
فی الحال آپ یہ کوڈ کاپی کرکے ایک فائل میں پیسٹ کردیں۔

PHP:
def sum_up_range(x,y):
    accumulated_total = 0
    while x <= y:
        accumulated_total = accumulated_total + x
    x = x + 1
    return accumulated_total

اب اس فائل کو کسی نام سے محفوظ کر لیجے۔ مثلاً test.py

فائل save کرنے کے بعد اسے رن کیجے۔ یہ کام مینو سے بھی ہو سکتا ہے۔

Run < Run Module

اور اس کے لئے آپ F5 کی شارٹ کٹ key بھی استعمال کر سکتے ہیں۔

اب شیل پر یہ فنکشن کال پیسٹ کرکے Enter کیجئے۔ :lol:

PHP:
sum_up_range(1,5)

اگر کوئی ایرر آئے تو وہ بھی یہاں لکھ دیجے گا۔
 

محمداحمد

لائبریرین
سوری صابر بھیا ! ہم نے کوڈ رن کئے بغیر ہی اپنی بات دہرا دی۔

شاید کاپی کے دوران انڈینٹنگ (Indenting) کا فرق آ گیا۔

PHP:
def sum_up_range(x,y):
    accumulated_total = 0
    while x <= y:
        accumulated_total = accumulated_total + x
        x = x + 1
    return accumulated_total

while کے بعد کی 2 لائنز متواتر برابر انڈینٹنگ کے ساتھ آئیں گی، جو کہ پچھلے کوڈ میں آگے پیچھے ہوگئیں تھیں جس کی وجہ سے x کی ویلیو انکریمینٹ نہیں ہو رہی تھی اور یہ لوپ infinite ہو گیا تھا۔
 

محمدصابر

محفلین
سوری صابر بھیا ! ہم نے کوڈ رن کئے بغیر ہی اپنی بات دہرا دی۔

شاید کاپی کے دوران انڈینٹنگ (Indenting) کا فرق آ گیا۔

PHP:
def sum_up_range(x,y):
    accumulated_total = 0
    while x <= y:
        accumulated_total = accumulated_total + x
        x = x + 1
    return accumulated_total

while کے بعد کی 2 لائنز متواتر برابر انڈینٹنگ کے ساتھ آئیں گی، جو کہ پچھلے کوڈ میں آگے پیچھے ہوگئیں تھیں جس کی وجہ سے x کی ویلیو انکریمینٹ نہیں ہو رہی تھی اور یہ لوپ infinite ہو گیا تھا۔
دوسری لائن کو انڈنٹ کرنے سے جواب تو آ گیا ہے لیکن انڈنٹ کرنے سے کیا فرق پڑا؟ آپ کا مطلب ہے کہ پائتھون میں انڈینٹنگ کا بھی کچھ کردار ہے؟
 

محمداحمد

لائبریرین
دوسری لائن کو انڈنٹ کرنے سے جواب تو آ گیا ہے لیکن انڈنٹ کرنے سے کیا فرق پڑا؟ آپ کا مطلب ہے کہ پائتھون میں انڈینٹنگ کا بھی کچھ کردار ہے؟

پائتھون میں جاوا اسکرپٹ وغیرہ کی طرح کوڈ بلاک بنانے کے لئے کرلی بریکٹس وغیرہ استعمال نہیں ہوتے۔ بلکہ پائتھون کوڈ میں موجود "وائٹ اسپیس" کا دانشمندانہ استعمال کرتی ہے۔

اگر کمانڈز کے ایک سلسلے کو ایک ہی جیسی انڈینٹنگ دی جائے تو پائتھون انٹرپریٹر اُسے ایک کوڈ بلاک تصور کرتا ہے اور اسی حساب سے رن کرتا ہے۔ عموماً فنکشن ڈیفائن کرنے کے بعد ایک ٹیب کی انڈینٹنگ دی جاتی ہے، اسی طرح For Loop اور While Loop وغیرہ میں بھی ایک ٹیب کی انڈینٹنگ دی جاتی ہے تاکہ لوپ میں صرف اسی بلاک کی کمانڈز رن ہوں اور باقی ماندہ کمانڈز لوپ ٹرمینیٹ ہونے کے بعد رن کی جائیں۔
 
بہت شکریہ۔ مجھے یہ تو سمجھ آ گئی کہ لوپ کسی ہدایت کو بار بار چلانے کے لئے استعمال ہوتی ہے۔
لیکن پھر بھی دو سوال ہیں۔
ایک آپ نے for لوپ استعمال کیا ہے۔ اوپر محمداحمد نے while لوپ استعمال کیا ہے۔ دونوں میں کیا فرق ہے؟
دوسرا مجھے پچاس تک ہندسوں کا مجموعہ چاہیے آپ نے range میں 51لکھا ہے کیا اس کا مطلب ہے کہ یہ لوپ 51 دفعہ چلے گا؟ یہ کہاں سے شروع ہو گا اور کہاں ختم ہو گا؟

for لوپ تب استعمال کی جاتی جب ہمیں معلوم ہو کہ کسی عمل کو کتنی بار دہرانا ہے یعنی پہلے سے مقررہ تعداد ہو دہرائی کی۔

while لوپ تب استعمال کرتے ہیں جب ہمیں یہ نہ معلوم ہو کہ کتنی بار ایک عمل کو دہرانا ہے مگر یہ معلوم ہو کہ کسی خاص شرط کے غلط ثابت ہونے تک یہ کام کرتے رہنا ہے۔

range کا فنکشن 0 سے لے جس عدد کا قیمت درج ہو اس سے ایک کم عدد تک for لوپ کو چلانے کے کام آتا ہے۔

شروع 0 سے ہوگا اور پچاس پر ختم ہوگا یعنی 51 سے ایک کم نمبر تک لوپ چلے گی۔

محمد احمد کا اندازہ اگر صحیح ہے تو ان تمام سوالات اور جوابات کو بہتر انداز میں جمع اور پیش کرنے کی ہم دونوں توقع رکھیں۔ :)
 

محمدصابر

محفلین
اس کے علاوہ ایک اور طریقہ بھی ہے ۔
اگر نمبر جفت (even) ہو تو اس میں سے ایک نفی کر کے اسے طاق (odd) کرلیں، جیسے 50 کو 49 اور اس کا نصف لے کر اوپر کی طرف عدد کو مکمل کرلیں۔ جیسے 49 کا 25
اب 49 کو 25 سے ضرب دے لیں ۔ اور اس میں 50 جمع کرلیں ( جو عدد آپ نے طاق کرنے کیلئے نکالا تھا), اور اگر طاق تھا تو اس کو جمع کرنے کی ضرورت ہی نہیں ۔ اس طرح اگر آپ بڑی رقم کو اس طرح جمع کرنا چاہیں گے تو لمبا لوپ نہیں چلانا پڑے گا۔
کوڈ:
49*25+50 = 1275
زبردست فارمولہ دیاہے میں یاد رکھوں گالیکن ابرار بھائی میرا پراجیکٹ کے سوال کا کچھ حصہ ابھی باقی ہے۔ جس کے مطابق مجھے صرف انہیں نمبروں کو جمع کرنا تھا جو تین پر تقسیم ہوتے ہوں۔
 
Top