نوشتن اعلان‌های شفّاف

هر بار که از تابع input() استفاده می‌کنید باید پیامی شفاّف و قابل درک را ضمیمه کنید تا به کاربر بگوید دقیقاً به دنبال چه اطّلاعاتی هستید. هر عبارتی که به کاربر بگوید که چه باید وارد کند، مناسب است. برای مثال:

1
2
3
name = input("Please enter your name: ")

print(f"\nHello, {name}!")

یک فاصله‌ی خالی بعد از اعلان‌های خود بگذارید (در این مثال بعد از دونقطه) تا اعلان را از پاسخ کاربر جدا کند و محلِّ وارد کردن متن را برای او روشن کند. برای مثال:

1
2
3
Please enter your name: Eric

Hello, Eric!

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

1
2
3
4
5
6
prompt = "If you tell us who you are, we can personalize the messages you see."
prompt += "\nWhat is your first name? "

name = input(prompt)

print(f"\nHello, {name}!")

این مثال یکی از روش‌های ساختن رشته‌ی چندخطّی را نشان می‌دهد. خطّ اوّل بخش اوّل پیام را به متغیّر prompt نسبت می‌دهد. در خطّ دوم عملگر += رشته‌ی متغیّر prompt را گرفته و رشته‌ی جدید را به انتهای آن اضافه می‌کند.

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

1
2
3
4
5
If you tell us who you are, we can personalize the messages you see.

What is your first name? Eric

Hello, Eric!

استفاده از int() برای پذیرفتن ورودی‌های عددی

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

1
2
3
4
>>> age = input("How old are you? ")
How old are you? 21
>>> age
'21'

کاربر عدد ۲۱ را وارد می‌کند امّا زمانی که از پایتون مقدار age را می‌خواهیم ‘21’ را برمی‌گرداند که بیانِ رشته‌ایِ مقدارِ عددی است که وارد شده. ما می‌دانیم که پایتون ورودی را به عنوان رشته تفسیر کرده زیرا عدد را داخل علامت نقل قول قرار داده است. اگر چاپ کردنِ ورودی همه‌ی کاری باشد که می‌خواهید انجام دهید، این کد به درستی کار می‌کند. امّا اگر بخواهید از آن به عنوان عدد استفاده کنید به خطا می‌خورید:

1
2
3
4
5
6
>>> age = input("How old are you? ")
How old are you? 21
>>> age >= 18
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() >= int()

زمانی که در 1 تلاش می‌کنید ورودی را با عددی مقایسه کنید، پایتون اعلام خطا می‌کند زیرا نمی‌تواند رشته را با یک عدد صحیح مقایسه کند: رشته‌ی ‘21’ که به age منسوب شده قابلِ مقایسه با مقدارِ عددیِ ۱۸ نیست.

این مشکل را می‌توان با به‌کارگیری تابع int() مرتفع کرد. این تابع از پایتون می‌خواهد که با ورودی مثلِ یک مقدارِ عددی رفتار کند. تابع int() نمایش رشته‌ای یک عدد را به نمایش عددیِ آن تبدیل می‌کند، همانگونه که اینجا دیده می‌شود:

1
2
3
4
5
>>> age = input("How old are you? ")
How old are you? 21
>>> age = int(age)
>>> age >= 18
True

در این مثال زمانی که در اعلانِ ورودی ۲۱ را وارد می‌کنیم، پایتون آن را رشته در نظر می‌گیرد امّا در ادامه در 1 این مقدار به کمک int()، به نمایش عددی تبدیل می‌شود. اکنون پایتون می‌تواند مقایسه‌ی عددی را اجرا کند.

چگونه از int() در یک برنامه‌ی واقعی استفاده کنیم؟ برنامه‌ای را در نظر بگیرید که تعیین می‌کند آیا قدّ افراد برای سوار شدن به یک ترن هوایی به اندازه‌ی کافی بلند است یا نه:

1
2
3
4
5
6
7
8
height = input("How tall are you, in inches? ")
height = int(height)

if height >= 48:
    print("\nYou're tall enough to ride!")

else:
    print("\nYou'll be able to ride when you're a little older.")

این برنامه می‌تواند height را با ۴۸ مقایسه کند زیرا height = int(height) مقدار ورودی را پیش از انجامِ مقایسه به یک نمایش عددی تبدیل می‌کند. اگر عددِ واردشده بزرگتر از یا مساوی با ۴۸ باشد به کاربر می‌گوییم که قد او مناسب است:

1
2
3
How tall are you, in inches? 71

You're tall enough to ride!

اگر از ورودی‌های عددی برای انجام محاسبات یا مقایسه‌ها استفاده می‌کنید مطمئن شوید که ابتدا مقدار ورودی را به نمایش عددی تبدیل کرده‌اید.