الطباعة

الطباعة

الطباعة

تابع بناء جملة بايثون الكتل والطباعة:

تستخدم الطباعة لطباعة البيانات الي المستخدم، او تتبع مشكلة الكود، او التحقق من القيم، والنتائج في جميع مراحل تنفيذ - الكود.

طباعة البيانات print

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

مثال

print("Hello world!")

بناء جملة الطباعة print ():

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

عوامل دالة الطباعة كالتالي:

  • objects* - كائن / كائنات ليتم طباعتها نصوص او ارقام او اي كائن اخر.
  • sep - الفاصل بين العديد من الكائنات المطبوعة.
  • end - الحرف / السلسلة المطبوعة في النهاية بعد الكائن.
  • file - يحدد الملف الذي ينتقل إليه الإخراج. افتراضيا هذه هي وحدة الاخراج.
  • flush - مسح الاخراج / الملف بالقوة إذا تم ضبطه على True

عندما تجد ( * ) في بداية عامل من عوامل اي دالة تعرف ان هذا العامل اجباري اما بقية العوامل اختيارية.

عوامل دالة الطباعة print

تُعرف القيم التي يتم الإعلان عنها داخل دالة عند استدعاء الوظيفة باسم وسيطة argument . حيث إن المتغيرات التي يتم تحديدها عند الإعلان عن الوظيفة تُعرف بالمعامل parameter.

عامل objects (الكائنات)

العامل الاول في دالة الطباعة هو objects وهو جمع كائنات، مما يتضح لنا انه يمكن ادخال عدة بيانات، كما انه عامل اجباري يجب وجود كائن واحد علي الاقل.

مثال

x = 1
y = 2
z = 3
print(x, y, z)

عند تشغيل المثال السابق تحصل علي مخرجات للارقام الثلاث تفصلهم مسافه فارغة وهذا الاعداد الافتراضي للعامل sep.

عامل sep (الفاصل)

هذا العامل مسؤل عن ما بين كائنات العامل objects وياخذ قيمة نصية او القيمة الافتراضية None.

مثال

x = 1
y = 2
z = 3
print(x, y, z, sep='-')
print(x, y, z, sep='\n')

قم بتشغيل المحرر السابق وما قبلة وشاهد الاختلاف، لمعرفة وظيفة sep جيداً قم بتغير قيمة sep الي اي قيمة نصية اخري.

لاحظ ان النصوص يجب ان تكون بين علامتين تنصيص زوجية او فردية " " ، ' '.

يترجم النص n\ في معظم لغات البرمجة الي الانتقل الي سطر جديد بمعني كسر السطر او فصل السطر، وفي المثال السابق استخدمناه في عامل sep لفصل كائنات objects بواسطة سطور جديدة.

عامل end (النهاية)

تحدد تعليمة النهاية النص او الحرف الذي تنتهي به القيمة المطبوعة بعد جميع كائنات عامل objects. بشكل افتراضي ، يكون فاصل الأسطر n\.

مثال

x = 1
y = 2
z = 3
print(x, y, z, sep='-num-', end=' ~~~ ')
print("ahmed", "mohamed", "osama", sep=" / ", end="<\n:-----:>\n\r")
print(x, y, z, sep='\n\n')

كما تري تم دمج طباعة السطرين معاً، ويمكن دمج اكثر من سطر طباعة من خلال عامل end.

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

عامل file (ملف)

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

يمكن الطباعة الي تدفق stream او الي ملف او الي مقبس شبكة socket او الي مخزن مؤقت في الذاكرة، وبالإضافة إلى ذلك ، هناك ثلاثة تدفقات قياسية يوفرها نظام التشغيل:

  • stdin: المدخلات القياسية
  • stdout: الإخراج القياسي
  • stderr: خطأ معياري

مثال

with open('file.txt', mode='w') as file_object:
    print('hello world', file=file_object)

ربما لا يسمح محرر المثال تجربة عامل file وهذا بسبب اننا لا نسمح بانشاء الملفات الا ببعض الطرق ولكن لا تقلق سوف ننشىء ملفات في مستوي متقدم.

عامل flush (التنظيف)

