سلسلة حل المشكلات (Problem Sloving) اليوم الاربعة و عشرين

التحدي رقم 24 لليوم رقم 24 من رمضان

اولا
كل عام و انتم بخير و اعاده الله عليكم بالمن و بالخير و البركه

بالامس كنا نقول رمضان اهلا و اليوم نقول رمضان مهلا فاللهم اغفر لنا ما مضي و اصلح لنا ما بقي واختم لنا رمضان بخير و انت راض عنا

و لا تنسي تجديد نيتك فأن طلب العلم عباده
لا تنسوني و اخي المعتقل سياسيا من جميل دعائكم في هذه الليالي العشر

وصف التحدي :

متنساش تدعي لخواتنا ف غزه لو لسه عندك قلب و شوية دم

**مستوي التحدي : **
اقل من متوسط برمجيا

قم بكتابة دالة اسمها: isEmail تستقبل قيمة نصية من نوع string . تقوم الدالة بالتحقق ما إذا كانت القيمة النصية تحتوي على بريد إلكتروني صحيح أم لا، عن طريق إرجاع قيمة من نوع boolean .

شروط البريد الإلكتروني الصحيح
  1. أن لا يبدأ رمز
  2. أن يحتوي الجزء الأول على خانة على الأقل (ما قبل الرمز @)
  3. أن يحتوي على الرمز @
  4. أن يتبع رمز @ خانة على الأقل
  5. أن يتبعه بعد ذلك بالرمز .
  6. أن يتبع الرمز . بخانتين على الأقل
  7. لا مانع من أن يحتوي الجزء الذي يسبق @ على الرموز التالية _.-

ملحوظه : تقدر تحل التحدي و تتحقق من صحته من خلال الموقع هنا اهو :
موقع سلسلة حل المشكلات (Problem Sloving)
بس خد بالك لو هتحل ع الموقع لازم اسم الداله يكون زي الاسم اللي موجود في وصف التحدي

أضغط لرؤية المخرجات المتوقعة عشان تتيست الكود بتاعك

الاختبار 1
المدخلات (Inputs)
email = ‘example@example.com’
المخرجات (Outputs)
true

الاختبار 2
المدخلات (Inputs)
email = ‘example@example.c’
المخرجات (Outputs)
false

الاختبار 3
المدخلات (Inputs)
email = ‘example@com’
المخرجات (Outputs)
false

الاختبار 4
المدخلات (Inputs)
email = ‘@example.com
المخرجات (Outputs)
false

حل التحدي

def isEmail(email):
    if not email or not email[0].isalnum():
        return False

    if "@" not in email or "." not in email:
        return False

    at_index = email.index("@")
    if at_index == 0 or at_index == len(email) - 1:
        return False

    local_part = email[:at_index]
    domain_part = email[at_index + 1:]

    if not local_part or any(c not in "-_.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" for c in local_part):
        return False

    if "." not in domain_part or domain_part[0] == ".":
        return False

    last_dot_index = email.rindex(".")
    if len(email) - last_dot_index - 1 < 2:
        return False

    if email.rindex("@") > last_dot_index:
        return False

    return True


4 إعجابات

3 إعجابات

بصي هو الحل صح 100 ال 100 ولكن عندي تفصيله عايز اقولهالك في حتة ال if و ال return

اولا احنا امتا بنستخدم ال elif :
كامنطق صحيح :
لما بيكون بكلم عن حالة واحده بتتغير بمعني :
لما يكون عندي متغير بيساوي مثلا 5
وعايز اقول للداله لو المتغير اكبر من 5 اعملي شئ معين و لو اقل من 5 اعملي شئ اخر
وفي الاخر بقوله لو المتغير دا محققش ولا شرط اعمل ال else

فا انا هنا بكلم علي نفس المتغير اللي هي بمعني : ( اما , او , او , و الا )

فاهمه !

حتة كمان في ال if لو الشروط اللي انا هعملها كل واحد مش مرتبط بالتاني فا ممكن اكتبهم كلهم في سطر واحد بستخدام or

دي كدا حاجه ,
حاجه تانيه بقا في طريقة التعامل مع ال return في حالات if

لازم تبقي عارف ان لما الدالة بنعملها return بتقف و مش بتكمل اي حاجه تاني تحت ال return
تمام

فا اذا انا ليه اكتب كدا :

def for_ex(ex):
    if ex != 5 : 
        return False
    else:
        return True

ليه اعمله كدا رغم اني اقدر اكتبه كدا و يبقي اكثر احترافيه :


def for_ex(ex):
    if ex != 5 : 
        return False
    
    return True

لان كدا الكود لو لقي اي رقم لا يساوي ال 5 هيروح عامل ريتيرن و يقف تلقائي مش هيقرأ الي بعدها

انما لو عدا ال if فا اذا الرقم بيساوي ال 5 لان ال if بتشرط انه ميساويش 5 فاذا هيتخطاها مش هيلاقي تحتها الا ال return فا هيروح عملها فاهم

يعني انت بتشرط عليه كل الشروط اللي تعمل False و تقوله في الاخر لو عديت من كل الشروط فا انت اكيد True فاهمه

او ممكن اعمل متغير فوق خالص واخلي قيمتة الاصليه هي القيمه اللي انا عايزه يرجعهها مثلا True
تمام
و اشرط عليه بقا لو في شرط فولاني انا هعينه يبقي حول المتغير دا ل False و في الاخر اخليه ي return المتغير دا

كدا :

def for_ex(ex):
    is_True = True
    if ex != 5 : 
        is_True = False
    
    return is_True
4 إعجابات

ايه راي حضرتك في التعديل ده اعتقد كدا تمام و ألف شكر على تعب حضرتك معايا انا شلت elif و else اعتمادا علي أنه لو فيه شرط متتحققش هو تلقائي هيكمل مش دي وجهة نظر حضرتك بردو ولا ايه

4 إعجابات

ايوه كدا ما شاء الله

إعجابَين (2)