فرمت بندی رشته ها و اعداد

از متد ()print هم می توان برای قالب بندی رشته ها و اعداد استفاده کرد. این متد بر اساس یک الگو و با استفاده از کاراکترهای خاصی که در جدول زیر آمده اند، قالب بندی را انجام می دهد. الگوی کلی قالب بندی رشته ها و اعداد به صورت زیر است :

% [flags] [width] [.precision] conversion-character

در الگوی بالا اجزایی که در داخل کروشه هستند اختیاری می باشند. در حالت عادی الگو با علامت % شروع می شود و بعد از آن یکی از کاراکترهای جدول زیر می آید :

%c نمایش کاراکتر
%d نمایش اعداد در مبنای ده (صحیح)
%e نمایش اعداد اعشاری نمایی
%f نمایش اعداد اعشاری
%i نمایش اعداد صحیح
%o نمایش اعداد مبنای 8
%s نمایش رشته
%u نمایش اعداد ده دهی مثبت
%x نمایش اعداد مبنای 16
%% چاپ علامت درصد
\% چاپ علامت درصد

حال فرض کنید که می خواهیم یک عدد اعشاری را فرمت بندی کنیم :

print("%f" % 34.789456);
34.789456

همانطور که مشاهده می کنید در مثال بالا از %f برای نمایش عدد اعشار استفاده کرده ایم. همین مثال ، مثال خوبی است که به شما نحوه استفاده از اجزایی که در داخل کروشه هستند را نشان دهیم. ابتدا کاربرد flag یا نشانه را می گوییم. نشانه هایی که بعد از علامت درصد می توان استفاده کرد در جدول زیر آمده اند :

نشانه کاربرد
با اضافه کردن فاصله به سمت راست یک عدد یا رشته آن را به سمت چپ می کشد.
+ با اضافه کردن فاصله به سمت چپ یک عدد یا رشته آن را به سمت راست می کشد.
0 تعدادی صفر که خودمان تعیین کرده ایم به سمت راست یا چپ نوشته یا عدد اضافه می کند
فاصله تعدادی فاصله که خودمان تعیین کرده ایم به سمت راست یا چپ نوشته یا عدد اضافه می کند

به کار بردن نشانه های بالا به تنهایی و بدون اینکه تعیین کنیم چه تعداد فاصله یا صفر می خواهیم به ابتدا یا انتهای عدد یا رشته اضافه کنیم بی معنی می باشد. در این صورت باید از جزء بعدی که width یا پهنا هست استفاده کنیم. [.precision] هم در صورتی که متغیر از نوع اعداد اعشاری باشد، برای تعیین تعداد ارقام اعشار، و اگر از نوع رشته باشد تعداد کارکترهایی که قرار است نمایش داده شوند را مشخص می کند. حال به مثال بر می گردیم. فرض کنید که می خواهیم سه رقم از ارقام بعد از ممیز عدد اعشار مثال بالا را نشان داده و قبل از بخش صحیح آن سه عدد صفر قرار دهیم یعنی : 00034.789 .

انجام این کار بسیار راحت است :

print("%09.3f" % 34.789456);
00034.789

همانطور که در کد بالا مشاهده می کنید الگو با علامت % شروع می شود. سپس نشانه را می نویسیم که در اینجا 0 است. اما اینکه چرا عدد 9 را نوشته ایم دلیلش این است که 34.789 با احتساب ممیز آن برای نمایش نیاز به شش جای خالی دارد و چون قرار است که ما سه صفر هم قبل از عدد 34 قرار دهیم پس باید 9 جای خالی ایجاد کنیم. و اما [ 3. ] هم به معنای سه رقم اعشار است و f هم که برای نمایش اعداد اعشاری به کار می رود. فرض کنید که می خواهیم سه کاراکتر اول رشته Programming را نمایش دهیم، برای این منظور به صورت زیر عمل می کنیم :

print("%.3s" % "Programming");
Pro

در زیر هم مثالهایی از نحوه استفاده از متد print و کاراکترهای خاص آن آمده است :

چاپ یک رشته ساده

print("Hello Welcome to Python Programming");
Hello Welcome to Python Programming

چاپ کاراکترهای کنترلی

print("Hello Welcome to\t Python Programming");
Hello Welcome to	 Python Programming

همانطور که مشاهده می کنید در کد بالا استفاده از t\ باعث ایجاد فاصله بین رشته ها می شود.

