در این مطلب از مجموعه مطالب بانک تمرین پایتون، به بررسی یک مجموعه تمارین از مبحث توابع در پایتون [ تابع در پایتون ] میپردازیم! در این مطلب سعی شده تا برای افراد با سطوح مختلف تمرین قرار داده شود!
فرض کنید دو رشتهی DNA به صورت زیر است:
GAGCCTACTAACGGGAT CATCGTAATGACGGCCT ^ ^ ^ ^ ^ ^^
همینطور که میبینید مثلاً حرف اول این دو رشته باهم فرق میکنه! همچنین حرف سومشووون و الی آخر!
هدف اینه: ببینیم این دو رشته توووی چند حرف باهم فرق دارن! ظاهراً در ادبیات تخصصی، به این چیزی که میخوایم حساب کنیم، میگن: Hamming Distance !
یعنی مثلاً در مثال فوق، باید تابع ما خروجی بده: 7 !
def distance(x, y): if len(x)!=len(y): print("Baradar Aziz! x,y bayad toooleshoon yeki bashe!") else: count = 0 for i in range(len(x)): if x[i] != y[i]: count = count + 1 return count
خب! بریم سراغ توضیح کد بالا!
اومدیم یک تابعی تعریف کردیم به اسم distance [ترجمه distance میشه فاصله!] که دو مولفه ورودی مثل x و y رو میگیره!
در خط 2 و 3 گفتیم:! اگر طووول [یا درواقع همون تعداد مولفههای] x و y یکی نبود، چاپ کنه که: برادر عزیز! x و y باید طووولشووون یکی باشه!
در خط 4 گفتیم: در غیر اینصورت [یعنی اگر طول x و y برابر بود!]
خط 5 تا 9: یک متغیری در نظر میگیریم به اسم count که درواقع میخوایم تعداد حروفی که از دو رشته DNA باهم فرق دارن رو نشون بده! (اول کار مقدارش رو گذاشتیم 0! ولی آخر کار، برای مثال ما باید بشه 7! چون دو رشته DNA فوق، در 7 حرف باهم فرق دارن!)
بعد گفتیم!: برای هر i تووی رنجِ زیر:
len(x)
بیا این کار رو بکن که:! (این قسمتی که در بالا صورتی کردم رو اگر متوجه نشدید، اشکال نداره! یکم جلوتر توضیح میدم!)
اگر مولفه iاُم x و y باهم برابر بود، به اوون count (که بیانگر تعداد حروفی از دو رشته بود که باهم برابر نیستن!) یکی اضافه کن!
دست آخر هم، به عنوان خروجی تابع، میایم همین count رو خروجی میدیم!
بذارید ازتون سوال بپرسم:! طووول یا تعداد مولفههای رشتههای ما در مثال خودمون چنده؟! بله درسته: 17 تا!
خب حالا بگید عبارت زیر چه اعدادی رو شامل میشه؟!
range(17)
بله بازهم درسته! اعداد 0 تا 16 ! [بازهم تاکید میکنم! باید پیشنیازها رو بلد باشید! و فرض بر اینه که کسی که اومده تمرین حل کنه، مطلب رو خوووب بلده!]
مطلب پیشنهادی!:
آموزش رایگان زبان برنامه نویسی پایتون !
در واقع قبول دارید این اعداد 0 تا 16 اندیسهای string زیر است؟! [چون پایتون اندیسگذاری رو از 0 شروع میکنه!]
GAGCCTACTAACGGGAT
پس نتیجه اینکه عبارت زیر روووی اندیسهای x میاد حلقه رو میزنه! که ماهم همین رو میخوایم! یعنی میخوایم بگیم اگر مولفه با اندیس 0 هردوتا رشته باهم برابر نبود، به count یکی اضافه کن! اگر مولفه یکم هر دو رشته باهم برابر بود که هیچی! اگر مولفه با اندیس 2 هر دو رشته باهم برابر نبود، بیا به count یکی اضافه کن! و الی آخر…!
for i in range(len(x))
خب! داشتیم توضیح میدادیم کدمون رو که مجبور شدیم به حاشیه بریم! الان باید سه خط آخر رو توضیح بدیم! یعنی
a="GAGCCTACTAACGGGAT" b="CATCGTAATGACGGCCT" print( distance(a,b) )
در سه خط بالا، اول اومدیم یک متغیر تعریف کردیم به اسم a که درواقع رشتهی DNA اول است! و متغیر b رشتهی DNA دوم!
حالا در خط آخر هم داریم فاصله بین a و b (که همینطور که قبلاً هم گفتیم در ادبیات تخصصی ظاهراً به این نوع فاصله میگن: Hamming Distance !) رو با تابع distance که در بالا نوشتیم، محاسبه میکنیم!
خروجی: 7 ! (یعنی 7 مولفه از دو رشته DNA باهم فرق دارن!)
تعداد دیدگاه | 0 |
تعداد بازدید | 29.2K |
تاریخ انتشار | 17/04/2020 |
تاریخ بروزرسانی | 17/04/2020 |
نویسنده | گروه آموزشی کولاک |