تنسيق الإخراج

تنسيق الإخراج

تنسيق الإخراج

تابع الطباعة:

في بعض الاحيان قد نحتاج الي دمج بعض القيم معاً قبل طباعتها او تخزينها في متغيرات، ويمكن القيام بهذا بعدة اساليب وتدعي Output Formatting.

الطباعة وتنسيق الإخراج 

في الدرس السابق استخدمنا دالة print وقمنا بطباعة النصوص، والارقام، وتم توضيح كل عوامل الدالة ( sep, end, file, flush ). 

والان سوف نستخدم كل اساليب دمج القيم او ما يعرف بـ Output Formatting.

هناك أربع طرق مختلفة لتنسيق النصوص في بايثون:

  • عامل %.
  • format.
  • f-strings.
  • قالب السلسلة.

بدون تنسيق

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

يمكن دمج النصوص في بايثون من خلال استخدام عامل الجمع (+)، ولكن في تلك الحالة عليك تحويل الأنواع غير النصية إلى أنواع نصية قبل جمعها باستعمال عامل الجمع (+).

مثال

name = "ahmed"
age = 22
weight = 35.5
print("name: " + name + " - age: "+ str(age) + " - weight: " + str(weight) )

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

تنسيق %

يعتبر تنسيق النصوص باستخدام عامل % من أقدم الطرق لتنسيق النصوص، تستخدم بايثون تنسيق سلسلة على غرار C لإنشاء سلاسل جديدة منسقة.

يتم استخدام عامل "%" لتنسيق مجموعة من المتغيرات المضمنة في "tuple" (قائمة) ، جنبًا إلى جنب مع سلسلة تنسيق ، والتي تحتوي على نص عادي مع "محددات الوسيطات" ، ورموز خاصة مثل.

  • %s - تحل محل النصوص str.
  • %d - الأرقام الصحيحة int.
  • %f - ارقام فاصلة عشرية float.

مثال

name = "ahmed"
age = 10
weight = 35.50
print("name: %s and age: %d , weight: %f" % (name, age, weight))

في المثال السابق استخدمنا ثلاث متغيرات من انواع str, int, float وسوف نتحدث عنها في قسم المتغيرات كثيراُ، المهم الان هو التركيز علي عامل % ووسيطاته الثلاث.

داخل دالة الطباعة قمنا بكتابة سلسلة نصية، وتنثيقها بواسطة عامل % مع اختيار الوسيطة المناسبة لكل نوع من انواع المتغيرات الثلاث.

print("name: %s and age: %d , weight: %0.1f" % ("ahmed", 25, 55.3))

الوسيطة النصية "%s" للمتغير النصي name ، والوسيطة الرقمية "%d" للمتغير الرقمي الصحيح age والوسيطة العشرية "%f" للمتغير العشري weight.

بعد ان يتم اعداد شكل التنسيق داخل علامات التنصيص يتم استدعاء عامل % ثم اضافة قائمة بالقيم المطلوب استبدالها داخل النص بنفس الترتيب من الشمال لليمين.

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

مثال

weight = 35.50
print( "weight: %0.0f" % ( weight ) )
print( "weight: %0.1f" % ( weight ) )
print( "weight: %0.2f" % ( weight ) )
print( "weight: %0.3f" % ( weight ) )
print( "weight: %0.4f" % ( weight ) )
print( "weight: %0.5f" % ( weight ) )

في اول سطر طباعة تم تقريب الكسر للاعلي، فأصبح الرقم 36 اما في باقي السطور تم تحديد طول الكسر فقط.

تنسيق format 

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

مثال

print( 'They are {} formatting' .format( 'used for' ) )

 تم استبدال الاقواس بالعنصر الموجود في format، ويمكن اضافة عناصر اخري بنفس الاسلوب كالتالي

مثال

print( 'They are {} for {}' .format( 'used', 'formatting' ) )

يمكن ايضا تحديد عنصر من داخل format او تكرار استخدامه كالتالي:

مثال

print( 'They are {1} for {0} and {1}' .format( 'used', 'formatting' ) )

يمكن ايضا تنسيق وطباعة انواع اخري بدون تحديد النوع كالتالي

