مبانی زبان

ورودی و خروجی در پایتون: print، input و f-string

۳ دقیقه مطالعه · به‌روزرسانی ۲۲ مهر ۱۴۰۵

برنامه‌ای که نه ورودی بگیرد و نه چیزی نشان دهد، به درد کسی نمی‌خورد. در این درس دو تابع پایه‌ای ارتباط با کاربر را یاد می‌گیریم: print برای خروجی و input برای ورودی.

خروجی با print

x = 1
print(x)
print("my fav num is", x, ".", "x =", x)

وقتی چند مقدار را با ویرگول به print می‌دهیم:

  • هر نوعی (عدد، رشته، …) را می‌پذیرد و خودش آن‌ها را به متن تبدیل می‌کند؛
  • بینشان خودکار یک فاصله می‌گذارد.

راه دیگر چسباندن رشته‌ها با + است. ولی در این حالت همه‌چیز باید رشته باشد و فاصله‌ها را خودتان بگذارید:

x = 1
x_str = str(x)
print("my fav num is " + x_str + ". " + "x = " + x_str)

پارامترهای sep و end

print دو پارامتر کاربردی دارد:

  • sep: چه چیزی بین مقدارها بیاید (پیش‌فرض: یک فاصله)
  • end: چه چیزی آخر خط بیاید (پیش‌فرض: "\n" یعنی رفتن به خط بعد)
print(1403, 7, 15, sep="/")
print("Ali", end="")
print("reza")
for i in range(5):
    print(i, end=" - ")

"\n" یک کاراکتر کنترلی است به معنی «برو خط بعد». برای همین هر print معمولی، خروجی بعدی را به خط جدید می‌برد.

💡 در Jupyter یا VS Code اگر داخل پرانتز یک تابع باشید و Shift+Tab بزنید، راهنمای تابع و همهٔ پارامترهایش (مثل sep و end) نمایش داده می‌شود.

ورودی با input

input متنی را که داخل پرانتز می‌دهید نمایش می‌دهد، منتظر می‌ماند کاربر چیزی تایپ کند و Enter بزند، و دقیقاً همان متن را برمی‌گرداند:

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

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

مهم‌ترین نکته: input همیشه رشته برمی‌گرداند

حتی اگر کاربر 12 تایپ کند، input رشتهٔ "12" را برمی‌گرداند، نه عدد ۱۲ را. حدس بزنید این برنامه با ورودی 12 چه چاپ می‌کند:

text = input("Type anything... ")
print(5 * text)

جواب 1212121212 است، نه 60! چون ضربِ عدد در رشته یعنی «رشته را ۵ بار پشت سر هم تکرار کن». اگر با عدد کار دارید، ورودی را تبدیل کنید:

num = int(input("Type a number... "))
print(5 * num)

تبدیل را می‌شود همان لحظهٔ گرفتن ورودی انجام داد، یا بعداً. هر سه شکل زیر درست است:

a = int(input("عدد اول: "))     # همان لحظه

b = input("عدد دوم: ")
b = int(b)                       # بعداً، در یک خط جدا

c = input("عدد سوم: ")
print(a + 10, b + 10, int(c) + 10)   # درست همان جایی که لازم است

⚠️ اگر کاربر به‌جای عدد چیزی مثل salam وارد کند، int() خطای ValueError می‌دهد. در درس مدیریت خطا یاد می‌گیریم چطور جلوی کرش برنامه را بگیریم.

f-string: تمیزترین راه ساختن متن

چسباندن رشته‌ها با + و str() سریع شلوغ می‌شود. f-string راه مدرن و خوانای پایتون است: یک f قبل از کوتیشن بگذارید و هر عبارتی را داخل {} بنویسید:

name = "Sara"
age = 30
print(f"Hello {name}, you are {age} years old.")
print(f"Next year you'll be {age + 1}.")

داخل {} هر عبارت پایتونی مجاز است: متغیر، محاسبه، صدا زدن تابع.

قالب‌بندی اعداد

بعد از : می‌شود شکل نمایش را تعیین کرد:

pi = 3.14159265
price = 12500000
print(f"{pi:.2f}")        # دو رقم اعشار: 3.14
print(f"{price:,}")       # جداکنندهٔ هزارگان: 12,500,000
print(f"{7:03d}")         # سه رقمی با صفر: 007
print(f"{0.256:.1%}")     # درصد: 25.6%

💡 عادت خوب: برای ساختن متن از f-string استفاده کنید. هم خواناتر است، هم سریع‌تر، هم نیازی به str() ندارد.

تمرین

برنامه‌ای بنویسید که سه عدد از کاربر بگیرد و هر کدام را به‌علاوهٔ ۱۰ چاپ کند. مثلاً با ورودی 10، 20، 30 خروجی بدهد: 20 30 40. بعد خروجی را با f-string به این شکل دربیاورید: 1st: 20, 2nd: 30, 3rd: 40.

یک جواب
a = int(input("عدد اول: "))
b = int(input("عدد دوم: "))
c = int(input("عدد سوم: "))
print(a + 10, b + 10, c + 10)
print(f"1st: {a + 10}, 2nd: {b + 10}, 3rd: {c + 10}")