چگونه داده ها را یررسی کنیم ؟
چگونه داده ها را یررسی کنیم ؟
اگر ما تابع factoial را با مقدار 5.1 بررسی کنیم، چه اتفاقی میافتد؟
>> factorial (1.5)
RuntimeError: Maximum recursion depth exceeded
این شبیه یک بازگشت بیانتها بهنظر میرسد اما چگونه میتواند چنین باشد؟ یک حالـت مبنـا در وضعیت 0==n وجود دارد. مشکل اینجا است که مقادیر n حالت مبنـا را گـم مـیکننـد. در اولـین فراخوانی بازگشتی مقدار n برابر با 5.0 است. در فراخوانی بعدي مقدار n برابر با 5.0 –است و از ایـن لحظه مقدار کوچک و کوچکتر میشود اما هیچگاه به صفر نمیرسد. ما دو انتخاب داریم؛ میتوانیم تابع factorial را براي کار بـر روي اعـداد اعشـاري تعمـیم دهیم و یا factorial را به گونهاي بسازیم که نوع آرگومانهاي خـود را بررسـی کنـد. اولـین راه را «تابع گاما» مینامند و کمی از بحث این کتاب خارج است. بنابراین راه دوم را در پیش میگیریم. ما میتوانیم از تابع type براي مقایسۀ نوع پارامتر با نوع مقـدار صـحیح مشخصـی استفاده کنیم. حال که ما بر روي این موضوع کار میکنیم، میتوانیم مثبت بودن پارامتر را هم بررسـی کنیم:
def factorial (n):
if type(n) != type(1):
print “Factorial is only defined for integers.”
return -1
elif n < 0:
print “Factorial is only defined for positive integers.”
return -1
elif n == 0:
return 1
else:
return n * factorial(n-1)
اکنون ما سه حالت مبنا داریم. اولین حالت مبنا اعداد غیرصحیح را جدا مـیکنـد (یـا بـه زبـان عامیانه ”غربال میکند“) و دومی اعداد صحیح منفی را. در هر دو حالت، برنامه پیغـام خطـایی را چـاپ میکند و براي اینکه غلط بودن چیزي را نشان بدهد، مقدار مشخص 1 –را بر میگرداند:
>> factorial (“fred”)
Factorial is only defined for integers.
-1
>>> factorial (-2)
Factorial is only defined for positive integers.
-1
اگر ما هر دو بررسی را انجام دهیم، آنگاه مـیدانـیم کـه n یـک عـدد صـحیح مثبـت اسـت و میتوانیم ثابت کنیم که بازگشت پایان مییابد. این برنامه الگویی را نشان میدهد که گاهی نگهبان نامیده مـیشـود. دو شـرط اول بـهعنـوان نگهبان عمل میکنند و از کد برنامه وقتی که با مقادیر اشکالآفرین کار میکنـد محافظـت مـینماینـد. نگهبانها اثبات درستی کد را ممکن میسازند.
برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید