بهترین راه تعامل با کاربران در پایتون استفاده از تابع input است. این تابع کلید تعاملی کردن پایتون است. تابع input برنامهها را قادر میسازد تا اطلاعات کاربر را دریافت کنند و به صورت مناسبی پاسخ دهند. از برنامه سادهای که با کاربر به نام خود احوال پرسی میکند تا برنامههای بزرگی که مقدار زیادی دادههای ورودی و پیچیده دریافت میکنند، هیچ کدام بدون استفاده از ابزار input در پایتون قابل پیادهسازی نیستند.
در این راهنمای جامع از مجله فرادرس، از کاربردهای پایه تابع input در پایتون شروع میکنیم و تا موضوعات پیشرفتهتر عمیق خواهیم شد و حتی برای حل مشکلات رایج احتمالی زمان استفاده از این تابع، راه کارهای مختلفی را بررسی خواهیم کرد. فرقی نمیکند که در ارتباط با زبان برنامهنویسی پایتون تازهکار باشید یا برنامهنویسی باتجربه که به دنبال افزایش دانش خود است، در هرحال تلاش کردیم تا جای ممکن این مطلب برای شما مفید واقع شود.
تابع input در پایتون چیست؟
تابع input در پایتون ، تابعی «درونی» (Built-In) است که به برنامه اجازه میدهد از طریق دریافت اطلاعات ورودی با کاربر در تعامل باشد. خطی از ورودی میخواند که معمولا کاربر وارد کرده است و اطلاعات دریافت شده را به نوع داده رشته تبدیل میکند و رشته را برمیگرداند. برای نمونه به کد پایین توجه کنید.
1name = input("Enter your name: ")
2print("Hello, " + name)
در نمونه کد بالا، برنامه پیام «:Enter your name» را نمایش میدهد سپس منتظر میماند تا کاربر چیزی تایپ کند و در آخر پیام سلام را با هر چیزی که کاربر وارد کرده روی نمایشگر چاپ میکند. در بخشهای بعدی روشهای پیشرفتهتر، تکنیکهای برنامهنویسی و کدهای پیچیدهتری را در ارتباط با تابع input بیان کردهایم.
تابع input در پایتون، تابعی درونی است که مسیر تعامل با کاربر را در برنامهها باز میکند. افزودن پویایی و تعامل به کدها یکی از مفاهیم بنیادین در برنامهنویسی است. اما تابع input دقیقا چیست و در پایتون چگونه عمل میکند.
تابع input، پایتون را به عنوان شروع کننده مکالمه درنظر بگیرید. این تابع گفتوگویی را با کاربر شروع میکند و منتظر پاسخ کاربر میماند. از نظر فنی، تابع input در پایتون خطی را از ورودی میخواند که معمولا ورودی کاربر است، اطلاعات خوانده شده از خط را به رشته تبدیل میکند و آن رشته را برمیگرداند.
سینتکس تابع input کاملا واضح و ساده است. به خط کد زیر توجه کنید.
در اینجا prompt نام پارامتری است که به تابع ارسال شده. بهجای prompt باید رشتهای را قرار دهید که برای نمایش روی خروجی استاندارد درنظر گرفتهاید. خروجی استاندارد معمولا در کنسول کار روی صفحه نمایش کاربر قرار دارد. prompt بدون ایجاد کردن خط جدید نمایش داده میشود که به عنوان نشانهای برای کاربر عمل میکند و نشان میدهد که برنامه برای گرفت ورودی آماده است.
اگر آرگومان prompt حذف شده باشد، تابع هنوز هم بعد از اجرا شدن منتظر داده ورودی میماند اما این بار بدون پیغام قبلی. به کمک مثال سادهای از تابع input()
این مطلب را توضیح خواهیم داد.
1name = input()
2print("Hello, " + name)
در این نمونه کد، برنامه پیامی را نمایش نمیدهد اما صبورانه منتظر کاربر میماند تا چیزی تایپ کند و بعد از آن جمله سلام را همراه با چیزی که کاربر وارد کرده است نمایش میدهد.
نکته مهمی که باید درباره تابع input به یاد داشته باشید، این است که این تابع همیشه دادهی ورودی کاربر را بهصورت رشته برمیگرداند. اگر میخواهید با نوع دادهی متفاوتی کار کنید، نیاز خواهید داشت که رشته برگشتداده شده از این تابع را به نوع داده مورد نظر خود «تبدیل» (Convert) کنید.
موارد کاربرد پیش رفته input در پایتون
حالا که اصول اولیه تابع input در پایتون را متوجه شدید، میتوانیم وارد مباحث پیشرفتهتری شویم.
در این بخش، درباره تعامل تابع input با نوع دادههای مختلف، بحث خواهیم کرد. کاربرد این تابع را در سناریوهای پیچیده نمایش خواهیم داد، در مبحث مدیریت خطا کاوش میکنیم و حتی درباره بعضی از ریسکهای امنیتی بالقوه صحبت خواهیم کرد.
کار کردن با نوع داده های مختلف
همانطوری که قبلا اشاره کردیم، تابع input با همه ورودیهای کاربر مانند رشته رفتار میکند اما چه میتوان کرد اگر نیاز داشته باشیم کاربر عدد، لیست یا سایر نوع دادهها را وارد کند. در چنین سناریوهایی باید تبدیلی از نوع داده رشتهای که توسط تابع input برگشت داده شده به نوع داده مطلوبمان ارائه دهیم. در ادامه مثالی از روش انجام این کار را آماده کردهایم.
1# Input a number
2num = int(input("Enter a number: "))
3print("You entered: ", num)
در مثال بالا، از تابع int()
برای تبدیل کردن داده ورودی کاربر به عدد صحیح استفاده کردیم.
اگر درنظر داشته باشید که مقدار ورودی را به نوع دادههای Float یا لیست تبدیل کنید، میتوانید به ترتیب از تابعهای float()
و eval()
استفاده کنید. حتما میتوانید به زمانهایی فکر کنید که برای اجرای پروژههایتان به این نوع از توابع نیاز داشته باشید.
در کد زیر مثالی از تبدیل ورودیهای کاربر به نوع دادههای فلوت و لیست میبینیم.
1# Input a float
2num = float(input("Enter a float number: "))
3print("You entered: ", num)
4
5# Input a list
6lst = eval(input("Enter a list (for example [1,2,3]): ")) # User must input list format, we are using eval to evaluate the list
7print("You entered: ", lst)
فرض میکنیم کاربری که در مقابل کد اجرا شده بالا قرار گرفته برای نوع داده فلوت، عدد اعشاری 2.5 و برای نوع داده لیست، [4,5,6] را وارد کرده است. خروجی ادامه اجرای کد بالا به صورت زیر خواهد بود.
Enter a float number: 2.5 You entered: 2.5 Enter a list (for example [1,2,3]): [4,5,6] You entered: [4,5,6]
توجه کنید که استفاده از تابع eval()
میتواند خطرناک باشد زیرا این تابع میتواند هر کد پایتونی را اجرا کند. استفاده از این کد برای مثالهای ساده یا برنامههای شخصی میتواند مفید باشد اما در کدهای مهم یا برنامههایی که هر کاربری میتواند هر ورودی را که میخواهد وارد کند، نباید از این تابع استفاده کرد یا با احتیاط زیاد باید استفاده شود. بهترین کار این است که همیشه ورودی کاربر را اعتبارسنجی کنید.
تابع input در حلقه
تابع input()
ابزار چندکارهای برای استفاده در سناریوهای مختلف و حتی پیچیده است. برای نمونه، میتوانید از این تابع در حلقهای استفاده کنید برای اینکه دائم ا از کاربر، ورودی جدید بخواهد تا وقتی که کاربر تصمیم به خروج از برنامه بگیرد. به مثال آمده در پایین توجه کنید.
1while True:
2 response = input("Enter 'q' to quit: ")
3 if response == 'q':
4 break
در این مثال، برنامه بهطور دائم از کاربر میخواهد که حرف q
را وارد کند تا از حالت اجرا خارج شود. هر بار ورودی کاربر را با حرف q
مقایسه میکند و تا زمانی که کاربر مقدار دیگری را به عنوان ورودی به برنامه میدهد این حلقه تکرار خواهد شد. بهطور ویژه، در برنامههایی که نیاز به تعامل دائمی با کاربر دارند تا زمان فراهم شدن شرایطی خاص، این قابلیت میتواند بسیار مفید باشد.
مدیریت خطای مناسب
وقتی که در پایتون با دادههای ورودی کاربر کار میکنید، اینکه خطاهای مربوط به دادههای ورودی را بهصورت واضح و مناسبی مدیریت کنید از اهمیت بهسزایی برخوردار است. اگر از کاربری میخواهید که ورودی را به شکل عدد وارد کند ولی کاربر مخاطب برنامه، ورودی را شامل حروف الفبا وارد کند، زمانی که برنامه شما تلاش میکند دادههای ورودی را به عدد تبدیل کند دچار مشکل خواهد شد و اجرای برنامه متوقف میشود.
برای اینکه از این اتفاق جلوگیری کنیم میتوانیم از بلوک کد try-except استفاده کنیم و خطاها را به نحو شایستهای مدیریت کنیم. نمونهای از بلوک کد try-except در مثال آمده در پایین پیادهسازی شده است.
1try:
2 num = int(input("Enter a number: "))
3except ValueError:
4 print("That's not a number!")
در مثال بالا، اگر کاربر چیزی وارد کند که قابل تبدیل به عدد نباشد، برنامه خطای ValueError
میگیرد و بهجای اینکه اجرای برنامه متوقف شود پیامی را برای راهنمایی به کاربر نمایش میدهد. برای فراهم کردن تجربه کاربری مناسب حتی در زمان ورود دادهی اشتباهی توسط کاربر، استفاده از بلوک try-except روش بسیار خوبی است.
خطرات امنیتی و راه کارهای پیش گیری
از آنجا که تابع input در پایتون ابزار قدرتمندی است درصورت مدیریت غیر دقیق میتواند خطر امنیتی هم ایجاد کند. اگر در حال استفاده از تابع eval()
برای تبدیل کردن ورودیهای کاربر به لیست یا هر نوع داده دیگری باشید و احتمال ارسال کد مخرب از طرف کاربر وجود داشته باشد حتما به این نکته توجه کنید که تابع eval()
در برنامه، هر کدی را که به عنوان ورودی ارسال شده اجرا خواهد کرد.
پاک سازی رشته ها
برای کاهش خطرات، بهترین کار ممکن این است که تا جای ممکن زمان استفاده از تابع input در پایتون از بکاربردن تابع eval()
اجتناب کنید. اگر تحت شرایطی ناگزیر استفاده از تابع eval()
شدید، اولین کار این است که دادههای ورودی کاربر را تا جای ممکن ضدعفونی کنید یعنی هر کد مخرب احتمالی را از داخل دادههای ورودی حذف کنید.
در مثال زیر نمونهای از پاکسازی داده ورودی کاربر پیادهسازی شده است.
1import re
2
3# Input a string
4s = input("Enter a string: ")
5
6# Sanitize the string
7s = re.sub('[^ws-]', '', s)
8print("Sanitized string: ", s)
اعتبارسنجی داده های ورودی
در نهایت باید بدانیم که مهمترین کار، بررسی دادههای ورودی است. هنگام کار با دادههایی که کاربران وارد میکنند باید از بابت صحت دادهها و مطابقت با استاندار مورد توقع درباره این نوع ورودی، مطمئن شوید. برای اینکار باید دادهها را با شرایط مورد نظر اعتبارسنجی کرد. این مطلب فقط به پیشگیری از اشتباهات و محافظت از دادهها مربوط نیست بلکه تضمین میکند برنامه نوشته شده بهطور دقیق کاری را که برای آن تعریف شده، انجام دهد.
در کد زیر مثالی از اعتبارسنجی دادههای ورودی کاربر پیادهسازی شده است.
1while True:
2 response = input("Enter a number: ")
3 if response.isdigit():
4 print("You entered: ", int(response))
5 break
6 else:
7 print("That's not a number! Please try again.")
تا اینجای مطلب، کاربردهای پیشرفته تابع input در پایتون را بررسی کردیم. در ادامه کار به خطایابی و رفع خطا برای مشکلات رایج این تابع میپردازیم.
خطایابی مشکلات مربوط به تابع input در پایتون
کار کردن با تابع input در پایتون بعضی وقتها میتواند شبیه به حرکت در هزارتو بسیار سردرگم کننده باشد. خطاهایی رخ میدهند، با چالشهای پیچیدهای روبهرو میشوید و حتی ممکن است برطرف کردن خطاها غیر ممکن بهنظر برسد. اما نگران نباشید راهکاری برای برطرف کردن هرکدام از چالشهای پیشرو ارائه خواهیم داد.
رفع خطای ValueError
وقتی از تابع input()
استفاده میکنید شاید با چند خطای رایج روبهرو شوید. یکی از این خطاها ValueError
است. این خطای موذیانه زمانی پیش میآید که برای تبدیل کردن ورودی کاربر به نوع خاصی از داده تلاش میکنید اما نوع داده ورودی از نوع صحیحی نیست.
برای مثال، تلاش برای تبدیل دادههای ورودی به عدد وقتی که کاربر کلمه وارد کرده باعث ایجاد خطای ValueError
میشود. برای اینکه این خطا را به بهترین شکل ممکن مدیریت کنیم، زمانی که خطا ایجاد شد، میتوانیم با استفاده از بلاک کد try-except متوجه شویم و به شکل بسیار مناسبی وضعیت را مدیریت کنیم.
مثالی که در ادامه آمده روش سادهای از پیادهسازی بلوک try-except را نشان میدهد.
1try:
2 num = int(input("Enter a number: "))
3 print("You entered: ", num)
4except ValueError:
5 print("That's not a number!")
مدیریت خطای TypeError
خطای بسیار رایج بعدی خطای TypeError
است. زمانی که تلاش میکنید عملیاتی را روی دادهی ارسالی توسط کاربر اجرا کنید که قابل اجرا بر روی نوع داده ورودی نباشد، این خطا رخ میدهد. برای مثال، اگر سعی کنید که عددی را با مقدار ورودی کاربر جمع کنید درحالی که داده ورودی توسط کاربر را هنوز به نوع داده عدد تبدیل نکردهاید و در واقع از نوع داده رشته است با خطای TypeError
روبهرو خواهید شد.
راه حل برخورد با این مشکل ساده است. قبل از اینکه عملیات مورد نظرتان را بر روی آن اجرا کنید باید از تبدیل شدن داده ورودی کاربر به نوع داده صحیح مطمئن شوید. برای آشنایی بیشتر با این روش به کد آمده در پایین توجه کنید.
1try:
2 s = input("Enter a string: ")
3 print("You entered: ", s + 10)
4except TypeError:
5 print("Can't add a number to a string!")
خطایابی با کمک تابع print
هنگامی که میخواهید مشکلات پیشآمده همراه با تابع input()
را خطایابی کنید، عبارتهایی که باعت نمایش دادههای ورودی میشوند بهترین کمکیار شما خواهند بود. به کمک این عبارتها میتوان مقدار و نوع دادهی ورودی کاربر را بررسی کرد.
برای نمایش دادهها و متغیرها در برنامه یا برای خطایابی بهترین وسیله ممکن تابع print()
است. در ادامه مثالی برای نحوه استفاده از تابع print()
در تشخیص خطا آوردهایم.
1s = input("Enter a string: ")
2print("Debug: s = ", s)
3
4num = input("Enter a number: ")
5print("Debug: num = ", num)
محدودیت ها و جایگزین های تابع input
درحالی که تابع input()
در پایتون ابزار قدرتمندی برای گرفتن ورودی از کاربر است محدودیتهای خاص خود را نیز دارد. برای نمونه، این تابع همیشه ورودی را بهصورت رشته برمیگرداند که اگر درحال کار با نوع دادههای متفاوتی باشید میتواند مشکلزا شود و همچنین اینکه این تابع هیچ قابلیت درونی برای اعتبارسنجی ورودی کاربر ندارد.
در صورت نیاز به ویژگیهای حرفهایتر، میتوانید گزینههای جایگزینی مانند ماژول argparse را برای ورودیهای کامندلاین یا کتابخانهای مانند curses را برای رابطهای کاربری پیچیدهتر در نظر داشته باشید.
کتابخانه Argparse
کتابخانه argparse ماژولی در کتابخانههای استاندارد پایتون است. این ماژول نوشتن رابطهای کاربرپسند را در محیط کامندلاین آسان میکند. ماژول argparse به مدیریت انواع مختلف آرگومانهای ضروری و اختیاری کمک میکند. همچنین اطلاعاتی درباره استفاده از برنامه و پیامهایی برای کمک به رفع خطاها ارائه میدهد. علاوه بر اینها میتواند آرگومانها را از نظر صحت نوع داده و اعتبار مقدار بررسی کند.
در ادامه مثالی از پیادهسازی برنامهی سادهای با کمک ماژول argparse آوردهایم.
1# argparse module
2import argparse
3
4parser = argparse.ArgumentParser()
5parser.add_argument("--name", help="Enter your name")
6args = parser.parse_args()
7print("Hello, " + args.name)
در بالا مثالی آوردهایم از اینکه چگونه از کتابخانه argparse استفاده میشود. در این مثال، آرگومانی به نام –name
تعریف کردهایم. وقتی کاربر فایل برنامه را از طریق خط فرمان اجرا کند، میتواند این آرگومان را مقداردهی کند. سپس کتابخانه argparse این آرگومان را به عنوان رشته ذخیره خواهد کرد. در نتیجه میتوانیم بعدا از این آرگومان در برنامه خود استفاده کنیم.
کتابخانه argparse با این امکانات میتواند به ابزار قدرتمندی برای گرفتن داده ورودی از کاربر تبدیل شود. وقتی اسکریپتی مینویسید که نیاز دارد آرگومانها یا گزینههای گوناگونی را از کاربر بپذیرد، وقتی که لازم است روی همه نوع دادههای ورودی کنترل داشته باشید یا وقتی که میخواهید پیامهایی برای راهنمایی کاربر نمایش دهید استفاده از کتابخانه argparse بسیار سودمند خواهد بود.
کتابخانه Curses
کتابخانه Curses ابزاری برای ساخت رابط کاربری متنی برای استفاده در ترمینال است. این کتابخانه توابعی را برای ساخت پنجره، مدیریت دادههای ورودی کاربر و کنترل کردن «نشانگر» (Cursor) فراهم کرده است. به کد نمایش داده شده در ادامه درباره روش کار این کتابخانه توجه کنید.
1# curses library
2import curses
3
4stdscr = curses.initscr()
5stdscr.addstr("Enter your name: ")
6stdscr.refresh()
7name = stdscr.getstr().decode()
8stdscr.addstr("Hello, " + name)
9stdscr.refresh()
در بالا مثالی از روش استفاده از کتابخانه curses پیادهسازی شده است. در این مثال، صفحهای استاندارد را راهاندازی میکنیم. در این صفحه پیامی نمایش میدهیم که کاربر را تشویق میکند دادهای را به عنوان ورودی تایپ کند. بعد از آن، داده ورودی کاربر را ذخیره کرده و نمایش میدهیم.
حتما توجه کنید بعد از اینکه کار با نشانگر تمام شد، «نشست» (Session) نشانگر را با کمک دستور curses.endwin()
ببندید تا از اینکه ترمینال در حالت قابل استفادهای باقی میماند اطمینان حاصل شود.
با این ویژگیها، کتابخانه curses نسبت به تابع input()
کنترل بسیار قویتری را روی رابط کاربری فراهم میکند. اگر در حال ساخت رابطهای کاربری پیچیدهتری هستید که باید انواع مختلفی از دادهها را توسط ورودی از کاربر بگیرند و ذخیره کنند یا به کنترل بیشتری بر روی نمایش پیامها در ترمینال نیاز دارید، کتابخانه curses ابزار بسیار عالی برای استفاده است.
ورودی کاربر در دنیای برنامه نویسی
ورودی گرفتن از کاربرها عملیاتی نیست که فقط مورد استفاده پایتون باشد. این کار در واقع فارق از نوع زبان، یکی از رکنهای اساسی برنامهنویسی است. باید یک قد به عقب برویم و از نمای گستردهتری به ورودی گرفتن از کاربر در زبانهای برنامهنویسی نگاه کنیم.
فرقی نمیکند که ابزار مورد استفاده، خط فرمان سادهای باشد که از کاربر درخواست اطلاعات دارد، صفحه اینترنتی باشد که اطلاعات کاربرانش را جمعآوردی میکند یا «رابط کاربری گرافیکی» (Graphical User Interface | GUI) حرفهای باشد که نسبت به کلیکها یا فشرده شدن کلیدها حساس است. گرفتن دادههای ورودی کاربر جزو لاینفکی از تابعنویسی در برنامهها است.
برنامهنویسی در اصل درباره حل مشکلات و خودکار کردن انجام کارها است. بسیار از این کارها باید بهصورت تعاملی انجام شوند و نیازمند ورودی کاربر هستند. در ادامه به تفاوت پایتون با بقیه زبانها در نحوه برخورد با این مسئله نگاه مختصری میاندازیم.
تابع input در پایتون در مقایسه با دیگر زبان های برنامه نویسی
زبانهای برنامهنویسی مختلف راههای مختلفی هم برای مدیریت ورودی کاربر دارند. پایتون این کار را به آسانی با کمک تابع input()
انجام میدهد. این تابع خطی را از ورودی میخواند. اطلاعات خوانده شده را به نوع داده رشته تبدیل میکند و در نهایت این رشته را برمیگرداند. از طرف دیگر زبانهایی مانند Java یا ++C متدهای مخصوص به خود را برای گرفتن دادههای ورودی از کاربر دارند که میتوانند نیازمند به کدنویسی بیشتر و پیچیدهتر نیز باشند.
برای نمونه در زبان برنامهنویسی Java باید از شی Scanner
برای گرفتن ورودی از کاربر استفاده کنید. به مثال آمده در زیر نگاه کنید.
1Scanner scanner = new Scanner(System.in);
2String name = scanner.nextLine();
در زبان برنامهنویسی ++C باید از شی cin
برای انجام این کار استفاده کنید. به مثال آمده در پایین دقت کنید.
1std::string name;
2std::cin >> name;
بهطور نسبی تابع input در پایتون بسیار آسانتر و خواناتر از همنوعان خود در بیشتر زبانهای برنامهنویسی است. که باعث میشود پایتون به گزینه بسیار مناسبی برای نوآموزان برنامهنویسی و پروژههای نیازمند به تعامل سریع و آسان با کاربر تبدیل شود.
توابع دیگر پایتون برای تعامل با کاربر
در میان دیگر زبانهای برنامهنویسی، پایتون میتواند پیشنهادات بیشتری نیز بهجز تابع input()
برای تعامل با کاربران ارائه دهد. توابعی مانند print()
برای نمایش دادهها به کاربر، تابع open()
برای اجرای عملیات بر روی فایلها و تابع socket()
برای ارتباطات شبکهای، برنامهها را قادر میسازند که با کاربران یا دنیای خارج از خودشان به روشهای مختلفی تعامل داشته باشند. این تواناییها باعث میشود برنامههایی که با زبان پایتون نوشته شدهاند حالت جامعتری داشته باشند.
برای نمونه، تابع print()
میتواند پیامهایی را به کاربر نمایش دهد، نتایج محاسبات را نشان دهد یا به خطایابی کدها کمک کند. تابع open()
با فراهم کردن امکان خواندن داده از فایلها یا نوشتن داده بر روی آنها، انجام عملیات بر روی فایلها را آسانتر میکند و تابع socket()
به برنامهها قدرت این را میدهد که از طریق ارسال و دریافت داده بر روی شبکه با کامپیوترهای دیگر ارتباط برقرار کنند.
سوالات متداول
در انتهای این مطلب از مجله فرادرس، به سوالات متداول پیرامون موضوع input در پایتون پاسخ دادهایم.
تابع input در پایتون چگونه کار می کند؟
تابع input پیامی را به کاربر نشان میدهد که کاربر را به انجام واکنش دعوت میکند. سپس منتظر کاربر میماند تا متنی را از طریق کیبورد تایپ کند و متن وارد شده را با نوع داده رشته برمیگرداند. اکنون میتوانید این داده را در برنامه خود ذخیره کنید یا بر روی آن کار کنید.
آیا می توانم از تابع input برای جمع آوری ورودهای عددی از کاربر استفاده کنم؟
بله، با استفاده از تابع input میتوانید دادههای عددی هم از کاربران بگیرید. هرچند هر دادهای که از کاربران بگیرید را برای استفاده باید به نوع داده مورد نظر خود، مثل عدد صحیح یا عدد فلوت تبدیل کنید.
چگونه با استفاده از تابع input پیام دلخواه خود را نمایش دهم؟
میتوانید پیام دلخواهی را به روش ارسال آرگومان رشتهای به تابع input به کاربر نمایش دهید. برای مثال کد user_input = input(“Enter your name: “)، پیام «:Enter your name» را در زمانی که برنامه، منتظر گرفتن ورودی از کاربر است بر روی صفحه نمایش میدهد.
برای اطمینان از ورودی معتبر و امن کاربر چه کار کنیم؟
اعتبارسنجی و پاکسازی دادههای ورودی کاربر بهمنظور جلوگیری از اتفاقات خارج از کنترل برای حفظ امنیت بسیار حیاتی است. میتوانید از روشهایی مانند بررسی اینکه ورودی با قوانین خاص یا شکل خاصی که از ورودی انتظار میرود همخوانی دارد یا نه و پاک کردن ورودی از هر چیزی که میتواند باعث ایجاد مشکل در روند اجرای برنامه شود استفاده کنید.
چگونه می توانم همزمان با استفاده از تابع input خطاها را مدیریت کنم؟
میتوانید برای مدیریت کردن خطاهای که موقع استفاده از تابع input احتمال دارد رخ دهند از بلاک try-except استفاده کنید. به عنوان مثال اگر کاربری دادههای غیر معتبری وارد کند میتوان خطای ValueError را فراخوانی کرد. استفاده از این بلاک کمک میکند که پیامهای کاربر پسندی را از قبل آماده داشته باشید تا خطاهای غیر منتظره را به نحو شایستهای مدیریت کنید.
آیا در هنگام استفاده از تابع input نگرانی های امنیتی خاصی وجود دارند؟
بله امکان دارد نگرانیهایی از بابت امنیت وجود داشته باشد. مخصوصا اگر تابع input در عملیاتی مانند دسترسی به فایلها یا ارتباط با کوئریهای پایگاه داده بکاربرده شده باشد. برای کاهش خطرات امنیتی، رعایت استانداردهایی مانند اعتبارسنجی دادههای ورودی، پاکسازی دادههای ورودی از هر چیز مشکوکی و پارامتری کردن کوئریها در زمانی که با منابع خارجی در تعامل هستیم، بسیار موثر خواهد بود.
جمع بندی
در بخش نهایی این مطلب از مجله فرادرس بهصورت خلاصه و مفید مطالب مرور شده را بیان خواهیم کرد. دورنمای وسیعی از گرفتن ورودی از کاربران را بررسی کردهایم. تابع input در پایتون را موشکافی کردیم و کاربردهای پایه این تابع را به تفصیل توضیح دادیم. همچنین درباره مطالب پیشرفتهای از قبیل مدیریت خطاها و حفظ امنیت برنامه و دادهها صحبت کردیم.
دادههای ورودی کاربر جزو مطالب بنیادین در برنامهنویسی هستند. اینکه برنامهها چگونه کار کنند و چگونه با کاربر ارتباط برقرار کنند از مهمترین زیربناهای برنامهنویسی هستند. مقایسه کردیم که زبانهای برنامهنویسی مختلف چگونه ورودی کاربران را مدیریت میکنند، اهمیت اعتبارسنجی ورودیها را برای برنامهنویسی امن بیان کردیم و درباره راههای دیگر برای ذخیره کردن دادههای تولید شده توسط کاربران صحبت کردیم. اگر چه که تابع input فقط شبیه قله کوه یخ درمیان توابع پایتون است اما در مجله فرادرس به بررسی توابع بیشتر و سایر مطالب مرتبط با پایتون پرداختهایم.
دفعه بعدی که درحال کار بر روی پروژهای با زبان برنامهنویسی پایتون بودید حتما تابع قدرتمند input را درنظر داشته باشید. برای اینکه برنامه خود را تعاملیتر کنید حتما از این تابع استفاده کنید. برای اینکه برنامهای پایدارتر و مقاومتر داشته باشید، در ابتدا باید دادههای ورودی کاربر، اعتبارسنجی شوند تا امنیت برنامه ارتقا پیدا کند و سپس باید خطاها را به طرز شایستهای مدیریت کرد.
source