فرمت بندی رشته ها و اعداد
از متد ()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 تا می باشد در نتیجه هفت عدد صفر بعد از آن نمایش داده می شود.