مثال

name = "ahmed"
age = 10
weight = 35.50
print("name: {0} -- age: {1} -- weight: {2}" .format(name, age, weight) )

في اسلوب عامل % حتي يمكنك استخدام عنصر من العناصر عدة مرات عليك ايضا اضافتة الي القائمة عدة مرات وفي نفس الترتيب وهذا امر مرهق جدا. اما في اسلوب format يمكن تكرار استخدام العنصر بمجرد رقمة في القائمة format.

يمكن ايضا ادخال كائنات objects بتسميات خاصة كالتالي:

مثال

print("name: {a} -- age: {b} -- weight: {c}" .format(a = "ahmed",b = 10, c = 35.50) )

يمكن ايضا تقريب الكسر او تحديد طول الرقم العشري كما فعلنا مع عامل % كالتالي.

مثال

weight = 35.50
print( "weight: {c:0.0f}" .format( c = weight ) )
print( "weight: {c:0.1f}" .format( c = weight ) )
print( "weight: {c:0.2f}" .format( c = weight ) )
print( "weight: {c:0.3f}" .format( c = weight ) )
print( "weight: {c:0.4f}" .format( c = weight ) )

بعد كل هذا ربما اخترت هذا التنسيق لتعمل به دائماً ولكننا لم ننتهي بعد هناك المزيد.

تنسيق f-string

هي الية تنسيق نصوص جديدة تعرف باسم f-string وهذا بسبب الحرف f الموجود في البداية قبل السلسلة النصية ، ويمكن تنسيقها بنفس الاسلوب الاخير في تنسيق format وهو الكائنات كالتالي:

مثال

name = "ahmed"
age = 10
weight = 35.50
print(f"name: {name} -- age: {age} -- weight: {weight}")

يمكن ايضا القيام بعمليات حسابية داخل الاقواس

مثال

name = "ahmed"
age = 10
weight = 35.50
print(f"name: {name} -- age: {age} -- weight: {weight * (5)**2}")

وللتحكم في طول وقيمة الارقام العشرية كالتالي:

مثال

weight = 35.50
print(f"weight: {weight:{1}.{1}}")
print(f"weight: {weight:{1}.{2}}")
print(f"weight: {weight:{1}.{3}}")
print(f"weight: {weight:{1}.{4}}")
print(f"weight: {weight:{1}.{5}}")

التنسيق لا يكون فقط داخل الطباعة يمكن ايضا التنسيق داخل متغيرات كالتالي الثلاث طرق بالاعلي:

name = "ahmed"
age = 10
weight = 35.50
m1 = "name: %s -- age: %d -- weight: %0.1f" % (name, age, weight)
m2 = "name: {0} -- age: {1} -- weight: {2:0.1f}".format(name, age, weight)
m3 = f"name: {name} -- age: {age} -- weight: {weight:{1}.{3}}"
print(m1)
print(m2)
print(m3)

كما تلاحظ تم بناء التنسيق داخل المتغير وتمت طباعتة بدون اي مشاكل ، والي هنا نكتفي بهذا القدر وننتقل الي الاختبار.

الاختبار

عزيزي الطالب الرائع نرغب في اعطائك هذا التحدي البسيط وهو مستوحي من اخر مثال.

داخل المحرر التالي تجد ثلاث متغيرات نصية، ودالة باسم main داخل تلك الدالة يوجد متغير باسم m1 ولكن لا يحتوي علي قيمة، المطلوب هو استخدام احدي طرق تنسيق النصوص لتنسيق النص التالي:

"name: 1 - address: 2 - phone: 3"

 لا يجب تغير اي شىء بالنص حتي المسافات الفارغة كل ما هو مطلوب تغيرة هو الارقام ، قم بتغير كل رقم الي ما يقابلة من متغير.

  1.  name
  2. addr
  3. phone
ملاحظة قيمة المتغيرات قد تتغير اثناء عمل البرنامج لذلك استخدم اسم المتغير وليس القيمة.

تاكد من تنسيق النص داخل المتغير m1 وان كنت لا تعرف كيف راجع اخر مثال. ثم اضغط زر التشغيل.

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

Next

التعليقات

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