التنظيف في بايثون هو مسح المخزن المؤقت للأخراج. إذا كنت تريد مسح المخزن المؤقت للأخراج عند الطباعة ، فأنت بحاجة إلى ضبط وسيطة flush الي True في استدعاء دالة print ().

ربما تتسائل لماذا تفعل شيئًا كهذا؟

في بايثون ، تكون وظائف الإدخال، والإخراج ، مثل print () ، مكلفة عند الاتصال بها. ولتحسين الأداء ، يقوم نظام التشغيل الخاص بك بتخزين بيانات الإدخال، والإخراج في مخزن مؤقت قبل إرسالها إلى وحدة الاخراج مثل (console, terminal) او مثل شاشة المخرجات المرافقة لمحررات الامثلة.

عندما تطبع بلغة بايثون ، تتراكم البيانات في مخزن مؤقت حتى يكون هناك فاصل أسطر n\. عند وجود فاصل أسطر n\ ، يتم ارسال البيانات الي وحدة الاخراج لطباعتها.

مثال

import time

for c in reversed(range(0, 5)):
   print(c , end="%")
   time.sleep(1)
print("Done")
ملاحظة : ليس مطلوب منك في هذا المثال ان تتعلم حلقة التكرار او مكتبة الوقت time 

المثال السابق استخدمنا مكتبة الوقت time وحلقة التكرار لكتابة سكربت بايثون بسيط يقوم بالعد تنازلي من 4 حتي الوصول الي الصفر.

وداخل كتلة التكرار العكسي reversed قمنا بطباعة الرقم الحالي لحلقة التكرار ( c ) ، واعددنا قيمة النهاية end علامة ( % )، حتي تكون طباعة حلقة التكرار كلها علي سطر واحد في المخرجات ولا تحتوي علي فاصل أسطر ( n\ ).

ومن خلال مكتبة الوقت time قمنا بعمل ايقاف مؤقت لمدة ( 1 ثانية )، او النوم / sleep في بايثون.

توضيح

السطر الاول، والثاني داخل كتلة for ؛ سوف يتم تكرار تنفيذهم اربعة مرات. ثم سوف يتم تنفيذ السطر الاخير مرة واحدة بما انه خارج كتلة التكرار ـ for.

وبما ان الطباعة علي السطر الاول في كتلة for لا تحتوي علي فاصل اسطر فانة من الطبيعي ان يقوم النظام بالاحتفاظ بكافة نصوص الطباعة حتي الوصول لفاصل اسطر او استلام النظام كافة النصوص المطلوب طباعتها.

ان قمت بتجربة المثال السابق فسوف تشاهد نتائج طبيعية ثانية بثانية وهذا لان اعداد قيمة flush في نظامنا دائماً True، ولا يسمح بغير ذلك.

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

ولمنع هذا من الحدوث نقوم بمسح المخزن المؤقت من خلال جعل قيمة وسيطة flush=True كالتالي:

مثال

import time

for c in reversed(range(0, 5)):
   print(c , end="%", flush=True)
   time.sleep(1)
print("Done")

نتائج الكود السابق وما قبلة هي نفسها، ولكن عند التجربة الحقيقية سوف تلاحظ الاختلاف.

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

الاختبار

بما اننا لم نبدا الدراسة الحقيقية فسوف نجعل هذا الاختبار مبني علي بناء جملة بايثون كما سبق.

داخل المحرر التالي تم استدعاء مكتبة time والتصريح عن دالة جديدة باسم main وتم اضافة كود العداد السابق الي كتلتها ولكن هناك مشكلة في التنثيق او في بناء الجملة والكتل.

كل ما عليك فعلة؛ هو ضبط الكتل كما تعلمت مسبقاً، واضغط زر التشغيل.

حلول الاعضاء
فتح الحلول مقابل 5
مقفل
مقفل
مقفل
مقفل
output
terminal

Next

التعليقات

no comments found.
  • من خلال الضغط علي زر {;} في شريط الادوات يمكنك اضافة اكواد بايثون الي التعليق للتجربة اون لاين.
  • برجاء مراعاة قواعد الكتابة، والادب.