Table of Contents
مقدمهٔ ورودی و خروجی
در فصلهای قبل، برنامههای شما فقط از قبل در کد مقدار میگرفتند و نتیجه را در خروجی (معمولاً ترمینال) چاپ میکردند. در این فصل یاد میگیرید:
- چگونه از کاربر «ورودی» بگیرید (مثلاً نام، سن، عدد)
- چگونه این ورودی را به عدد تبدیل کنید تا بتوانید با آن حساب کنید
- چگونه خروجی را «قالببندی» کنید تا مرتب و خوانا باشد
- و در نهایت، چگونه برنامههای تعاملی کوچک بنویسید که با کاربر گفتوگو کنند
این فصل پایهٔ بسیاری از برنامههای کاربردی است؛ تقریباً هر برنامهٔ مفید، شکلی از ورودی و خروجی دارد.
تابع `input()` و گرفتن ورودی
برای گرفتن ورودی از کاربر در پایتون، از تابع input() استفاده میکنیم. این تابع:
- یک متن (پیام) به کاربر نشان میدهد (اختیاری)
- منتظر میماند تا کاربر چیزی تایپ کند و Enter بزند
- آنچه کاربر تایپ کرده را به صورت یک رشته (
str) برمیگرداند
نمونهٔ ساده:
name = input("نام شما چیست؟ ")
print("سلام", name)توضیح خط به خط:
input("نام شما چیست؟ ")
متن"نام شما چیست؟ "را روی صفحه نمایش میدهد و منتظر میماند.- کاربر مثلاً مینویسد:
میناو Enter میزند. - مقدار برگشتی
input(...)میشود"مینا"(نوع داده:str) - این مقدار در متغیر
nameذخیره میشود. - سپس
print("سلام", name)عبارتسلام مینارا چاپ میکند.
نکتهها:
- اگر متنی به
input()ندهید، فقط منتظر ورودی کاربر میماند:
data = input()- همیشه خروجی
input()یک رشته است، حتی اگر کاربر عدد وارد کند.
(تبدیل آن به عدد را کمی بعد میبینیم.)
چند مثال دیگر:
age_text = input("سن شما چند است؟ ")
city = input("در کدام شهر زندگی میکنید؟ ")
print("شما", age_text, "ساله هستید و در", city, "زندگی میکنید.")رفتار `input()` در ترمینال / IDE
بسته به محیطی که از آن استفاده میکنید (ترمینال، IDLE، VS Code و غیره)، نمایش پیام ورودی کمی متفاوت اما در اصل یکسان است:
- پیام
input()روی خروجی استاندارد (معمولاً همان ترمینال) نمایش داده میشود. - مکاننما بعد از پیام میایستد تا کاربر ورودی را تایپ کند.
- وقتی Enter زده شود، برنامه ادامه پیدا میکند.
اگر برنامهتان «گیر کرده» به نظر میرسد، خیلی وقتها منتظر ورودی input() است.
تبدیل ورودی به عدد
چون input() همیشه رشته برمیگرداند، اگر بخواهید با ورودی کاربر جمع و تفریق و ضرب و تقسیم انجام دهید، باید آن را به نوع عددی مناسب تبدیل کنید.
دو نوع عددی اصلی که اینجا نیاز داریم:
intبرای اعداد صحیح (مثل3،-10،42)floatبرای اعداد اعشاری (مثل3.14،0.5،-2.75)
تبدیل به عدد صحیح با `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 دارد که خیلی خواناست.
ساختار کلی:
- قبل از رشته حرف
fمیگذارید:f"..." - داخل
{}نام متغیر یا عبارت مینویسید
name = "سارا"
age = 25
print(f"سلام {name}! شما {age} سال دارید.")نمونهٔ دیگر:
a = 3
b = 4
print(f"{a} + {b} = {a + b}")کنترل تعداد اعشار با f-string
برای نمایش تعداد مشخصی رقم اعشار، میتوانید بعد از نام متغیر، دو نقطه و فرمت عدد را بنویسید؛ مثلاً:
{x:.2f}یعنی عدد اعشاری با ۲ رقم بعد از ممیز{x:.1f}یعنی ۱ رقم بعد از ممیز
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برای جداکنندهٔ بین آرگومانها (بهطور پیشفرض یک فاصله است)endبرای چیزی که در انتهای چاپ اضافه میشود (بهطور پیشفرض\nیعنی رفتن به خط بعد)
استفاده از `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().
- نوشتن پیام نامفهوم برای کاربر:
سعی کنید پیامهایinput()واضح باشند:
age = int(input("سن (به سال): "))- استفاده از
input()در برنامه و تعجب از اینکه برنامه «ایستاده»:
وقتی input() اجرا میشود، برنامه منتظر ورودی است. تا وقتی چیزی تایپ نکنید و Enter نزنید، ادامه نمیدهد.
- اشتباه تایپی در نام متغیرها در
f-string:
name = "علی"
print(f"سلام {nam}") # خطا: متغیر nam وجود نداردباید نام دقیق متغیر را بنویسید.
جمعبندی
در این فصل یاد گرفتید:
- با
input()از کاربر ورودی بگیرید (و بدانید که همیشه رشته برمیگرداند) - با
int()وfloat()ورودی را به عدد تبدیل کنید تا بتوانید محاسبات انجام دهید - با روشهای مختلف خروجی را قالببندی کنید:
- چند آرگومان در
print() - f-stringها (بهویژه کنترل اعشار)
format()(آشنایی اولیه)- پارامترهای
sepوendدرprint() - چند الگوی سادهٔ برنامهٔ تعاملی بسازید (پرسشنامه، ماشینحساب، محاسبهٔ سن)
این مهارتها در فصلهای بعدی (بهخصوص شرطها، حلقهها و پروژههای کوچک) زیاد استفاده خواهند شد، چون تقریباً هر برنامهٔ جالب، باید بتواند با کاربر تعامل کند.