Kahibaro
Discord Login Register

فصل ۵: ورودی و خروجی کاربر

مقدمهٔ ورودی و خروجی

در فصل‌های قبل، برنامه‌های شما فقط از قبل در کد مقدار می‌گرفتند و نتیجه را در خروجی (معمولاً ترمینال) چاپ می‌کردند. در این فصل یاد می‌گیرید:

این فصل پایهٔ بسیاری از برنامه‌های کاربردی است؛ تقریباً هر برنامهٔ مفید، شکلی از ورودی و خروجی دارد.

تابع `input()` و گرفتن ورودی

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

نمونهٔ ساده:

name = input("نام شما چیست؟ ")
print("سلام", name)

توضیح خط به خط:

نکته‌ها:

  data = input()

چند مثال دیگر:

age_text = input("سن شما چند است؟ ")
city = input("در کدام شهر زندگی می‌کنید؟ ")
print("شما", age_text, "ساله هستید و در", city, "زندگی می‌کنید.")

رفتار `input()` در ترمینال / IDE

بسته به محیطی که از آن استفاده می‌کنید (ترمینال، IDLE، VS Code و غیره)، نمایش پیام ورودی کمی متفاوت اما در اصل یکسان است:

اگر برنامه‌تان «گیر کرده» به نظر می‌رسد، خیلی وقت‌ها منتظر ورودی input() است.

تبدیل ورودی به عدد

چون input() همیشه رشته برمی‌گرداند، اگر بخواهید با ورودی کاربر جمع و تفریق و ضرب و تقسیم انجام دهید، باید آن را به نوع عددی مناسب تبدیل کنید.

دو نوع عددی اصلی که این‌جا نیاز داریم:

تبدیل به عدد صحیح با `int()`

فرض کنید کاربر سن خود را وارد می‌کند و شما می‌خواهید سال تولد تقریبی‌اش را حساب کنید.

age_text = input("سن شما چند است؟ ")
age = int(age_text)  # تبدیل رشته به عدد صحیح
current_year = 2025
birth_year = current_year - age
print("شما تقریبا در سال", birth_year, "به دنیا آمده‌اید.")

یا کوتاه‌تر:

age = int(input("سن شما چند است؟ "))

نکتهٔ مهم: اگر کاربر چیزی وارد کند که عدد صحیح نباشد (مثلاً بیست یا 12.5)، تبدیل به int خطا می‌دهد. (مدیریت خطا در فصل «خطاها و اشکال‌زدایی» خواهد آمد.)

تبدیل به عدد اعشاری با `float()`

اگر با اعداد اعشاری کار دارید، مثلاً قد به متر، وزن، قیمت و …:

height = float(input("قد خود را به متر وارد کنید: "))
weight = float(input("وزن خود را به کیلوگرم وارد کنید: "))
bmi = weight / (height ** 2)
print("شاخص توده بدنی (BMI) شما:", bmi)

در بسیاری از محیط‌ها، جداکنندهٔ اعشار باید نقطه (.) باشد، مثل 1.75، نه ویرگول.

تفاوت کار با رشته و عدد هنگام ورودی

اگر تبدیل انجام ندهید، با رشته کار می‌کنید و عملگر + روی رشته‌ها به معنی چسباندن (الحاق) است، نه جمع عددی:

a = input("یک عدد وارد کنید: ")
b = input("یک عدد دیگر وارد کنید: ")
print("نتیجه:", a + b)

اگر کاربر وارد کند: 2 و 3
خروجی خواهد بود:

نتیجه: 23

چون a و b رشته‌اند و a + b یعنی چسباندن "2" و "3".

اگر بخواهید جمع ریاضی انجام دهید، باید تبدیل کنید:

a = int(input("یک عدد وارد کنید: "))
b = int(input("یک عدد دیگر وارد کنید: "))
print("نتیجه جمع:", a + b)

قالب‌بندی خروجی با `print()`

تا این‌جا فقط مقادیر را ساده با print() چاپ کرده‌ایم. اما خیلی وقت‌ها می‌خواهید خروجی:

در این بخش چند روش متداول قالب‌بندی خروجی را می‌بینیم.

استفاده از چند آرگومان در `print()`

ساده‌ترین روش: مقادیر مختلف را با ویرگول به print() بدهید. پایتون بین آن‌ها یک فاصله می‌گذارد:

name = "علی"
age = 20
print("نام:", name, "| سن:", age)

خروجی:

نام: علی | سن: 20

اگر نخواهید بین آیتم‌ها فاصلهٔ پیش‌فرض باشد، بعداً می‌توانید از پارامتر sep استفاده کنید (کمی جلوتر می‌آید).

قالب‌بندی با f-string (روش پیشنهادی)

