Fahmy Mostafa نشر 19 يونيو 2021 أرسل تقرير نشر 19 يونيو 2021 ما الغرض من إمكانية إستعمال جملة else مع جملة for كما في الكود التالي: for i in range(10): print(i) if i == 9: print("Found 9") break; else: print("Completed successfully") لماذا لا يتم كتابة دالة print الأخيرة بعد حلقة for بشكل مباشر فقط كالتالي: for i in range(10): print(i) if i == 9: print("Found 9") break; print("Completed successfully") ألن يكون من الأسهل فعل ذلك؟ أم هل يوجد فرق بين الطريقة الأولى والثانية؟ 1 اقتباس
1 سمير عبود نشر 20 يونيو 2021 أرسل تقرير نشر 20 يونيو 2021 بتاريخ 3 ساعات قال Fahmy Mostafa: لماذا لا يتم كتابة دالة print الأخيرة بعد حلقة for بشكل مباشر فقط كالتالي: لو تم كتابتها بشكل مُباشر سيتم تنفيذها في كل الأحوال أما بإستخدام else مع for فسيتم تنفيذ الكتلة البرمجية الموجودة في else في حالة إنهاء الحلقة بشكل عادي فقط أي أنه إذا تم تنفيذ break فلن يتم تنفيذ جزء else في حالتك: بتاريخ 3 ساعات قال Fahmy Mostafa: for i in range(10): print(i) if i == 9: print("Found 9") break; else: print("Completed successfully") سيتم طباعة كل الأعداد من 0 ل 9 و عند الوصول ل 9 سيتحقق الشرط و يتم تنفيذ break و هنا الحلقة لن يتم إكماله بشكل عادي و بالتالي لن يتم تنفيذ جزء else جرب مثلا التالي: for i in range(3): print(i) if i == 9: print("Found 9") break; else: print("Completed successfully") سيكون الخرج: 0 1 2 Completed successfully أي أن جزء else قد تم تنفيذه و بالتالي فإنه قد تم تنفيذ الحلقة كلها و الخروج منها بشكل عادي. لنٌعطِ مثال آخر و لنفترض أنه طُلب منك إنشاء دالة search للبحث عن عُنصر ما في قائمة و إرجاع الفهرس المتواجد به إن وُجد بإستعمال حلقة for فإذا تم إيجاد العُنصر يتم الخروج من الحلقة دون اكمال بقية العناصر و إذا لم يتم إيجاد العُنصر يتم إرجاع -1 أمامك طريقين إستخدام مُتغير بولياني و تهيئته ب false و عند إيجاد العُنصر يُصبح true ثم القيم ب break للحلقة ثم فحص قيمة المُتغير البولياني و إرجاع القيمة المناسبة: def search(lst, s): found = False for i, val in enumerate(lst): if val == s: found = True break if not found: return -1; return i lst = ["foo", "bar", "baz"] print(search(lst, "baz")) # 2 print(search(lst, "faz")) # -1 أو إستخدام الطريقة for .. else و الإستغناء عن المتغير البولياني: def search(lst, s): for i, val in enumerate(lst): if val == s: break else: return -1; return i lst = ["foo", "bar", "baz"] print(search(lst, "baz")) # 2 print(search(lst, "faz")) # -1 و بهذا يُصبح الكود أكثر مقروئية و إستخدام else مع for في مثل هذه الحالات أكثر منطقية. 1 اقتباس
0 Wael Aljamal نشر 19 يونيو 2021 أرسل تقرير نشر 19 يونيو 2021 هذه بنية برمجية غريبة بعض الشيئ وغير موجودة في باقِ اللغات المشهورة، لكنها تقوم بتعريف لبنة برمجية code block لتتنفذ مع بعضها، حيث أن الجزء الخاص ب else سيعمل دائما بعد إنتهاء الحلقة بشكل كامل (أي بدون وجود break قد تمت خلال تكرار الحلقة) وهي مخالفة لحالة if - else بالمنطق بالنسبة ل else. الشكل العام لها: for item in sequence: process(item) else: # no break suite كمثال لاستخدامها، إن أردنا طباعة نتيجة هل العدد أولي أم لا، حيث يجب التأكد من عدم وجود قاسم لهذا العدد ضمن المجال من 2 حتى n-1 حسب المثال، فإذا انتهت الحلقة بدون break (وجود قاسم للعدد) ستتم طباعة أن العدد أولي: >>> for n in range(2, 10): ... for x in range(2, n): ... if n % x == 0: ... print(n, 'equals', x, '*', n//x) ... break # عدد غير أولي لوجود قاسم ... else: ... # عدم كسر الحلقة أي عدم وجود قاسم فالعدد أولي ... print(n, 'is a prime number') 1 اقتباس
السؤال
Fahmy Mostafa
ما الغرض من إمكانية إستعمال جملة else مع جملة for كما في الكود التالي:
لماذا لا يتم كتابة دالة print الأخيرة بعد حلقة for بشكل مباشر فقط كالتالي:
ألن يكون من الأسهل فعل ذلك؟ أم هل يوجد فرق بين الطريقة الأولى والثانية؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.