الگوریتم یعنی یک مسیر روشن برای رسیدن از ورودی به جواب. قبل از حلقه و شرط، باید معلوم کنیم چه چیزی میگیریم و دقیقاً چه چیزی برمیگردونیم. برای تابع جمع قیمتها، ورودی یک فهرست عددی و خروجی یک عدد است؛ برای پیدا کردن جای یک کالا، خروجی میتونه شماره خانه باشد. این دو قرارداد قابل جایگزینی نیستند، حتی اگر هر دو برنامه اجرا شوند.
مثلاً قرارداد زیر میگه فهرست خالی هم ورودی مجاز است و جمعش صفر میشود:
def total_cost(prices):
total = 0
for price in prices:
total += price
return total
print(total_cost([4, 7, 2])) # 13
print(total_cost([])) # 0
توی تمرینهای این دوره، جواب را با return تحویل میدیم؛ چاپ کردن جای آن را نمیگیره. شماره خانهها از صفر شروع میشوند. فقط نوع ورودی گفتهشده را در نظر بگیر؛ لازم نیست برای هر نوع نامعتبر یک رفتار تازه اختراع کنی. خطای رایج اینه که رفتار حالت خالی را به شانس بسپاریم و بعد وسط کد تصمیم بگیریم. ✍️ قرارداد خوب حتی قبل از اجرا، قابل آزمون است.
فعالیت شما
تفاوت ورودی، خروجی و چاپ را توضیح بده؛ در مثال total_cost ورودی فهرست اعداد، خروجی جمع عددی و جواب ورودی خالی صفر است. این گام خواندنی است.