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

السؤال

Recommended Posts

  • 0
نشر

ذلك يحدث لأن الكود يعض الـ end الخاص بالـ print للقيمة " "، بدلاً من القيمة الافتراضية "سطر جديد" والتي تعني سطر جديد.

جرب الكود التالي :

print("Hello", end = ' ')
print("World")

ستكون النتيجة :

Hello World

وعند تنفيذ الأمر print() عند نهاية كل حلقة صغيرة for j in، فإننا نقوم بطباعة القيمة الافتراضية "سطر جديد"، حتى يتم طباعة ارقام الحلقة التالية في السطر التالي.

لتعميق الفهم، جرب المثال التالي :

print("Hello", end = ' ')
print("World")
print()
print("my name is", end = ' ')
print("omar")

وحاول التعديل عليه.

  • 0
نشر

يقوم الكود بطباعة مثلث من الأرقام المتتالية، بدءًا من الرقم 1، وحتى الرقم 28.

الشرح التفصيلي:

1- تعيين القيمة 1 إلى المتغير num.

2- الدخول في حلقة تكرارية for تتكون من حلقتين متداخلتين، الأولى للصفوف والثانية للأعمدة، وذلك بحسب النطاق range(0,7)، والذي يعني الدوران على الأرقام 0، 1، 2، 3، 4، 5، 6.

3-داخل الحلقة الخارجية، تم تعريف حلقة تكرارية for ثانوية، والتي تقوم بطباعة الأعداد من num وحتى الرقم i+1، والذي يتم تحديده بواسطة الحلقة الخارجية، والتي تزداد قيمة i في كل دورة.

4-طباعة العدد num باستخدام دالة print() وبإضافة مسافة فارغة بعد كل رقم باستخدام end = " ".

5- زيادة قيمة المتغير num بمقدار 1 في كل دورة.

6- خروج من الحلقة الداخلية بعد الانتهاء من الطباعة والزيادة في القيمة.

7- خروج من الحلقة الخارجية بعد الانتهاء من جميع الأعمدة للصف الحالي.

8- طباعة سطر جديد باستخدام دالة print() لبدء صف جديد.

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

  • 0
نشر

لكي تكتب الأرقام بنفس عدد الأسطر، عليك بتعديل حلقة التكرار الداخلية (الحلقة التي تحدد عدد الأرقام في كل سطر) لتكون بحسب عدد الأسطر، يمكن القيام بذلك عن طريق استخدام متغير آخر لحساب عدد الأرقام في الحلقة التالية.

مثلاً، يمكن تعديل الكود كما يلي:

num = 1
for i in range(1, 8):
    # حساب عدد الأرقام في السطر الحالي
    num_digits = i
    for j in range(num_digits):
        print(num, end=' ')
        num += 1
    print()

كما ترى يتم حساب عدد الأرقام في كل سطر باستخدام المتغير num_digits الذي يتم تعيينه إلى قيمة i في كل دورة من حلقة التكرار الخارجية، بعد ذلك استخدام متغير num_digits في حلقة التكرار الداخلية لطباعة عدد معين من الأرقام في كل سطر.

وبما أن حلقة التكرار الخارجية تمتد من 1 إلى 7، فسيتم طباعة 7 أسطر، وكل سطر يحتوي على عدد من الأرقام يساوي رقم السطر نفسه، لذلك، سيكون السطر الثالث يحتوي على ثلاثة أرقام، والسطر الرابع يحتوي على أربعة أرقام، وهكذا.

  • 0
نشر

الطريقة الصحيحة لطباعة أرقام تتزايد بالتسلسل من 1 إلى 28 بطريقة مرتبة.

وهذ شرح لما يجب أن يحدث في الكود بالخطوات:

  1. نقوم بتعريف متغير يسمى num بقيمة 1.
  2. نستخدم حلقة تكرار for للتكرار 7 مرات، وهي من الرقم 1 إلى 7، ونختزل ذلك بـ range(1,8) أو يمكنك كتاية القائمة هكذا [1,2,3,4,5,6,7] ليس هناك فرق بينهما.
  3. نقوم بتعريف متغير جديد باسم new_number وهو يحمل قيمة i، وهذا يعني أن المتغير num_digits سيتم تعيينه بقيم من 1 إلى 7 بالتسلسل.
  4. نستخدم حلقة تكرار for جديدة للتكرار حسب قيمة المتغير num_digits، والتي تحدد عدد المرات التي يجب علينا فيها طباعة مجموعة من الأرقام.
  5. نقوم بطباعة الرقم الحالي num بالمرور على داخل الحلقة الثانية باستخدام دالة print، ونستخدم end=' ' لجعل الأرقام موجودة جنبًا إلى جنب بدون فصل بينها بمحرر النصوص.
  6. نرفع قيمة المتغير num بمقدار 1 لإعداده للطباعة القادمة.
  7. بعد الانتهاء من داخل الحلقة الثانية، نقوم بطباعة سطر فارغ باستخدام دالة print() لإنهاء التعليق الحالي والانتقال إلى السطر التالي.

الكود:

قم بكتبة كود أخر يقوم بنفس ما يفعله هذا الكود 
num = 1
for i in [1,2,3,4,5,6,7]:
    new_number = i
    for j in range(new_number):
        print(num, end=' ')
        num += 1
    print()

وهناك طريقة اخري أنظر إلى هذا الكود:

num = 1
for i in range(1, 8):
    new_number = i
    nums = [str(num + j) for j in range(new_number)]
    print(' '.join(nums))
    num += new_number

شرح الكود

  1. تم تعريف متغير `num` بقيمة 1. 
  2. تم استخدام حلقة `for` لتكرار العملية 7 مرات (range(1, 8)).
  3. تم تعريف متغير `new_number` بقيمة متغير `i` الحالي في الحلقة.
  4. تم إنشاء قائمة `nums` وتعيينها إلى تحويل المتغير `num` الحالي إلى سلسلة وإضافة أرقام متصاعدة بواسطة حلقة `for` بدءًا من 0 إلى `new_number` -1. 
  5. تم استخدام الدالة `join` لدمج قائمة `nums` في سلسلة واحدة مع فراغات بين الأرقام.
  6. تم طباعة السلسلة باستخدام الدالة `print`.
  7. تم زيادة قيمة المتغير `num` بقيمة `new_number` لاستخدامه في الدورة القادمة.
  • 0
نشر

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

لحل هذه المشكلة يمكننا وضع قيمة end على أنها فراغ طالما أننا لم نصل لآخر عنصر و في آخر عنصر نضعها سطر جديد، أي كما يلي:

num = 1
for i in range(0, 7):
  for j in range(0, i + 1):
    print(num, end = ' ' if j < i else '\n')
    num += 1

لاحظ كيف أننا نقول أننا نريد الفراغ طالما أن j < i  أي طالما لم نصل لآخر عنصر و إلا نضع نهاية سطر عندما نصل لآخر عنصر.

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

مثلاً كودك السابق يمكن أن يكتب بطريقة pythonic بالطريقة التالية:

from itertools import accumulate

steps = list(accumulate(range(8)))

output = '\n'.join(
	[
		' '.join([str(x) for x in range(steps[i]+1, steps[i+1]+1)])
		for i in range(7)
	]
)
print(output)

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...