Alaa Jamal نشر 5 يونيو 2021 أرسل تقرير نشر 5 يونيو 2021 ممكن الحل يبدأ بهذه الطريقة؟ وما الخلل في الكود 1 اقتباس
1 Ali Haidar Ahmad نشر 5 يونيو 2021 أرسل تقرير نشر 5 يونيو 2021 (معدل) import re # regex استيراد المكتبة txt = input() # إدخال النص result = re.findall("056\d{7}", txt) # أي أول 3 محارف يجب أن يكونوا056 وبعدها 7 أرقام # عرض النتائج if result: for word in result: print(word) else: print("No ID!") الرمز d\ يدل على وجود رقم الرمز {7} يدل على أن المحرف الموجود قبلها يجب أن يتكرر 7 مرات وفي حالتنا (d\ أي يجب أن يتواجد 7 أرقام) الدالة (pattern,string)findall تبحث في النص الذي نمرره له مكان الباراميتر string لترى ما إذا كان يتطابق أو فيه جزء يتطابق مع التعبير النمطي الذي نمرره لها مكان الباراميتر pattern. في حال تم إيجاد جزء أو أكثر في النص يتطابق مع التعبير النمطي, ترجع list كل عنصر فيه يمثل الجزء الذي يتطابق مع التعبير النمطي. في حال لم يتم إيجاد أي تطابق, ترجع list فارغ. # تعدييييييل: الرمز ^ يختبر فقط بداية النص أي سيختبر مطابقة ال pattern مع أول كلمة في ال string لذلك لايصلح لاستخدامه في هذه المهمة وبشكل مشابه أيضاً المحرف $. تم التعديل في 5 يونيو 2021 بواسطة Ali Haidar Ahmad 2 اقتباس
1 ريم المهدي نشر 13 يونيو 2021 أرسل تقرير نشر 13 يونيو 2021 بمراجعة المطلوب في السؤال، أجد انه لا يشترط إدخال قيمة رقمية فقط كما قمت بحله، الحل المذكور في إجابتك صحيح لكن فقط في حال كانت القيمة المدخلة من قبل المستخدم رقمية فقط، أما إن اردنا إدخال كل الإحتمالات فيجب علينا أن نستخدم دالة لفرز الأرقام من المدخل اولاً ثم تطبيق الشرط كالتالي: import re text = input('enter the text') expp = "056\d{7}" newtext = re.findall(r'\d+', text) newtext لقد قمت بحذف شرطية إبتداء النص ب 056 بحذف ^ و ايضاً حذف شرطية الإنتهاء بالسبعة أرقام كاملة و ذلك بحذف $ من نهاية النص، بذلك نتفادي اي خطأ قابل حدوثه من قبل المستخدم، شرطنا الوحيد وجود 056 في مجموعة الأرقام التي قمنا بالحصول عليها بتطبيق دالة findall و بإستخدام شرط إستخراج القيم الرقمية \d ومن ثم نقوم بإدارج الشرط الثاني لفلترة الأرقام و إستخراج المطابق للمطلوب في الأرقام الوطنية كالتالي: exp = re.findall(expp, newtext[0]) print(exp) و الان إن قمنا بإختبار البرنامج بإدخال نفس النص "Hello my Jawwal number is 0560000001 " سنحصل على الرقم 0560000001. يمكننا ملاحظة أننا قمنا بإستدعاء اول قيمة في النص الجديد newtext[0] و ذلك لأن القيمة الراجعة عبارة عن قائمة محتوية على النص. والأن السؤال يتطلب إنشاء دالة، بذلك يمكننا إنشاء الدالة بإستخدام الدوال اعلاه فيصبح البرنامج كاملاً كالتالي: def nationalNo(text, exp = '05[6|9]\d{7}'): return re.findall(expp, (re.findall(r'\d+', text))[0]) nationalNo('Hello my Jawwal number is 0560000001') اقتباس
السؤال
Alaa Jamal
ممكن الحل يبدأ بهذه الطريقة؟ وما الخلل في الكود
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.