مسائل کلامی سادهی ریاضی را تجزیه و ارزیابی کنید و پاسخ را بهصورت یک عدد صحیح برگردانید.
مسائلی که هیچ عملیاتی ندارند، صرفاً به همان عدد دادهشده ارزیابی میشوند.
What is 5?
به ۵ ارزیابی میشود.
دو عدد را با هم جمع کنید.
What is 5 plus 13?
به ۱۸ ارزیابی میشود.
اعداد بزرگ و اعداد منفی را هم مدیریت کنید.
حالا سه عملیات دیگر را انجام دهید.
What is 7 minus 5?
۲
What is 6 multiplied by 4?
۲۴
What is 25 divided by 5?
۵
مجموعهای از عملیات را به ترتیب انجام دهید.
از آنجا که اینها مسائل کلامیاند، عبارت را از چپ به راست ارزیابی کنید و ترتیب معمول عملیات را نادیده بگیرید.
What is 5 plus 13 plus 6?
۲۴
What is 3 plus 2 multiplied by 3?
۱۵ (یعنی نه ۹)
تجزیهگر باید این موارد را رد کند:
گاهی لازم است یک استثنا ایجاد کنید. وقتی این کار را میکنید، همیشه باید یک پیام خطای معنادار را هم بیاورید تا نشان دهید منبع خطا چیست. این کار کد شما را خواناتر میکند و کمک زیادی به Debug میکند. در موقعیتهایی که میدانید منبع خطا از نوع مشخصی است، میتوانید یکی از انواع خطای داخلی را ایجاد کنید، اما همچنان باید پیام معناداری را هم بیاورید.
این تمرین بهطور خاص میخواهد که اگر پرسش دادهشده به answer() بدشکل یا نامعتبر باشد، یا عملیات ناشناختهای داشته باشد، با دستور raise یک ValueError را «پرتاب» کنید. آزمونها تنها زمانی قبول میشوند که هم exception را raise کنید و هم پیامی همراه آن بیاورید.
توجه کنید: پیام لازم برای هر سناریو متفاوت است، حتی اگر همان نوع خطا ایجاد شود.
آزمونها را با دقت بررسی کنید.
برای ایجاد یک ValueError همراه با پیام، پیام را بهعنوان آرگومانی برای نوع exception بنویسید:
# if the question contains an unknown operation.
raise ValueError("unknown operation")
# if the question is malformed or invalid.
raise ValueError("syntax error")
برای رسیدگی به یک خطای ایجادشده درون یک بلوک کد مشخص، میتوان از یک try-except استفاده کرد.
بلوکهای try-except کدی را که ممکن است خطا ایجاد کند «در بر میگیرند» و همهی استثناها را به یک خطا، چند خطا، یا بخشهای دیگری از کد نگاشت میکنند تا مشکل را حل کنند:
while len(equation) > 1:
try:
# The questionable/error-prone code goes here,in an indented block
# It can contain statements, loops, if-else blocks, or other executable code.
x_value, operation, y_value, *rest = equation
...
...
except:
# Code for what to do when an error gets thrown in the code above.
# This could be one error, or more complicated logging, error checking and messaging.
raise ValueError("syntax error")