اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

هذا بسبب اختلاف المسافات البادئة في الشيفرة التي لديك وتلك لدى صاحب المثال المرفق، فالمسافات البادئة في بايثون مهمة وتحدد مختلف الكتل ومستواها، أصلح ذلك ليكون:

num = 1 
for i in range(0,4):
    for j in range(0, i +1):
        print(num, end = ' ')
        num+=1
    print()    

وليس:

num = 1 
for i in range(0,4):
    for j in range(0, i +1):
        print(num, end = ' ')
        num+=1
        print()    

 

  • 0
نشر

لديك مشكلة في استخدام دالة print() حيث تم وضع print() داخل الحلقة الداخلية for j in range(0, i +1)، مما يجعلها تقوم بالطباعة في كل دورة داخل الحلقة الخارجية for i in range(0,4).

وعليك وضع print() خارج الحلقة الداخلية لتتم الطباعة بعد انتهاء الحلقة الداخلية، وبالتالي طباعة الأرقام بشكل صحيح وفقًا للشكل الهرمي المطلوب.

ويمكن كتابة الكود بشكل أفضل من خلال استخدام متغير rows لتحديد عدد الصفوف المطلوبة في الهرم، مما يجعل من السهل تغيير عدد الصفوف إذا كنت بحاجة إلى ذلك، كما يقلل من استخدام الأرقام السحرية (مثل العدد 4 في range(4))، مما يجعله أكثر قابلية للصيانة والتعديل.

num = 1
rows = 4

for i in range(rows):
    for j in range(i + 1):
        print(num, end=' ')
        num += 1
    print()

 

  • 0
نشر

يمكنك تعديل الكود ليعمل بشكل صحيح كما يلي:

num = 1
for i in range(0, 4):
    for j in range(0, i + 1):
        print(num, end=' ')
        num += 1
    print()

هذا الكود سيقوم بطباعة الأرقام بشكل مثلثي تصاعدي كما تم توضيحه في النمط الذي ذكرته:

1        //للإنتقال للسطر الجديد print() الداخلية وسيتم استدعاء  loop انتهى تنفيذ ال 
2 3      //للإنتقال للسطر الجديد print() الداخلية وسيتم استدعاء  loop انتهى تنفيذ ال 
4 5 6    //نفس الخطوة
7 8 9 10 //نفس الخطوة

المتغير "num" يبدأ من القيمة 1 ويتزايد بمقدار واحد في كل تكرار داخل الحلقة الداخلية، ويتم طباعة قيمة "num" مع استخدام الـ "print()" ونهاية السطر (end=' ') لعرض الأرقام على نفس السطر، ثم يتم طباعة سطر فارغ باستخدام "print()" خارج الحلقة الداخلية للانتقال إلى السطر التالي.

تلخيصاً للشرح السابق وجود print() خارج سياق ال loop الثانية يجعلها تقوم بإضافة سطر جديد بعد الإنتهاء من تنفيذ ال loop الداخلية 

 

  • 0
نشر

هناك طريقة أفضل لكتابة هذا الكود بما يتوافق مع النمط العام في بايثون أو الكود الذي يطلق عليه Pythonic.

الكود الخاص بك يمكن كتابته بحيث يقوم بطباعة كل سطر بتعليمة واحدة فقط بدلاً من استعمال حلقة، بالطبع يجب علينا استعمال حلقة للأسطر و لكن عندها سنكون اختصرنا حلقة. يمكن كتابة ذلك كما يلي:

num = 1
for i in range(3):
  row = map(lambda x: str(x), range(num, num + i + 1))
  num += i + 1
  print(' '.join(row))

قد تبدو هذه الطريقة معقدة بالنسبة للأشخاص الذين تعلموا لغات برمجة أخرى مسبقاً، حيث أن أغلب اللغات تعتمد على الشكل التقليدي، و لكن في بايثون هذه الطريقة أفضل بكثير.

لاحظ هنا كيف أننا استعملنا map و التي تقوم بتطبيق تابع معين على كل عنصر من عناصر كائن قابل للتكرار، بشكل أساسي الهدف من map هنا هو تحويل الأرقام إلى سلسلة نصية بحيث يمكننا دمجهم لاحقاً.

لاحظ كيف أننا استعملنا range لاستبدال الحلقة بشكل كامل، فهي ببساطة ستعيد لنا كافة الأرقام التي نريدها. و استعملنا التابع join على الفراغ و ذلك لجمع عناصر السطر عن طريق وضع فراغ بينهم.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...