آموزش گرفتن ورودی در پایتون

گرفتن ورودی از کاربر در برنامه‌هایی که می‌نویسیم می‌تواند به کاربرد بیشتر و بهبود عملکرد نرم‌افزار منتهی شود. این روزها در اکثر برنامه‌ها نیاز داریم اطلاعات مختلفی را از کاربر دریافت کنیم. تقریباً در تمام زبان‌های برنامه نویسی توابع و امکانات مختلفی برای گرفتن ورودی از کاربر در نظر گرفته شده است. گرفتن ورودی در پایتون از آنچه که فکر می‌کنید بسیار آسان‌تر است. در این مقاله به بررسی انواع استفاده input در پایتون می‌پردازیم.

تعامل با کاربر روز به روز مهم‌تر می‌شود. بسیاری از برنامه‌های پایتون که آن‌ها را توسعه می‌دهیم نیازمند دریافت ورودی هستند. از آن جایی که ممکن است این برنامه‌ها رابط کاربری نداشته باشند، بهتر است ورودی‌های کاربر را در محیط اجرای برنامه (کنسول) دریافت کنیم.

در زبان برنامه نویسی پایتون یک تابع ساده برای گرفتن ورودی از کاربر در نظر گرفته شده. این تابع به صورت built-in است. یعنی برای استفاده از آن نیاز به وارد کردن هیچ کتابخانه یا کد اضافی به برنامه نخواهید داشت.

دستوری ورودی input در پایتون

در زبان پایتون به کمک تابع input() می‌توانیم ورودی مورد نظر را از کاربر دریافت کنیم.

در نسخه 2 پایتون، تابع raw_input() برای دریافت ورودی از کاربر وجود داشت. در نسخه 3 این تابع حذف شده و input() جایگزین آن شد. ویژگی‌ها و عملکرد این دو تابع دقیقاً شبیه به هم هستند.

هنگامی که اجرای برنامه به تابع input() می‌رسد، مفسر پایتون منتظر می‌ماند تا کاربر ورودی مورد نظر خود را وارد کند. پس از آن برنامه به ادامه اجرای خود خواهد پرداخت.

input()

پس از صدا زده شدن این تابع، کاربر می‌تواند کاراکترهای مورد نظر را در کنسول وارد کرده و با فشرده کلید Enter اتمام وارد کردن اطلاعات را اعلام کند.

خروجی تابع input

خروجی این تابع یک رشته (String) است. این رشته دقیقا همان ورودی است که کاربر در برنامه وارد کرده است.

نوع خروجی تابع را نمی‌توان تغییر داد. در ادامه روش‌های برای تبدیل نوع داده ورودی تابع input در پایتون را بررسی خواهیم کرد.

 

گرفتن داده از کاربر در پایتون

ممکن است بخواهیم قبل قبل از دریافت ورودی از کاربر، پیغامی به کاربر نمایش دهیم.

ورودی تابع input یک رشته است. پایتون قبل از منتظر ماندن برای وارد کردن داده‌ها، رشته ورودی را در کنسول چاپ کرده و سپس منتظر دریافت ورودی می‌ماند.

آرگومان ورودی این تابع دلخواه است. یعنی اگر هیچ پیامی برای چاپ به تابع ندهیم، تابع بدون مشکل اجرا خواهد شد.

ورودی رشته در پایتون

همانطور که گفته شده خروجی تابع input() همیشه یک رشته است.

فرض کنید می‌خواهیم در ابتدای یک برنامه اسم کاربر را پرسیده و به او سلام کنیم. قطعه کد زیر همین کار را انجام می‌دهد.

name = input("Please Enter Your name: ")
print("Hello " + name + "!")

پس از اجرای این برنامه، ابتدا پیغامی مبنی بر وارد کردن نام نمایش داده می‌شود. پس از وارد کردن اسم، پیام سلام چاپ خواهد شد.

متن زیر نمونه‌ای از اجرای این برنامه است.

Please Enter Your name: Omid
Hello Omid!

اگر می‌خواهید در مورد نحوه عملکرد دقیق تابع input در پایتون بدانید، به مستندات آن در مراحعه کنید.

 

گرفتن عدد از کاربر در پایتون

اگر بخواهیم صرفاً یک عدد (int) در ورودی بگیریم، ورودی در پایتون (تابع 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() می‌توان هر نوع جداکننده‌ای برای مقدار ورودی مشخص کرد.

اگر بخواهیم سه عدد مختلف را به کمک علامت , از هم متمایز کرده و دریافت کنیم؛ می‌توان از قطعه کد زیر استفاده کرد.

x, y, z = input("Enter Numbers: ").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() نیز می‌توان چندین مقدار ورودی را با جداکننده مشخص از کاربر دریافت کرد و هر کدام را در متغیرهای جداگانه‌ای ذخیره کنیم.