چاپ متغیرها

print("Addition of two Numbers : %d" % sum);

قالب بندی چند قسمتی

print("I Love %c %s" % ('c',"Programming"));
I Love c Programming

در کد بالا کاراکتر C جایگزین c% و رشته یا کلمه Programming جایگزین s% می شود.

قالب بندی اعداد اعشاری

print("%-12s%-12s\n" % ("Column 1", "Column 2"));
print("%-12.5f%.20f" % (12.23429837482,9.10212023134));
Column 1    Column 2    
12.23430    9.10212023134000000000

درباره کد بالا یک نکته را یادآور می شویم و آن این است که اگر تعداد کاراکترهای یک رشته از تعدادی که ما برای قالب بندی آن استفاده کرده ایم کمتر باشد تعدادی فاصله در سمت چپ یا راست رشته قرار می گیرد. مثلا تعداد کاراکترهای Column 1 هشت عدد می باشد و ما برای قالب بندی و ایجاد فاصله در سمت راست آن عدد 12- را به کار برده ایم. با این کار 4 فاصله در سمت راست رشته قرار می گیرد و باعث فاصله آن با رشته بعدی می شود. حال اگر تعداد کارکترهای رشته بیشتر از تعداد باشد که ما تعیین کرده ایم، کل رشته یا عدد بدون هیچ گونه فاصله ای در سمت چپ یا راست، نمایش داده می شود. همین نکته در مورد مثال های زیر صدق می کند.

نمایش اعداد صحیح در قالب خاص

print("%d" % 1234);
print("%3d" % 1234);
print("%6d" % 1234);
print("%-6d" % 1234);
print("%06d" % 1234);
1 2 3 4
1 2 3 4 - - 
- - 1 2 3 4
1 2 3 4 - -
0 0 1 2 3 4

نمایش رشته ها در قالب خاص

str = "Programming";

print("%s" % str);
print("%10s" % str);
print("%15s" % str);
print("%-15s" % str);
print("%15.5s" % str);
print("%-15.5s" % str);
Programming
Programming
----Programming
Programming----
----------Progr
Progr----------

در دو کد آخر خط های تیره در اصل فاصله هستند که برای روشن شدن موضوع آنها را به صورت خط تیره نمایش داده ایم.برای روشن شدن کاربرد اعداد منفی و مثبت بعد از علامت % فرض کنید که شما می خواهید بین دو رشته Python و Programming چهار فاصله قرار دهید. این کار به دو صورت امکان پذیر است. یا بعد از کلمه Python چهار فاصله قرار دهید :

print("%-8s%s" % ("Python","Programming"));
Python    Programming

که در مثال بالا 8- به معنای این است که 8 مکان ایجاد شود که چهار تا از آنها توسط کلمه Python اشغال می شود و چهار تای دیگر به خاطر علامت منفی در سمت راست کلمه Python قرار می گیرند.حالت دوم هم این است که در سمت چپ کلمه Programming چهار فاصله قرار بدهیم :

print("%s%15s" % ("Python", "Programming"));
Python    Programming

که در این صورت باید عدد 15 را بنویسیم. چونکه کلمه Programming یازده حرفی است، پس چهار مکان دیگر به خاطر مثبت بودن علامت 15 در سمت چپ آن قرار می گیرند. روش دیگر برای قالب بندی رشته ها استفاده از متد ()format از کلاس str است. این متد شبیه به متد print عمل می کند. به مثال زیر توجه کنید :

Str1 = "Python Programming";  
Str2 = str.format("Str1 is %s" % Str1);
Str3 = str.format("value is %f" % 32.33434);
Str4 = str.format("value is %32.12f" % 32.33434);

print(Str1);
print(Str2);
print(Str3);
print(Str4);
Str1 is Python Programming
value is 32.334340
value is                  32.334340000000

نکته ای که فراموش شد و الان یادآور می شویم در مورد اعداد اعشار است. اگر تعدادی که ما برای نمایش رقم اعشار مشخص کرده ایم بیشتر از ارقام اعشار عدد باشد بسته به تعدادی که ما مشخص کرده ایم عدد صفر بعد از ارقام اعشار قرار می گیرد. مثلا در مثال بالا [.12] یعنی دوازده رقم اعشار نمایش داده شود و چون تعداد ارقام اعشار عدد در مثال بالا 5 تا می باشد در نتیجه هفت عدد صفر بعد از آن نمایش داده می شود.