الرؤية عبر print والتوضيح عبر التعليقات
كيف تطبع print عدة أشياء معاً، وكيف يغيّر sep وend ذلك، ولماذا توجد التعليقات — أداتك الأولى لترى ما يجري داخل برنامج يعمل.
كيف تريد أن تتعلم؟
المشكلة التي نقوم بحلها
كتبت برنامجاً. شغّلته. الطرفية لم تقل شيئاً.
هل نجح؟ هل توقف في المنتصف؟ ما نتيجة الحساب في الداخل؟ لا توجد طريقة للمعرفة، لأن الحاسوب لا يخبرك بشيء من تلقاء نفسه — ما تريد رؤيته يجب أن تطلبه.
print هي طريقة الطلب. في البداية هي نافذتك الوحيدة: إلى أين وصل البرنامج، وماذا يحمل متغير (variable) ما، وماذا أنتج الحساب. حتى المطورون ذوو الخبرة يضعون print في الكود مرات كثيرة في اليوم رغم وجود أداة تصحيح (debugger) في متناولهم — ولا عيب في ذلك، فهذا جزء من العمل.
في نهاية هذا الفصل ستستطيع
- طباعة عدة أشياء في استدعاء واحد، والتحكم في الفراغ بينها
- تغيير شكل المخرجات باستخدام
sepوend - ملاحظة الفرق بين النص (string) والأرقام — ولماذا
"2" + "3"ليس2 + 3 - كتابة التعليقات (comments)، ومعرفة أي التعليقات تستحق الكتابة فعلاً
المتطلبات المسبقة: الطرفية والمجلدات ومشروعك الأول.
print تقبل أكثر من شيء واحد
افصل بين أي عدد تريده من القيم بفواصل، وستكتبها print كلها على سطر واحد:
print("Order", 7, "confirmed")Order 7 confirmedلاحظ أنك لم تكتب أي مسافة، ومع ذلك ظهرت الكلمات مفصولة بمسافات. print تضع من تلقاء نفسها مسافة واحدة بين كل قيمتين مفصولتين بفاصلة.
وفي نهاية كل print تنتقل إلى سطر جديد:
print("line one")
print("line two")line one
line twoprint() الفارغة تطبع سطراً فارغاً فقط — وهي أبسط طريقة لتقسيم المخرجات الطويلة إلى مجموعات سهلة القراءة.
sep — الفراغ بالشكل الذي تريده
إذا لم تكن تلك المسافة ما تريده، فغيّرها:
print("2026", "09", "10", sep="-")
print("home", "user", "notes.txt", sep="/")
print("a", "b", "c", sep="")2026-09-10
home/user/notes.txt
abcend — ماذا يحدث في نهاية السطر
افتراضياً تُنهي print السطر وتنتقل إلى الأسفل. ويمكن تغيير ذلك أيضاً:
print("Loading", end="")
print(".", end="")
print(".", end="")
print(". done")Loading... doneأربعة استدعاءات منفصلة لـ print، وسطر واحد من المخرجات — لأن الثلاثة الأولى طُلب منها ألا تضع شيئاً في نهاية السطر.
النصوص والأرقام ليست الشيء نفسه
هذان السطران يبدوان متشابهين تقريباً، لكنهما يتصرفان بشكل مختلف:
print(2 + 3)
print("2" + "3")5
23ما بين علامتي الاقتباس نص (string)، و+ هنا لا تجمع — بل تضم النصين معاً. وما هو خارجهما رقم، و+ هنا تجمع فعلاً.
هذا التمييز هو أساس الفصول التالية، وهو أيضاً سبب نصف الأخطاء التي يواجهها المبتدئون تقريباً. الآن تذكّر القاعدة فقط: علامات الاقتباس تعني نصاً.
التعليقات — الأسطر التي لا يقرؤها بايثون
من العلامة # إلى نهاية السطر، يتجاهل بايثون كل شيء:
# Friday delivery report
total = 12 + 8
print("Total:", total) # the sum shown at the bottom of the reportTotal: 20التعليقات لا تؤثر في طريقة عمل البرنامج. إنها للناس — لزميلك، ولك أنت بعد ثلاثة أشهر، حين تكون قد نسيت كل هذا.
*التعليق الجيد يقول لماذا، لا ماذا.* ما يفعله الكود ظاهر في الكود نفسه:
# Weak: repeats what the code already says
count = count + 1 # add 1 to count
# Useful: gives the reason, which the code cannot show
count = count + 1 # the header row was counted too, so shift by oneلا تتعلم شيئاً من التعليق الأول — فالسطر يضيف واحداً بوضوح. أما الثاني فيقول لماذا يُضاف واحد، وهذا ما لا تخبرك به قراءة الكود مهما طالت.
وأثناء التعلم للتعليقات استخدام آخر — إيقاف سطر مؤقتاً لترى كيف يعمل البرنامج بدونه:
print("first")
# print("second")
print("third")first
thirdمثال كامل
أنشئ الملف report.py وشغّله:
# A small sales report
print("=" * 24)
print("SALES REPORT")
print("=" * 24)
print("Items sold:", 3 + 5 + 2)
print("Revenue:", 3 * 120 + 5 * 90 + 2 * 250)
print()
print("Prepared by", "Rafi", sep=": ")========================
SALES REPORT
========================
Items sold: 10
Revenue: 1310
Prepared by: Rafiلاحظ السطر الفارغ بعد Revenue: 1310 في المخرجات — مصدره print() الفارغة. وهو يفصل الجزء الأخير من التقرير.
ولاحظ أيضاً "=" * 24. ضرب نص في رقم يجعل بايثون يكرره ذلك العدد من المرات، فلا حاجة إلى كتابة أربع وعشرين علامة مساواة يدوياً لرسم خط.
عندما يحدث خطأ
SyntaxError: unterminated string literal فُتحت علامة اقتباس ولم تُغلق. print("Hello) يسبب هذا. عُدّ علامات الاقتباس في البداية والنهاية.
تحتاج إلى علامة اقتباس داخل النص استخدم نوعاً في الخارج والنوع الآخر في الداخل: print("It's working") أو print('She said "yes"').
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? كتابة print "Hello" تعطي هذا. هذه صياغة بايثون 2. في بايثون 3 print دالة (function)، لذلك تحتاج إلى أقواس: print("Hello"). هذا الخطأ يأتي عادةً من درس أو إجابة قديمة.
إعطاء sep أو end قيمة بلا علامات اقتباس print("a", "b", sep=-) يعطي SyntaxError: invalid syntax. sep وend يأخذان نصاً دائماً: sep="-".
بأي لغة تُكتب التعليقات؟ بايثون يقبل التعليقات بأي لغة — فكل ما يأتي بعد # لا يقرؤه بايثون. لكن في الكود الذي تشاركه مع الآخرين أو تستخدمه في العمل، اكتب التعليقات بالإنجليزية. السبب عملي: ليس كل من في الفريق الذي سيصله كودك يقرأ لغتك، ورسائل الأخطاء والتوثيق والإجابات التي تجدها على الإنترنت كلها بالإنجليزية. لهذا كل الكود في هذه الدورة — التعليقات وأسماء المتغيرات وأسماء الملفات — بالإنجليزية، والشرح وحده بلغتك.
الخطوة ٤ من ٦ — التوقع
تحقّق من فهمك
ماذا يظهر بالضبط في الطرفية عند تشغيل هذه الأسطر الثلاثة؟
print("a", "b", "c", sep="-")
print("x", end=" ")
print("y")- Aa-b-c x y
- Ba-b-c x y
- Cabc x y
- Da-b-c x y
كلا السطرين يستخدم +. ما المخرجات؟
print(2 + 3)
print("2" + "3")- A5، ثم خطأ — لا يمكن استخدام `+` مع النصوص
- B5 5
- C5 23
- D23 23
ماذا يطبع هذا البرنامج، ولماذا؟
price = 250
# price = 400
print("Price:", price)- A`Price: 400` — القيمة الأخيرة هي التي تبقى
- Bخطأ — لا يمكن إسناد قيمة إلى المتغير نفسه مرتين
- C`Price: 250` — السطر الثاني تعليق، فلا يقرؤه بايثون أبداً
- D`Price: 250` ثم `Price: 400` — يعمل السطران كلاهما
الإجابة تتطلب حساباً
سجّل الدخول للتحقق من إجاباتك
الأسئلة موجودة أعلاه، والتفكير في إجاباتها ذهنياً هو الجزء المهم. سجّل الدخول لرؤية الإجابات والتفسيرات والتلميحات ذات المستويات الثلاثة.
دورك الآن
اكتب ملفاً باسم profile.py يُخرج هذه المخرجات بالضبط:
------------------------
NAME : Rafi
ROLE : Python learner
------------------------
Age next year: 23ثلاثة شروط:
- يجب إنتاج الخطين العلوي والسفلي بالضرب، لا بكتابة أربع وعشرين شرطة
- يجب أن يستخدم السطران
NAME : RafiوROLE : Python learnerالوسيطsep - في سطر
Age next yearلا تكتب الرقم بنفسك — بل احصل عليه بالجمع، مثل22 + 1
وضع تعليقاً في السطر الأول من الملف يقول لماذا يوجد هذا الملف — لا ماذا يفعل.
في هذه المهمة المزيد
ما قرأته أعلاه هو المهمة كاملة — لم يُحذف منها شيء. يضيف Pro:
- ما يحدث فعلياً في الكواليس — كيف ينفذ بايثون هذا الكود
- الحل الكامل للتمرين مشروحاً خطوة بخطوة
- تمارين إضافية أكثر صعوبة وتحدياً
- أسئلة المقابلات الوظيفية حول هذا الموضوع مع نموذج الإجابة
الخطوة ٦ من ٦
التحدي — اختبار الفصل
عشرة أسئلة متدرجة من السهل إلى الصعب. الأسئلة الأخيرة صعبة عن قصد.
سجّل الدخول لأداء الاختبار