آموزش پایتون - ورودی کاربر

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

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

هر برنامه کامپیوتری باید شرایطی برای دریافت ورودی از کاربر در زمان اجرا داشته باشد. این امر برنامه را تعاملی می‌کند. بسته به نحوه توسعه، یک برنامه ممکن است ورودی کاربر را به صورت متن واردشده در کنسول (sys.stdin)، یک رابط گرافیکی یا یک رابط مبتنی بر وب دریافت کند.

توابع ورودی کاربر در پایتون

پایتون دو تابع توکار برای خواندن ورودی از صفحه‌کلید در اختیار ما قرار می‌دهد.

  • تابع input ()
  • تابع raw_input ()

مفسر پایتون در دو حالت تعاملی (Interactive) و اسکریپتی (Scripted) کار می‌کند. اگرچه حالت تعاملی برای ارزیابی‌های سریع خوب است، اما بهره‌وری کمتری دارد. برای اجرای مکرر یک مجموعه دستورالعمل یکسان، باید از حالت اسکریپتی استفاده شود.

برای شروع، یک اسکریپت ساده پایتون بنویسیم.

#! /usr/bin/python3.11

name = "Kiran"
city = "Hyderabad"

print ("Hello My name is", name)
print ("I am from", city)

کد بالا را با نام hello.py ذخیره کرده و آن را از خط فرمان اجرا کنید. این هم خروجی:

C:\python311> python hello.py
Hello My name is Kiran
I am from Hyderabad

برنامه به سادگی مقادیر دو متغیر موجود در خود را چاپ می‌کند. اگر برنامه را به طور مکرر اجرا کنید، هر بار همان خروجی نمایش داده می‌شود. برای استفاده از برنامه برای نام و شهر دیگر، می‌توانید کد را ویرایش کنید، نام را مثلاً به "Ravi" و شهر را به "Chennai" تغییر دهید. هر بار که نیاز به انتصاب مقدار متفاوتی دارید، باید برنامه را ویرایش، ذخیره و اجرا کنید که این روش ایده‌آلی نیست.

تابع input()

بدیهی است که برای انتصاب مقادیر متفاوت به متغیر در زمان اجرا − یعنی زمانی که برنامه در حال اجراست − به مکانیزمی نیاز دارید. تابع input() در پایتون همین کار را انجام می‌دهد.

سینتکس تابع input() در کتابخانه استاندارد پایتون به شرح زیر است:

>>> var = input()

وقتی مفسر با تابع input() مواجه می‌شود، منتظر می‌ماند تا کاربر داده‌ها را از جریان ورودی استاندارد (صفحه‌کلید) وارد کند تا زمانی که کلید Enter فشار داده شود. دنباله کاراکترها ممکن است برای استفاده‌های بعدی در یک متغیر رشته‌ای ذخیره شود.

با خواندن کلید Enter، برنامه به دستور بعدی می‌رود. بیایید برنامه خود را تغییر دهیم تا ورودی کاربر در متغیرهای name و city ذخیره شود.

#! /usr/bin/python3.11

name = input()
city = input()

print ("Hello My name is", name)
print ("I am from ", city)

وقتی برنامه را اجرا می‌کنید، مکان‌نما را در حال انتظار برای ورودی کاربر خواهید یافت. مقادیری را برای name و city وارد کنید. با استفاده از داده‌های واردشده، خروجی نمایش داده خواهد شد.

Ravi
Chennai
Hello My name is Ravi
I am from Chennai

اکنون، در برنامه هیچ مقدار خاصی به متغیرها اختصاص داده نشده است. هر بار که اجرا می‌کنید، مقادیر متفاوتی قابل ورود است. بنابراین، برنامه شما واقعاً تعاملی شده است.

در داخل تابع input()، می‌توانید یک متن راهنما (prompt) بدهید که هنگام اجرای کد قبل از مکان‌نما ظاهر می‌شود.

#! /usr/bin/python3.11

name = input("Enter your name : ")
city = input("Enter your city : ")

print ("Hello My name is", name)
print ("I am from ", city)

هنگام اجرا، برنامه پیام راهنما را نمایش می‌دهد که اساساً به کاربر کمک می‌کند چه چیزی را وارد کند.

Enter your name: Praveen Rao
Enter your city: Bengaluru
Hello My name is Praveen Rao
I am from Bengaluru

تابع raw_input()

تابع raw_input() مشابه تابع input() عمل می‌کند. تنها نکته در اینجا این است که این تابع در پایتون 2.7 در دسترس بود و در پایتون 3.6 نام آن به input() تغییر یافته است.

سینتکس تابع raw_input() به شرح زیر است:

>>> var = raw_input ([prompt text])

بیایید برنامه بالا را با استفاده از تابع raw_input() بازنویسی کنیم:

#! /usr/bin/python3.11

name = raw_input("Eneter your name - ")
city = raw_input("Enter city name - ")

print ("Hello My name is", name)
print ("I am from ", city)

وقتی اجرا می‌کنید، مکان‌نما را منتظر ورودی کاربر خواهید یافت. مقادیری را برای name و city وارد کنید. با استفاده از داده‌های واردشده، خروجی نمایش داده می‌شود.

Eneter your name - Ravi
Enter city name - Chennai
Hello My name is Ravi
I am from Chennai

دریافت ورودی عددی در پایتون

بیایید یک کد پایتون بنویسیم که عرض و ارتفاع یک مستطیل را از کاربر دریافت کرده و مساحت آن را محاسبه کند.

