اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

إليك الفرق بين الكودين بشكل واضح وبسيط:

أول كود

capitals = ['r','f','l']
cpas = {"D","d"}

for cap, cpa in zip(capitals, cpas):
    print(cpa, ":", cap)
capitals = ['r','f','l']
cpas = {"D","d"}

for cap, cpa in zip(capitals, cpas):
    print(cpa, ":", cap)

ما يحدث هنا:

capitals → قائمة (list)

cpas → مجموعة (set)

zip(capitals, cpas)
يربط العنصر الأول مع الأول، الثاني مع الثاني…
→ لكن المجموعة set غير مرتبة!
لذلك ترتيب "D", "d" غير مضمون.

الحلقة تعطيك مخرجات صحيحة مثل:

D : r d : f

أو قد تكون بالعكس… حسب ترتيب الـ set.

الكود الثاني (خاطئ)

capitals = ['r','f','l']
cpas = {"D","d"}

for capitals , cpas in capitals.items():
    print(cpas, ":", capitals)
capitals = ['r','f','l']
cpas = {"D","d"}

for capitals , cpas in capitals.items():
    print(cpas, ":", capitals)

 الأخطاء هنا:

capitals هو list
→ والقوائم ليس لديها items()
→ سيعطيك خطأ:

AttributeError: 'list' object has no attribute 'items'

أنت تكتب:

for capitals, cpas in capitals.items():

لكنّك:

تستخدم نفس اسم المتغيّر capitals للّست والقيم داخل الحلقة

وتستخدم items() مع متغيّر ليس قاموسًا

حتى لو كان قاموسًا، الصياغة غلط لأنها تعيد مفاتيح وقيم، وليس عناصر من قائمتين.

إذا أردت الكود الثاني يعمل، يجب أن يكون لديك dict هكذا:

capitals = {"r": "D", "f": "d"}

for cap, cpa in capitals.items():
    print(cpa, ":", cap)
capitals = {"r": "D", "f": "d"}

for cap, cpa in capitals.items():
    print(cpa, ":", cap)

 

  • 0
نشر

الكود الأول لا مشكلة به لأنك استخدمت الدالة zip التي تقوم بدمج عناصر القائمة capitals مع عناصر المجموعة cpas، وتعمل عن طريق إنشاء أزواج من العناصر وتتوقف تلقائيًا عند انتهاء أقصر مصفوفة أو مجموعة تم تمريرها لها.

وهي المجموعة في المتغير cpas الذي يحتوي على عنصرين فقط، وبالتالي سيقوم الكود بطباعة سطرين فقط ولن يلتفت للعنصر الثالث في القائمة، مع ملاحظة أن ترتيب طباعة D و d غير مضمون لأن الـ set لا تحتفظ بترتيب العناصر.

بينما الكود الثاني به خطأ لغوي برمجي Syntax  error حيث قمت باستدعاء الدالة items() على المتغير capitals والذي هو من نوع list ولا يمتلك تلك الدالة (ميثود) لأنها مخصصة للتعامل مع القواميس dictionaries لاستخراج المفاتيح والقيم، ولذلك لن يتم تنفيذ حلقة التكرار من الأساس.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...