خانه / آموزش‌ها / دریافت ورودی از کاربر در پایتون

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

🐍 HomeOfPython
|
📅 1404/10/18

سطح مقدماتی (Beginner Level)

تعامل با کاربر یکی از ارکان اصلی برنامه‌نویسی است. در پایتون، ساده‌ترین راه برای دریافت اطلاعات از کاربر، استفاده از تابع داخلی input() است. در این بخش یاد می‌گیریم چگونه داده‌ها را دریافت کرده و آن‌ها را به فرمت‌های دلخواه تبدیل کنیم.

۱. استفاده از تابع input()

این تابع برنامه را متوقف می‌کند و منتظر می‌ماند تا کاربر متنی را تایپ کرده و کلید Enter را فشار دهد.

نکته مهم: تابع input همیشه خروجی را به صورت رشته (String) برمی‌گرداند، حتی اگر کاربر عدد وارد کند.

python
# Static: نیاز به تایپ کاربر دارد و در محیط ایزوله اجرا نمی‌شود
# مثال اول: دریافت یک ورودی ساده
name = input("نام خود را وارد کنید: ")
print(f"سلام {name}، خوش آمدید!")
python
# Static
# مثال دوم: ذخیره ورودی در متغیر و نمایش نوع داده
data = input("چیزی تایپ کنید: ")
print(type(data))  # همیشه <class 'str'> خواهد بود

۲. نمایش پیام راهنما (Prompt)

بهتر است همیشه داخل پرانتز input، پیامی بنویسید تا کاربر بداند چه چیزی باید وارد کند. این متن "رشته راهنما" یا Prompt نام دارد.

python
# Static
# مثال اول: پیام واضح برای دریافت ایمیل
email = input("لطفاً آدرس ایمیل خود را وارد نمایید: ")
print("ایمیل دریافت شد.")
python
# Static
# مثال دوم: استفاده از کاراکترهای خاص برای زیبایی
city = input(">> نام شهر محل سکونت: ")

۳. تبدیل انواع داده (Type Casting)

از آنجا که input همیشه رشته برمی‌گرداند، برای انجام عملیات ریاضی باید ورودی را به int (عدد صحیح) یا float (عدد اعشاری) تبدیل کنیم.

python
# Static
# مثال اول: تبدیل ورودی به عدد صحیح برای محاسبه سن
birth_year = input("سال تولد خود را وارد کنید: ")
age = 1404 - int(birth_year)
print(f"شما {age} سال دارید.")
Python

سطح پیشرفته (Professional Level)

در برنامه‌های واقعی، صرفاً استفاده از input کافی نیست. باید ورودی‌ها اعتبارسنجی شوند، خطاهای احتمالی مدیریت گردند و گاهی نیاز است ورودی‌ها را از طریق آرگومان‌های خط فرمان (CLI Arguments) دریافت کنیم نه تعامل مستقیم.

۱. دریافت چندین ورودی در یک خط

گاهی می‌خواهیم کاربر چند مقدار را با فاصله وارد کند (مثلاً: 10 20 30). برای این کار از متد split() و map() استفاده می‌کنیم.

python
# Static
# مثال اول: دریافت نام و نام خانوادگی در یک خط
full_name = input("نام و نام خانوادگی خود را با فاصله وارد کنید: ").split()
# اگر کاربر وارد کند: Ali Rezaei
# نتیجه: ['Ali', 'Rezaei']
Python

۲. اعتبارسنجی ورودی (Input Validation)

کاربران ممکن است اشتباه تایپ کنند (مثلاً وارد کردن حروف به جای اعداد). برنامه‌نویس حرفه‌ای باید با استفاده از حلقه‌ها و بلوک try-except از کرش کردن برنامه جلوگیری کند.

python
# Static
# الگوی استاندارد دریافت عدد صحیح امن
while True:
    user_data = input("لطفاً یک عدد وارد کنید: ")
    try:
        number = int(user_data)
        print(f"عدد معتبر دریافت شد: {number}")
        break  # خروج از حلقه در صورت موفقیت
    except ValueError:
        print("خطا: ورودی شما عدد نیست، دوباره تلاش کنید.")
Python

۳. خطرات امنیتی و تابع eval()

هرگز از تابع eval() برای پردازش ورودی مستقیم کاربر استفاده نکنید. این تابع کد پایتون را اجرا می‌کند و می‌تواند باعث هک شدن سیستم شود.

Python
python
# روش ایمن جایگزین برای عبارات ریاضی ساده
# استفاده از کتابخانه‌های امن یا تبدیل صریح
valid_input = "100"
safe_number = int(valid_input) # ایمن

۴. ماژول sys.stdin و getpass

در اسکریپت‌های اتوماسیون یا لینوکسی، ورودی‌ها اغلب از طریق Pipe (|) ارسال می‌شوند، نه تایپ دستی. همچنین برای رمز عبور نباید کاراکترها نمایش داده شوند.

python
# Static
import sys

# خواندن تمام ورودی‌ها از Pipe (مثلاً: cat file.txt | python script.py)
input_data = sys.stdin.read()
print(f"داده‌های دریافتی از پایپ: {len(input_data)} کاراکتر")
python
# Static
import getpass

# دریافت پسورد بدون نمایش کاراکترها روی صفحه
password = getpass.getpass("رمز عبور را وارد کنید: ")
print("رمز عبور دریافت شد (مخفی).")