از نسخهٔ 3.6 به بعد، پایتون قالب‌بندی به نام f-string دارد که خیلی خواناست.

ساختار کلی:

name = "سارا"
age = 25
print(f"سلام {name}! شما {age} سال دارید.")

نمونهٔ دیگر:

a = 3
b = 4
print(f"{a} + {b} = {a + b}")

کنترل تعداد اعشار با f-string

برای نمایش تعداد مشخصی رقم اعشار، می‌توانید بعد از نام متغیر، دو نقطه و فرمت عدد را بنویسید؛ مثلاً:

pi = 3.14159265
print(f"عدد پی تقریباً برابر است با: {pi:.2f}")
print(f"با یک رقم اعشار: {pi:.1f}")

خروجی:

عدد پی تقریباً برابر است با: 3.14
با یک رقم اعشار: 3.1

استفاده از عبارت‌ها داخل f-string

فقط نام متغیر لازم نیست؛ می‌توانید عبارت بنویسید:

price = 15000
tax = 0.09
print(f"قیمت نهایی: {price * (1 + tax)} تومان")

متد `format()` روی رشته‌ها (آشنایی ابتدایی)

روش قدیمی‌تر ولی هنوز کاربردی: استفاده از {} در رشته و format():

name = "رضا"
age = 30
text = "نام من {} است و {} سال دارم.".format(name, age)
print(text)

می‌توانید محل قرارگیری را با شماره مشخص کنید:

text = "اول: {0} | دوم: {1} | دوباره اول: {0}".format("الف", "ب")
print(text)

در برنامه‌های جدید، معمولاً f-string خواناتر است، اما بد نیست این روش را هم بشناسید، چون در کدهای دیگر ممکن است ببینید.

پارامترهای `print`:‌ `sep` و `end`

تابع print() چند پارامتر مفید دارد. دو مورد مهم:

استفاده از `sep`

print("سلام", "دنیا")
print("سلام", "دنیا", sep="-")

خروجی:

سلام دنیا
سلام-دنیا

می‌توانید از sep="" برای بدون فاصله بودن استفاده کنید:

print("a", "b", "c", sep="")
# خروجی: abc

استفاده از `end`

به طور عادی print بعد از چاپ، به خط بعد می‌رود. اگر نخواهید این اتفاق بیفتد، end را عوض کنید:

print("سلام", end=" ")
print("دنیا")

خروجی در یک خط:

سلام دنیا

یا:

for i in range(5):
    print(i, end=" ")

خروجی:

0 1 2 3 4 

(در فصل حلقه‌ها با for و range آشنا می‌شوید؛ این‌جا فقط برای مثال است.)

چند الگوی رایج برای برنامه‌های تعاملی

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

پرسیدن چند سؤال پشت‌سر‌هم

name = input("نام شما چیست؟ ")
country = input("در کدام کشور زندگی می‌کنید؟ ")
language = input("به چه زبانی برنامه‌نویسی می‌کنید؟ ")
print()
print("خلاصه اطلاعات شما:")
print("------------------")
print(f"نام: {name}")
print(f"کشور: {country}")
print(f"زبان برنامه‌نویسی: {language}")

ماشین‌حساب خیلی ساده

print("ماشین‌حساب جمع دو عدد")
print("----------------------")
a = float(input("عدد اول را وارد کنید: "))
b = float(input("عدد دوم را وارد کنید: "))
result = a + b
print(f"نتیجه: {a} + {b} = {result}")

محاسبه سن در سال‌های آینده

name = input("نام شما چیست؟ ")
age = int(input("سن شما چند است؟ "))
future_years = 5
future_age = age + future_years
print(f"{name} عزیز، {future_years} سال دیگر شما {future_age} سال خواهید داشت.")

نکات و اشتباهات رایج در ورودی/خروجی

  x = input("یک عدد وارد کنید: ")
  y = input("یک عدد دیگر وارد کنید: ")
  print(x + y)  # این‌جا چسباندن رشته‌ها است، نه جمع

راه‌حل: استفاده از int() یا float().

  age = int(input("سن (به سال): "))

وقتی input() اجرا می‌شود، برنامه منتظر ورودی است. تا وقتی چیزی تایپ نکنید و Enter نزنید، ادامه نمی‌دهد.

  name = "علی"
  print(f"سلام {nam}")  # خطا: متغیر nam وجود ندارد

باید نام دقیق متغیر را بنویسید.

جمع‌بندی

در این فصل یاد گرفتید:

این مهارت‌ها در فصل‌های بعدی (به‌خصوص شرط‌ها، حلقه‌ها و پروژه‌های کوچک) زیاد استفاده خواهند شد، چون تقریباً هر برنامهٔ جالب، باید بتواند با کاربر تعامل کند.

Views: 7

Comments

Please login to add a comment.

Don't have an account? Register now!