#! /usr/bin/python3.11

width = input("Enter width : ")
height = input("Enter height : ")

area = width*height
print ("Area of rectangle = ", area)

برنامه را اجرا کرده و عرض و ارتفاع را وارد کنید.

Enter width: 20
Enter height: 30
Traceback (most recent call last):
  File "C:\Python311\var1.py", line 5, in <module>
   area = width*height
TypeError: can't multiply sequence by non-int of type 'str'

چرا در اینجا با TypeError مواجه می‌شوید؟ دلیل آن این است که پایتون همیشه ورودی کاربر را به عنوان یک رشته (String) می‌خواند. بنابراین، width="20" و height="30" رشته هستند و بدیهی است که نمی‌توانید ضرب دو رشته را انجام دهید.

برای غلبه بر این مشکل، از int() استفاده می‌کنیم که تابع توکار دیگری از کتابخانه استاندارد پایتون است. این تابع یک شیء رشته‌ای را به یک عدد صحیح (Integer) تبدیل می‌کند.

برای دریافت یک ورودی عددی صحیح از کاربر، ورودی را در یک رشته بخوانید و با تابع int() آن را به عدد صحیح تبدیل نوع (Type Cast) کنید −

w = input("Enter width : ")
width = int(w)

h = input("Enter height : ")
height = int(h)

می‌توانید دستورات دریافت ورودی و تبدیل نوع را در یک دستور ترکیب کنید −

#! /usr/bin/python3.11

width = int(input("Enter width : "))
height = int(input("Enter height : "))

area = width*height
print ("Area of rectangle = ", area)

اکنون می‌توانید هر مقدار عددی صحیحی را به دو متغیر موجود در برنامه وارد کنید −

Enter width: 20
Enter height: 30
Area of rectangle = 600

تابع float() در پایتون یک رشته را به یک شیء اعشاری (Float) تبدیل می‌کند. برنامه زیر ورودی کاربر را دریافت کرده و آن را به یک متغیر اعشاری یعنی rate تبدیل می‌کند، و سپس سود مبلغی را که آن هم توسط کاربر وارد شده است، محاسبه می‌نماید.

#! /usr/bin/python3.11

amount = float(input("Enter Amount : "))
rate = float(input("Enter rate of interest : "))

interest = amount*rate/100
print ("Amount: ", amount, "Interest: ", interest)

برنامه از کاربر می‌خواهد مبلغ و نرخ سود را وارد کند؛ و نتیجه را به صورت زیر نمایش می‌دهد −

Enter Amount: 12500
Enter rate of interest: 6.5
Amount: 12500.0 Interest: 812.5

تابع print()

تابع print() در پایتون یک تابع توکار است. این تابع پرکاربردترین تابعی است که مقدار عبارت پایتون داده‌شده در پرانتز را روی کنسول پایتون یا خروجی استاندارد (sys.stdout) نمایش می‌دهد.

print ("Hello World ")

هر تعدادی از عبارات پایتون می‌تواند داخل پرانتز قرار گیرد. آنها باید با علامت کاما از هم جدا شوند. هر آیتم موجود در لیست می‌تواند هر شیء پایتون یا یک عبارت معتبر پایتون باشد.

#! /usr/bin/python3.11

a = "Hello World"
b = 100
c = 25.50
d = 5+6j
print ("Message: a)
print (b, c, b-c)
print(pow(100, 0.5), pow(c,2))

اولین فراخوانی print() یک رشته متنی صریح (String Literal) و یک متغیر رشته‌ای را نمایش می‌دهد. دومین فراخوانی، مقدار دو متغیر و تفریق آنها را چاپ می‌کند. تابع pow() جذر یک عدد و توان دوم یک متغیر را محاسبه می‌کند.

Message Hello World
100 25.5 74.5
10.0 650.25

اگر چندین شیء جداشده با کاما در پرانتز تابع print() وجود داشته باشد، مقادیر با یک فاصله " " از هم جدا می‌شوند. برای استفاده از هر کاراکتر دیگری به عنوان جداکننده، پارامتر sep را برای تابع print() تعریف کنید. این پارامتر باید بعد از لیست عباراتی که قرار است چاپ شوند، قرار گیرد.

در خروجی زیر از تابع print()، متغیرها با کاما از هم جدا شده‌اند.

#! /usr/bin/python3.11

city="Hyderabad"
state="Telangana"
country="India"
print(city, state, country, sep=',')

تأثیر sep=',' را می‌توان در نتیجه دید −

Hyderabad,Telangana,India

تابع print() به طور پیش‌فرض یک کاراکتر خط جدید ('\n') در انتها صادر می‌کند. در نتیجه، خروجی دستور print() بعدی در خط بعدی کنسول ظاهر می‌شود.

city="Hyderabad"
state="Telangana"
print("City:", city)
print("State:", state)

دو خط به عنوان خروجی نمایش داده می‌شود −

City: Hyderabad
State: Telangana

برای اینکه این دو خط در همان یک خط ظاهر شوند، پارامتر end را در اولین تابع print() تعریف کنید و آن را روی یک رشته فاصله " " تنظیم نمایید.

city="Hyderabad"
state="Telangana"
country="India"

print("City:", city, end=" ")
print("State:", state)

خروجی هر دو تابع print() در ادامه هم ظاهر می‌شود.

City: Hyderabad State: Telangana

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.