رشن | خدمات میزبانی وب

جمع پیوسته دو عدد در پایتون

خب، چیزی که در نهایت می‌خواهیم به آن برسیم این هست:

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

مثلا اول کاربر عدد 1 را وارد می‌کند و بعدش 2. خب جمعش می‌شود 3. حالا عدد جدید از کاربر می‌گیریم و مثلا 3 وارد می‌کند و حاصل جدید می‌شود 6 و همین‌طور تا آخر.


برای این کار هم می‌توانیم از تابع نویسی استفاده کنیم و یا هم تابعی برای آن ننویسیم، اما ما در این پروژه از تابع استفاده کردیم.

خب، ابتدا یک تابع به اسم دلخواه تعریف می‌کنیم.

Python
  1. def my_func():

به خاطر این‌که هر تابع یک تکه کد محسوب می‌شود باید دو نقطه در انتهای خط قرار دهیم تا پایتون متوجه شود که قرار هست بلوک کد بنویسیم که اجرایش کند.

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

نقل قول

بلوک try except بلوکی هست که به ما اجازه می‌دهد تا یک قطعه کد را تست کنیم و اگر به خطا خورد برایش خطا تعریف می‌کنیم که در صورتی که فلان خطا دریافت شد فلان کار انجام شود.

خب، پایین‌تر باز توضیح می‌دهم که این بلوک چیست و چرا از آن استفاده کردیم.

سینتکسش هم به این صورت است:

Python
  1. try:
  2. my_code
  3. except given_error:
  4. do_something

حالا کد مان به این صورت می‌شود:

Python
  1. def my_func():
  2. try:

خب، تا این جا دو تا بلوک کد داریم. یکی تابع تعریف کردیم که قرار هست داخل تابع یک سری کد بنویسیم و یکی دیگر هم try استفاده کردیم که قرار هست داخل این بلوک هم یک سری کد بنویسیم.

بعدش ما به دلخواه از تابع print() استفاده کردیم که شروع برنامه را با کلمات دلخواه نشان دهیم.

شما اسم تابع و کلماتی که در این آموزش می‌نویسیم را می‌توانید به دلخواه تغییر دهید.

Python
  1. def my_func():
  2. try:
  3. print('This is our magical sequence of numbers. Meanwhile, you can'
  4. ' type any other characters rather than than than numbers, it'
  5. ' would break the system\n')

همان‌طور که می‌بینید ما تابع پرینت را در سه خط نوشتیم، اما چرا؟ طبق PEP8 و دستورالعمل پایتون، بهتر است هر خط نهایتا ۷۹ کاراکتر را شامل شود که ما هم همین کار را کردیم و ادامه کد را در خط بعدی نوشتیم.

و حالا نوبت به این می‌رسد که در کاربر ورودی عددی دریافت کنیم. برای این‌که مطمئن شویم عددی که کاربر وارد می‌کند حتما از نوع integer باشد و string نباشد از تابع int() هم استفاده می‌کنیم.

Python
  1. def my_func():
  2. try:
  3. print('This is our magical sequence of numbers. Meanwhile, you can'
  4. ' type any other characters rather than than than numbers, it'
  5. ' would break the system\n')
  6. input1 = int(input('Type a number... '))

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

Python
  1. def my_func():
  2. try:
  3. print('This is our magical sequence of numbers. Meanwhile, you can'
  4. ' type any other characters rather than than than numbers, it'
  5. ' would break the system\n')
  6. input1 = int(input('Type a number... '))
  7. while True:

اما چرا حلقه while را True قرار دادیم؟

عبارت while True یعنی تا زمانی که این حلقه مقدارش درست باشد کار کند. به عبارت ساده‌تر، یعنی یک حلقه با تکرار همیشگی.

حالا کد را ادامه می‌دهیم.

حالا یک عدد دیگر از کاربر می‌گیریم و در متغیر دیگری آن را ذخیره می‌کنیم.

Python
  1. def my_func():
  2. try:
  3. print('This is our magical sequence of numbers. Meanwhile, you can'
  4. ' type any other characters rather than numbers, it'
  5. ' would break the system\n')
  6. input1 = int(input('Type a number... '))
  7. while True:
  8. input4 = input1
  9. input2 = int(input('Type the other number... '))

اما علت این‌که چرا متغیر دیگری به نام input4 تولید کردیم و مقدارش را برابر با input1 گذاشتیم پایین‌تر توضیح می‌دهم.

خب، تا این‌جا از کاربر دو تا عدد ورودی گرفتیم. حالا کاری که باید کنیم این است که input1 را با input2 جمع ببندیم.

Python
  1. def my_func():
  2. try:
  3. print('This is our magical sequence of numbers. Meanwhile, you can'
  4. ' type any other characters rather than numbers, it'
  5. ' would break the system\n')
  6. input1 = int(input('Type a number... '))
  7. while True:
  8. input4 = input1
  9. input2 = int(input('Type the other number... '))
  10. input1 = input2 + input1

و این کار را در متغیر input1 می‌ریزیم و آپدیتش می‌کنیم.

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

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

متغیرهای input1 و input2 را در تابع int() قرار دادیم تا هر مقدار عددی که دریافت کرد را به صورت عدد نشان دهد و استرینگ نباشد.

اگر استرینگ باشد و کاربر عدد 3 را وارد کند در واقع مقدار متغیر ما می‌شود '3'، اما حالا که از تابع int() استفاده می‌کنیم مقدار استرینگ را به عدد تبدیل می‌کند.

اما خب اگر کاربر اشتباها یک کاراکتر غیر عددی وارد کند برنامه به خطا می‌خورد. می‌توانیم از بلوک try except استفاده نکنیم تا هر خطا را به همان شکلی که در پایتون تعریف شده به کاربر نشان دهیم، اما می‌خواهیم error handling یا مدیریت خطا انجام دهیم.

بگذارید یک بار برنامه را بدون try بنویسیم و خروجی آن را در صورتی که کاربر کاراکتر وارد کند ببینیم:

خروجی:

Code
  1. This is our magical sequence of numbers. Meanwhile, you can type any other characters rather than numbers, it would break the system
  2. Type a number... 1
  3. Type the other number... q
  4. Traceback (most recent call last):
  5. File "numbers.py", line 15, in <module>
  6. my_func()
  7. File "numbers.py", line 8, in my_func
  8. input2 = int(input('Type the other number... '))
  9. ValueError: invalid literal for int() with base 10: 'q'

لاین آخر و ارور ValueError را مشاهده کنید. خطا می‌گوید که کاراکتری به نام q مبنای ۱۰ ندارد و بنابراین کاراکتر q قابل تبدیل شدن به عدد نیست.

ما با بلوک except در واقع می‌خواهیم این نوع ارورها را مدیریت کنیم.

حالا کد را با try except می‌نویسیم.

در واقع در بلوک except داریم به برنامه می‌گوییم که برو این کدهای ما را try کن و اگر به ارور ValueError برخورد کردی بیا Bye را پرینت کن. در آخر هم که تابع را صدا می‌زنیم تا برنامه اجرا شود.

Code
  1. This is our magical sequence of numbers. Meanwhile, you can type any other characters rather than numbers, it would break the system
  2. Type a number... 1
  3. Type the other number... q
  4. Bye

حالا بیایید برنامه را با ورودی‌های صحیح تست کنیم ببینیم چه نتایجی می‌گیریم: