دریافت input از طریق command line و قالب بندی رشته ها

04 آبان 1398
دریافت input از طریق command line و قالب بندی رشته ها

دریافت input از طریق command line

زبان پایتون به شما اجازه می دهد که داده های کاربران را از طریق command line دریافت کنید. روش انجام این کار در پایتون 2.7 و پایتون 3.6 متفاوت است؛ پایتون 3.6 از متد()input و پایتون 2.7 از متد()raw_input استفاده می کنند. به طور مثال در کد زیر از کاربر می خواهیم که username خود را وارد کند و زمانی که این کار انجام شود username را در صفحه پرینت می کند.

برای پایتون 3.6:

print("Enter your name:")
x = input()
print("Hello ", x)

برای پایتون 2.7:

print("Enter your name:")
x = raw_input()
print("Hello ", x)

این کدها را درون یک فایل ساده به نام demo_string_input.py قرار داده و سپس از طریق command line آن را بارگذاری کنید:

C:\Users\Your Name>python demo_string_input.py

واضح است که به جای آدرس بالا باید آدرس سیستم خود را وارد کنید. سپس برنامه در Command line به کاربر پیام زیر را نشان می دهد:

Enter your name:

حالا کاربر باید یک نام خاص را وارد کند، مثلا Linus:

Linus

سپس برنامه پیام زیر را به کاربر نمایش می دهد:

Hello Linus

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

برای آنکه مطمئن شویم یک رشته ی خاص دقیقا به شکلی که ما می خواهیم نمایش داده می شود می توانیم از متد ()format استفاده کنیم؛ این متد به شما اجازه می دهد قسمت های خاصی از رشته را فرمت (قالب بندی) کنید. برخی اوقات ما کنترل کاملی روی تمام قسمت های یک رشته نداریم، به طور مثال قسمت خاصی از رشته از سمت پایگاه داده یا از سمت کاربر می آید. برای کنترل کردن چنین مقادیری باید از curly braces (علامت {}) استفاده کرده (تا placeholder ایجاد کنیم)  و سپس مقدار را درون ()format قرار دهیم. به مثال زیر توجه کنید.

یک placeholder برای قیمت نمایش داده شده ایجاد می کنیم:

price = 49
txt = "The price is {} dollars"
print(txt.format(price))

خروجی:

The price is 49 dollars

شما می توانید درون curly braces ها از پارامترهای خاصی استفاده کنید که نشان می دهد مقدار پاس داده شده چطور تغییر پیدا کند. به طور مثال در کد زیر گفته ایم که قیمت را با دو رقم اعشار نمایش بده:

price = 49
txt = "The price is {:.2f} dollars"
print(txt.format(price))

خروجی:

The price is 49.00 dollars

این پارامترهای خاص در جدول زیر نمایش داده شده اند:

پارامتر خاص معنی
:< نتیجه را در سمت چپ قرار می دهد (در فضای تعریف شده و مجاز)
:> نتیجه را در سمت راست قرار می دهد (در فضای تعریف شده و مجاز)
:^ نتیجه را در وسط قرار می دهد (در فضای تعریف شده و مجاز)
:= علامت را در چپ ترین قسمت قرار می دهد
:+ نشانگر مثبت بودن یا منفی بودن عدد است
:- فقط نشانگر اعداد منفی است
: قبل از اعداد مثبت یک اسپیس و قبل از اعداد منفی یک علامت منفی قرار می دهد
:, با یک ویرگول اعداد را به صورت سه رقم سه رقم (هر هزار تا) جدا می کند.
:_ با یک آندرلاین اعداد را به صورت سه رقم سه رقم (هر هزار تا) جدا می کند
:b مقادیر را به مقدار باینری (دودویی) خودشان تبدیل می کند
:c مقادیر را به کد unicode خودشان تبدیل می کند
:d نشانگر مقادیر اعشاری
:e استفاده از نماد علمی e (به معنی 10 به توان x) با حروف کوچک
:E استفاده از نماد علمی E (به معنی 10 به توان x) با حروف بزرگ
:f نشانگر اعداد اعشاری به تعداد رقم اعشار خاص - در صورت مشخص نکردن تعداد ارقام اعشار، شش رقم اعشار به صورت پیش فرض در نظر گرفته می شود
:F نشانگر اعداد اعشاری به تعداد رقم اعشار خاص با حروف بزرگ (inf و nan به جای INF و NAN)
:g فرمت کلی و غیرمشخص
:G فرمت کلی و غیرمشخص (استفاده از نماد علمی E با حروف بزرگ)
:o نشانگر اعداد بر مبنای 8
:x نشانگر اعداد بر مبنای 6 - با حروف کوچک
:X نشانگر اعداد بر مبنای 6 - با حروف بزرگ
:n اعداد به صورت کلی
:% درصد

اگر بخواهید از مقادیر بیشتری (بیشتر از 1 مقدار) استفاده کنید باید آن ها را هم به format پاس بدهید:

print(txt.format(price, itemno, count))

به مثال زیر توجه کنید:

quantity = 3
itemno = 567
price = 49
myorder = "I want {} pieces of item number {} for {:.2f} dollars."
print(myorder.format(quantity, itemno, price))

خروجی:

I want 3 pieces of item number 567 for 49.00 dollars.

پاس دادن مقادیر از طریق index

برای اطمینان یافتن از پاس داده شدن مقدار مناسب برای هر placeholder و جا به جا نشدن مقادیر می توانید از index استفاده کنید؛ یعنی یک عدد خاص را درون curly brace ها در نظر بگیرید:

quantity = 3
itemno = 567
price = 49
myorder = "I want {0} pieces of item number {1} for {2:.2f} dollars."
print(myorder.format(quantity, itemno, price))

خروجی:

I want 3 pieces of item number 567 for 49.00 dollars.

همچنین اگر بخواهیم به یک مقدار بیش از یک بار اشاره کنیم می توانیم از همان index استفاده کنیم:

age = 36
name = "John"
txt = "His name is {1}. {1} is {0} years old."
print(txt.format(age, name))

خروجی:

His name is John. John is 36 years old.

البته توجه داشته باشید که لزومی به انتخاب عدد برای index ها نیست بلکه می توانید از index های اسمی نیز استفاده کنید؛ یعنی نام مشخصی را درون curly brace ها تایپ کنید:

myorder = "I have a {carname}, it is a {model}."
print(myorder.format(carname = "Ford", model = "Mustang"))

خروجی:

I have a Ford, it is a Mustang.

مشخصا برای چنین index هایی باید نام آن ها را درون ()format تایپ کنید (مانند مثال بالا). امیدوارم درک بهترین نسبت به قالب بندی رشته ها پیدا کرده باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری از مقدماتی تا پیشرفته با پایتون توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.