cb
codebamin
الفصل 5 · الجمل الشرطية (If Statements)

الشروط الإضافية المتعددة: elif

درس أحياء سريع! معظم خلايا جسمك تحتوي على الشفرة الجينية الكاملة داخل الـDNA. ويتكون الـDNA من سلاسل من وحدات جزيئية تسمى القواعد النيتروجينية، ولها أربعة أنواع: Adenine وCytosine وGuanine وThymine، ويُختصر ذكرها عادة إلى A وC وG وT. لذلك قد يكون جزء من إحدى السلاسل مثل:

AGTAGCGTCCTTAGTTACAGGATGGCTTAT...

تقترن هذه السلسلة بسلسلة أخرى يُستبدل فيها A بـT والعكس، ويُستبدل C بـG والعكس، مثل:

TCATCGCAGGAATCAATGTCCTACCGAATA...

ترتبط السلسلتان معًا في بنية اللولب المزدوج الشهيرة، من خلال أزواج A-T وC-G المتطابقة. هذه الأزواج مهمة عند نسخ الـDNA أثناء انقسام الخلايا وتكاثرها؛ ينفصل اللولب المزدوج، ثم تُنسخ الشفرة إلى نسختها المقابلة لتكوين نسخة جديدة.

سنحاكي هذه العملية. جرّب برنامجًا من النوع نفسه الذي كتبناه قبل قليل:

__copyable__ __program_indented__

هذا لا يعمل كما نريد. يتحول T إلى A، لكن A لا تبقى متحولة إلى T. هل ترى السبب؟

عندما يكون char == 'A' صحيحًا، يُنفذ السطر char = 'T'. لكن بعد ذلك يصبح الشرط التالي char == 'T' صحيحًا أيضًا، فيُنفذ char = 'A' ونعود إلى نقطة البداية.

نحتاج إلى تغيير char من T إلى A فقط إذا لم تكن char هي A من الأصل؛ أي عندما يكون الشرط char == 'A' قد كان False. يمكننا فعل ذلك باستخدام else بهذه الصورة:

if char == 'A': char = 'T' else: if char == 'T': char = 'A'

أصلح الآن البرنامج بحيث يستبدل جميع المحارف بالصورة الصحيحة.

رائع! لقد حاكيت عملية تقوم بها خلايا جسمك باستمرار.

يمكن اختصار if الموجودة داخل else باستخدام كلمة مفتاحية واحدة هي elif. مثلًا، يمكن تحويل الكود السابق إلى:

if char == 'A': char = 'T' elif char == 'T': char = 'A' elif char == 'G': char = 'C' elif char == 'C': char = 'G'

من الشائع استخدام سلسلة من فروع elif عندما تريد تنفيذ جسم واحد فقط من عدة احتمالات. بشكل عام، يمكن إعادة كتابة كود مثل:

if X: ... else: if Y: ... else: if Z: ... else: ...

إلى الصورة الأبسط:

if X: ... elif Y: ... elif Z: ... else: ...

هذه الصيغة أقصر وتمنع تراكم المسافات البادئة المتداخلة. الفرق هنا في طريقة الكتابة والتنظيم؛ من ناحية النتيجة يستطيع البرنامجان تمثيل المنطق نفسه.

ويمكن بعد سلسلة elif إضافة else أخيرة اختياريًا. لم نستخدمها في مثال DNA، لكن يمكننا إضافتها للتعامل مع أي محرف غير متوقع، أو تحويل elif char == 'C': إلى else: إذا كنا واثقين أن المدخلات لا تحتوي إلا القيم المتوقعة.

solution.py
1
2
3
4
5
6
7
8
9
10
الطرفية (shell)
>>>