بدن شما از سلولهایی تشکیل شده است که در خود DNA دارند. این سلولها بهطور منظم فرسوده میشوند و باید جایگزین شوند، و این کار را با تقسیم شدن به سلولهای دختر انجام میدهند. در واقع، بدن یک انسان معمولی در طول عمرش حدود ۱۰ کوادریلیون تقسیم سلولی را تجربه میکند!
وقتی سلولها تقسیم میشوند، DNA آنها هم همانندسازی میکند. گاهی در این فرایند اشتباهاتی رخ میدهد و تکههای منفرد DNA با اطلاعات نادرست رمزگذاری میشوند. اگر دو رشتهی DNA را با هم مقایسه کنیم و تفاوتهای میانشان را بشماریم، میتوانیم ببینیم چند اشتباه رخ داده است. به این کار «فاصلهی همینگ» میگویند.
فاصلهی همینگ در بسیاری از حوزههای علوم، نه فقط زیستشناسی، کاربرد دارد؛ پس عبارت جالبی است که با آن آشنا باشید :)
فاصلهی همینگ میان دو رشتهی DNA را محاسبه کنید.
DNA را با حروف C، A، G و T میخوانیم. دو رشته ممکن است به این شکل باشند:
GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^ ^ ^ ^^
این دو رشته ۷ تفاوت دارند و بنابراین فاصلهی همینگ برابر ۷ است.
فاصلهی همینگ فقط برای دنبالههایی با طول برابر تعریف میشود؛ پس تلاش برای محاسبهی آن میان دنبالههایی با طول متفاوت نباید کار کند.
گاهی لازم است یک استثنا ایجاد کنید. وقتی این کار را میکنید، باید همیشه یک پیام خطای معنادار هم بیاورید تا نشان دهید منشأ خطا چیست. این کار خوانایی code شما را بیشتر میکند و کمک چشمگیری به debugging میکند. در مواردی که میدانید منشأ خطا نوع مشخصی خواهد بود، میتوانید یکی از انواع خطای داخلی را ایجاد کنید، اما باز هم باید پیام معناداری بیاورید.
این تمرین خاص میخواهد که با دستور raise وقتی رشتههای در حال بررسی طول یکسانی ندارند، یک ValueError را «پرتاب» کنید. tests تنها زمانی قبول میشوند که هم exception را raise کنید و هم پیامی همراه آن بیاورید.
برای اینکه یک ValueError را همراه با پیام ایجاد کنید، پیام را بهعنوان آرگومان به نوع exception بنویسید:
# When the sequences being passed are not the same length.
raise ValueError("Strands must be of equal length.")