گرفتن ورودی از کاربر در برنامههایی که مینویسیم میتواند به کاربرد بیشتر و بهبود عملکرد نرمافزار منتهی شود. این روزها در اکثر برنامهها نیاز داریم اطلاعات مختلفی را از کاربر دریافت کنیم. تقریباً در تمام زبانهای برنامه نویسی توابع و امکانات مختلفی برای گرفتن ورودی از کاربر در نظر گرفته شده است. گرفتن ورودی در پایتون از آنچه که فکر میکنید بسیار آسانتر است. در این مقاله به بررسی انواع استفاده input در پایتون میپردازیم.
تعامل با کاربر روز به روز مهمتر میشود. بسیاری از برنامههای پایتون که آنها را توسعه میدهیم نیازمند دریافت ورودی هستند. از آن جایی که ممکن است این برنامهها رابط کاربری نداشته باشند، بهتر است ورودیهای کاربر را در محیط اجرای برنامه (کنسول) دریافت کنیم.
در زبان برنامه نویسی پایتون یک تابع ساده برای گرفتن ورودی از کاربر در نظر گرفته شده. این تابع به صورت built-in
است. یعنی برای استفاده از آن نیاز به وارد کردن هیچ کتابخانه یا کد اضافی به برنامه نخواهید داشت.
دستوری ورودی input در پایتون
در زبان پایتون به کمک تابع input()
میتوانیم ورودی مورد نظر را از کاربر دریافت کنیم.
هنگامی که اجرای کد پایتون به تابع input()
میرسد، مفسر پایتون منتظر میماند تا کاربر ورودی مورد نظر خود را وارد کند. پس از آن برنامه به ادامه اجرای خود خواهد پرداخت.
input()
پس از صدا زده شدن این تابع، کاربر میتواند کاراکترهای مورد نظر را در کنسول وارد کرده و با فشرده کلید Enter اتمام وارد کردن اطلاعات را اعلام کند.
در نسخه 2 پایتون، تابع raw_input()
برای دریافت ورودی از کاربر وجود داشت. در نسخه 3 این تابع حذف شده و input()
جایگزین آن شد. ویژگیها و عملکرد این دو تابع دقیقاً شبیه به هم هستند.
خروجی تابع input
خروجی این تابع یک رشته (String) است. این رشته دقیقا همان ورودی است که کاربر در برنامه وارد کرده است.
نوع خروجی تابع را نمیتوان تغییر داد. در ادامه روشهای برای تبدیل نوع داده ورودی تابع input در پایتون را بررسی خواهیم کرد.
گرفتن داده از کاربر در پایتون
ممکن است بخواهیم قبل قبل از دریافت ورودی از کاربر، پیغامی به کاربر نمایش دهیم.
ورودی تابع input یک رشته است. پایتون قبل از منتظر ماندن برای وارد کردن دادهها، رشته ورودی را در کنسول چاپ کرده و سپس منتظر دریافت ورودی میماند.
آرگومان ورودی این تابع دلخواه است. یعنی اگر هیچ پیامی برای چاپ به تابع ندهیم، تابع بدون مشکل اجرا خواهد شد.
ورودی رشته در پایتون
همانطور که گفته شده خروجی تابع input()
همیشه یک رشته است.
فرض کنید میخواهیم در ابتدای یک برنامه اسم کاربر را پرسیده و به او سلام کنیم. قطعه کد زیر همین کار را انجام میدهد.
name = input("Please Enter Your name: ")
print("Hello " + name + "!")
پس از اجرای این برنامه، ابتدا پیغامی مبنی بر وارد کردن نام نمایش داده میشود. پس از وارد کردن اسم، پیام سلام چاپ خواهد شد.
متن زیر نمونهای از اجرای این برنامه است.
Please Enter Your name: Omid Hello Omid!
اگر میخواهید در مورد نحوه عملکرد دقیق تابع input در پایتون بدانید، به مستندات آن در مراحعه کنید.
گرفتن عدد از کاربر در پایتون
تابع input()
برای گرفتن ورودی در پایتون همیشه یک رشته (String) به ما میدهد. برای مثال اگر بخواهیم یک عدد را از کاربر گرفته و به توان برسانیم، قاعدتاً باید کدی مشابه کد زیر داشته باشیم.
num = input("Enter Number: ")
print(num**2)
اما با اجرای این برنامه خواهیم دید که پس از وارد کردن عدد، با خطایی مشابه خطای زیر مواجه خواهیم شد!
معنی این خطا چیست؟
این خطا به این معنی است که عملگر توان برای عدد و رشته غیر قابل اجراست! چون عددی که از ورودی گرفتیم به صورت رشته ذخیره شده به این خطا برمیخوریم!
اما راه حل چیست؟
برای رفع این مشکل، میتوانیم مقدار ورودی را به نوع دادهای مورد نظر خود تبدیل کنیم.
مثلاً اگر بخواهیم مقدار متغیر num
را به صورت عدد صحیح (Integer) داشته باشیم، باید از تابع int()
در پایتون کمک بگیریم.
این تابع یک مقدار ورودی (رشتهی صرفاً حاوی عدد یا یک نوع عددی دیگر) را گرفته و یک عدد صحیح به ما برمیگرداند.
مثلا اگر رشته '123'
را داشته باشیم، با صدا زدن int('123')
عدد 123 را خواهیم داشت.
int('123')
پس برنامه ما برای گرفتن عدد ورودی در پایتون چیزی شبیه کد زیر خواهد شد.
num = input("Enter Number: ")
print( int(num)**2 )
گرفتن عدد اعشاری از کاربر
اگر بخواهیم عدد اعشاری از کاربر دریافت کنیم، تابع int()
پاسخگو نخواهد بود! چرا که این تابع یک عدد صحیح به ما میدهد.
مشابه همین تابع، تابعی به نام float()
در پایتون وجود دارد. به کمک این تابع میتوان مقادیر را به عدد اعشاری تبدیل کرد.
گرفتن چند ورودی در یک خط
گاهی اوقات نیاز داریم در یک خط و یک بار ورودی گرفتن، چندین مقدار مختلف را به عنوان ورودی از کاربر دریافت کنیم.
مثلاً فرض کنید میخواهیم نام و نام خانوادگی کاربر را به صورت مجزا از هم دریافت کنیم.
گرفتن چند ورودی با جداکننده (Separator)
روش اول، استفاده از تابع split()
است. این تابع روی یک رشته اعمال میشود. طبق پارامتری که به عنوان ورودی گرفته است، اقدام به جدا کردن رشته میکند.
اگر هیچ آرگومانی به عنوان ورودی به تابع داده نشود، کاراکتر فضای خالی (Space) به عنوان جداکننده در نظر گرفته خواهد شد.
name, family = input("Enter Your name: ").split()
پس از اجرا، مقدار زیر را به عنوان ورودی به برنامه میدهیم.
Omid Rajaei
و در انتها مقادیر ذخیره شده در متغیرها را چاپ میکنیم. مقادیر چاپ شده به صورت کامنت در کد زیر مشخص شدهاند.
print(name)
print(family)
# Omid
# Rajaei
گرفتن چند عدد در ورودی
به کمک تابع split()
میتوان هر نوع جداکنندهای برای مقدار ورودی مشخص کرد.
اگر بخواهیم سه عدد مختلف را به کمک علامت , از هم متمایز کرده و دریافت کنیم؛ میتوان از قطعه کد زیر استفاده کرد.
ورودی نمونه و مقادیر ذخیره شده در هر متغیر پایتونی به صورت زیر خواهد بود.
Enter Numbers: 21,25,23
# x = '21'
# y = '25'
# z = '23'
البته توجه کنید که مقادیر ذخیره شده به صورت String هستند و برای تبدیل آنها به عدد میتوان از تابع int()
کمک گرفت.
گرفتن لیست از کاربر در پایتون
گاهی اوقات نیاز داریم تعداد نامشخصی ورودی از کاربر دریافت کنیم. یکی از بهترین ایدهها برای این کار استفاده از لیستهاست.
دو روش برای گرفتن یک لیست از دادهها وجود دارد. در ادامه با نحوه اجرای هر کدام آشنا خواهید شد.
روش اول: استفاده از حلقه برای دریافت لیست از کاربر
به کمک یک حلقه در پایتون و تابع input()
میتوانیم به تعداد نامحدودی ورودی دریافت کرده و آنها را به لیست خود اضافه میکنیم.
در این حالت باید یک کاراکتر به عنوان کاراکتر پایان مشخص کنیم. اگر کاربر کاراکتر مورد نظر را وارد کرد، از حلقه خارج شده و به ادامه برنامه بپردازیم.
data_list = []
while True: data = input() if data == "/": break data_list += [data]
print(data_list)
در این مثال، با وارد کردن علامت /
گرفتن ورودی به پایان میرسد.
روش دوم: استفاده از سازنده لیست پایتون
در این روش به کمک روش دریافت چند ورودی در یک خط و سازنده لیست در پایتون تعداد نامشخصی داده را در یک خط دریافت میکنیم.
فرض کنید میخواهیم تعدادی عدد صحیح را دریافت کرده و در لیست data_list
ذخیره کنیم.
قطعه کد زیر این کار را برای ما انجام خواهد داد.
data_list = [ int(x) for x in input("Enter multiple value: ").split() ]
جمع بندی: گرفتن ورودی در پایتون
به کمک تابع input()
در پایتون میتوان از کاربر ورودی گرفت. این تابع یک ورودی به صورت اختیاری میگیرد که قبل از انتظار برای دریافت ورودی، آنرا چاپ خواهد کرد. هر چیزی که به عنوان داده ورودی وارد شود، توسط این تابع و به صورت رشته متنی در پایتون به ما بازگردانده میشود. میتوان این مقدار را در متغیری ذخیره کرده و یا به کمک توابعی مثل int()
آنرا به نواع دادهای دلخواه تبدیل کرد.
با استفاده از تابع split()
نیز میتوان چندین مقدار ورودی را با جداکننده مشخص از کاربر دریافت کرد و هر کدام را در متغیرهای جداگانهای ذخیره کنیم.