PyDA Course
📖 درس 1 مبتدئ ⏱ 12 دقيقة ⚡ +10 XP ColabKagglenbviewerBinderDeepnoteGitHub output · print · f-strings · formatting

الطباعة والمخرجات

اعرض النتائج بواسطة print()، ونسّق النص باستخدام f-strings، وتحكم فيما يظهر على الشاشة.

🎯 ماذا ستتعلم:
  • استخدام print() لعرض القيم والرسائل
  • تنسيق المخرجات باستخدام f-strings ومحددات التنسيق
  • دمج قيم متعددة في استدعاء واحد داخل print()

إجابة محبوسة داخل الآلة

جرّب أن تحسب

173+425.\frac{17 \cdot 3 + 4^2}{5}.

بيدك كنت ستكتب الخطوات والجواب على الورق:

173+42=51+16=67,675=13.4.17 \cdot 3 + 4^2 = 51 + 16 = 67, \qquad \frac{67}{5} = 13.4.

الحصول على الجواب لا يشكّل إلا نصف حلّ المسألة ، النصف الآخر هو توصيله. أعطِ الآن نفس التعبير إلى حاسوب. يحسب 13.413.4 في طرفة عين ، ثم ينسى فورًا أن يخبرك. تبقى القيمة صامتة داخل الآلة، وما لم تطلب منها أن تخرج، لن تراها أبدًا.

ذلك الحساب غير المرئي هو المشكلة الجوهرية التي تحلّها هذه الدرس. يحتاج البرنامج إلى طريقة لكتابة نتائجه حيث يستطيع إنسان قراءتها ، وفي بايثون، هذه التعليمات هي print().

تأخذ print() قيمة وترسلها إلى الشاشة. أي قيمة تصلح: تحوّلها بايثون إلى نصّ أولًا.

python
print(13.4)        # 13.4
print(42)          # 42
print("hello")     # hello

لست مضطرًّا إلى طباعة عددٍ منتهٍ ، تقبل print() أي تعبير وتُقيّمه قبل الطباعة:

python
print((17 * 3 + 4**2) / 5)    # 13.4

النمط الذي تستحضره: احسب شيئًا ثم سلّمه إلى print(). لا منفذ للقيم خارج البرنامج وحدها؛ الطباعة هي المخرج.

عدد، وتسميته

نادرًا ما يُغني عددٌ مجردٌ عن شيء. على الورق لن تكتب 13.413.4 وحده ، بل ستكتب “النتيجة: 13.4”. أعطِ print() أكثر من وسيطٍ، وسيضع مسافة بينها:

python
print("Score:", 87)    # Score: 87

الوسيط الأول هو التسمية؛ والثاني هو القيمة. يمكنك تكديس أي عددٍ تريده، وتتولى print() فصلها عنك.

عرض الأرقام التي تقصدها تحديدًا

هنا تبدأ الصعوبات: القيمة

π=3.14159\pi = 3.14159\ldots

تحمل جميع أرقامها معها طوال الوقت. لكن جدولًا يحتاج إلى π3.14\pi \approx 3.14، وسطر طقسٍ يحتاج إلى 23.8°C لا إلى 23.7891°C. عدد الأرقام المعروضة خيارٌ في طريقة عرض العدد ، ولا يجوز أن يغيّر القيمة المخزّنة، وإلا فقدت الدقة إلى الأبد.

لذلك يجب أن يعيش التقريب في الطباعة، لا في الحساب. f-string يتيح لك أن تقرر وقت الطباعة: اكتب f"..." وضع التعبير داخل {...} وأضف محدد التنسيق بعد النقطتين:

python
price = 19.999
print(f"Total: ${price:.2f}")        # Total: $20.00   (يظهر مقرّبًا)
print(price)                          # 19.999          (القيمة كما هي)
print(f"Double: {price * 2}")         # 39.998          (أي تعبير يصلح)

يجدر بك أن تفكّك ما يحدث داخل {price:.2f}:

  • {price} تعني ضع القيمة هنا ، يتولّى f-string التحويل إلى نصّ عنك.
  • :.2f تعني اعرضها عددًا ذا فاصلة ثابتة بمنزلتين عشريتين ، يحدث التقريب في الصورة المعروضة فقط.

لا يقتصر دور محددات التنسيق على التقريب: فهي تحاذي أيضًا. عمودٌ من 7.5 و8.5 و87.5 يبدو غير منتظم؛ وامنح كل عنصرٍ نفس العرض فيصطف العمود:

python
print(f"{7.5:>6}")     # "    7.5"   محاذاة لليمين بعرض 6
print(f"{87.5:>6}")    # "   87.5"

مثالٌ محلول: عمودُ الأسعار

يريدُ إيصالُ متجرٍ التسمياتِ على اليسارِ والأرقامَ مصفوفةً على الكسورِ العشريةِ. اتجاهانِ للتنسيقِ يفعلانِ الأمرينِ:

python
print(f"{'item':<10}{'price':>7}")
print(f"{'coffee':<10}{3.5:>7.2f}")
print(f"{'croissant':<10}{2.95:>7.2f}")

# item       price
# coffee      3.50
# croissant   2.95

يُحاذي <10 التسميةَ يسارًا على عرضِ عشرةِ أعمدةٍ؛ ويُحاذي >7.2f الرقمَ يمينًا على سبعةٍ، محافظًا على منزلتينِ عشريتينِ. المحاذاةُ تنسيقٌ في الاتجاهِ الآخرِ فقط ، نفسُ {قيمة:مواصفة} التي تعرفها، والسهمُ يقولُ إلى أين يميلُ النصُّ. هذه بذرةُ كلِّ جدولٍ سيبنيه المقررُ: تسمياتٌ في جهةٍ، وأرقامٌ في الأخرى.

أخطاء شائعة

  • لا عائد لـ print(). تُظهر print("hi") نصًّا لكنها تتحوّل إلى None ، لا يمكنك التقاط ما طبعته في متغير. الطباعة هي نهاية حسابٍ، لا خطوةٌ داخله.
  • خلط الأنواع مع +. يرفع print("Score: " + 87) خطأ TypeError، لأن نصًّا وعددًا لا يُجمعان. وُجدت f-strings تحديدًا لاقتران تسمية بقيمة: print(f"Score: {87}").
  • الفتاحةُ { الحرفيةُ في f-string تطلب {{. تطبع f"{{x}}" القيمةَ {x}؛ فتقولُ الفتاحةُ المنفردةُ إنها بدايةُ تعبيرٍ. والمضاعفةُ هي منفذُ الهروب.

🧩 تحديات

🧩 تحدٍّ ، فكّر أولًا ثم أظهر

احسب 25+95\dfrac{2^5 + 9}{5} على الورق، ثم اطبعها دون أن تكتب الجواب بنفسك ، دع الحاسوب يحسب ويطبع في خطوة واحدة.

💡 الجواب: print((2**5 + 9) / 5)8.2. تعبيرٌ واحد مسلَّم مباشرةً إلى print(): تُقيّمه الآلة ثم تكتب النتيجة.

🧩 تحدٍّ ، فكّر أولًا ثم أظهر

مع temperature = 23.7891، اطبع "Today: 23.8°C" (منزلة عشرية واحدة) دون المساس بالقيمة المخزّنة.

💡 الجواب: print(f"Today: {temperature:.1f}°C")Today: 23.8°C. محدد :.1f يقرّب عند العرض فقط؛ ويبقى temperature = 23.7891.

🤔 أسئلة سقراطية

  • لماذا تستخدم بايثون print() كدالة (بأقواس) بدلًا من كونها تعليمة؟ ما الميزة التي يمنحك ذلك؟
  • يطبع print("A", "B", "C") الناتج A B C بمسافات. كيف تطبعها دون مسافات؟ وكيف بفواصل بينها؟
  • إذا كان x = 3.14، فماذا تُنتج f"{x}"؟ وماذا عن f"{x:.0f}"؟ اشرح الفرق من حيث القيمة مقابل تمثيلها.

✅ فحص سريع

1. حُسبت معادلتك، لكن البرنامج لا يعرض شيئًا. لماذا؟

2. كيف تطبع 3.14159 مع إظهار منزلتين عشريتين، دون تقريب القيمة المخزّنة؟

outputprintf-stringsformatting