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

ما المشكلة في شيفرة بايثون التالية؟

Ali Ahmed6

السؤال

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


arr = [2,3,4,5,6,7,8]

start = 0
end = len(arr) - 1
n = int(input("Number: "))
while start <= end:

    mid = start + (end - start) // 2

    if n == arr[mid]:
       print("Found")

    elif n < arr[mid]: # 3 < 5
        end = start + 1 # start = 0 / end = 1

    elif n > arr[mid]: # 7 > 5
        start = end - 1 # start = 5


    else:
        print("No Found")

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

لا تزال تحتاج تحديث نهاية النطاق (end) عندما يكون العنصر الذي نبحث عنه أقل من العنصر في منتصف النطاق. وبنفس المنطق، تحديث بداية النطاق (start) عندما يكون العنصر الذي نبحث عنه أكبر من العنصر في منتصف النطاق.

أيضا سوف تحتاج إضافة تحقق بعد الحلقة للتحقق مما إذا كان لم يتم العثور على العنصر.
شيء آخر يجب عليك القيام به هو كسر الحلقة عند الحصول على العنصر. 
الناتج:

arr = [2, 3, 4, 5, 6, 7, 8]
start = 0
end = len(arr) - 1
n = int(input("Number: "))

while start <= end:
    mid = start + (end - start) // 2

    if n == arr[mid]:
        print("Found")
        break  # يجب إيقاف الحلقة بمجرد العثور على العنصر

    elif n < arr[mid]:
        end = mid - 1  # تحديث نهاية النطاق ليكون mid - 1

    elif n > arr[mid]:
        start = mid + 1  # تحديث بداية النطاق ليكون mid + 1

if start > end:
    print("Not Found")
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 6 دقائق مضت قال Adnane Kadri:

لا تزال تحتاج تحديث نهاية النطاق (end) عندما يكون العنصر الذي نبحث عنه أقل من العنصر في منتصف النطاق. وبنفس المنطق، تحديث بداية النطاق (start) عندما يكون العنصر الذي نبحث عنه أكبر من العنصر في منتصف النطاق.

أيضا سوف تحتاج إضافة تحقق بعد الحلقة للتحقق مما إذا كان لم يتم العثور على العنصر.
شيء آخر يجب عليك القيام به هو كسر الحلقة عند الحصول على العنصر. 
الناتج:

arr = [2, 3, 4, 5, 6, 7, 8]
start = 0
end = len(arr) - 1
n = int(input("Number: "))

while start <= end:
    mid = start + (end - start) // 2

    if n == arr[mid]:
        print("Found")
        break  # يجب إيقاف الحلقة بمجرد العثور على العنصر

    elif n < arr[mid]:
        end = mid - 1  # تحديث نهاية النطاق ليكون mid - 1

    elif n > arr[mid]:
        start = mid + 1  # تحديث بداية النطاق ليكون mid + 1

if start > end:
    print("Not Found")

يا انهار ابيض , ايو صح انا نسية اكسر الحلقه وكمان نسيه الmid 

 

شكرااا جداا والله 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

الشيفرة التي قمت بمشاركتها هي خوارزمية بحث ثنائي (Binary Search)، ولكن هناك بعض المشكلات في الشيفرة التي قد تؤثر على عملية البحث الصحيحة. إليك بعض المشكلات التي يمكننا تصحيحها:

  • في السطر `end = start + 1` و `start = end - 1`، يجب تعديلها لتحديث قيمة `start` و `end` بناءً على قيمة `mid` بدلاً من القيم الثابتة. يمكنك تعديلها على النحو التالي:
  • يجب إضافة تعليمة `break` بعد طباعة "Found" في حالة العثور على العنصر المطلوب. هذا لأنه بعد العثور على العنصر، لا يوجد حاجة للاستمرار في الحلقة. يمكنك إضافة `break` على النحو التالي:
  • يجب إضافة تعليمة `else` في نهاية الحلقة لطباعة "Not Found" إذا لم يتم العثور على العنصر المطلوب. يمكنك إضافة `else` على النحو التالي:

بعد تصحيح هذه المشكلات، يجب أن تعمل الشيفرة بشكل صحيح للبحث عن العنصر المطلوب في القائمة المرتبة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 30‏/11‏/2023 at 12:33 قال عبدالباسط ابراهيم:

الشيفرة التي قمت بمشاركتها هي خوارزمية بحث ثنائي (Binary Search)، ولكن هناك بعض المشكلات في الشيفرة التي قد تؤثر على عملية البحث الصحيحة. إليك بعض المشكلات التي يمكننا تصحيحها:

  • في السطر `end = start + 1` و `start = end - 1`، يجب تعديلها لتحديث قيمة `start` و `end` بناءً على قيمة `mid` بدلاً من القيم الثابتة. يمكنك تعديلها على النحو التالي:
  • يجب إضافة تعليمة `break` بعد طباعة "Found" في حالة العثور على العنصر المطلوب. هذا لأنه بعد العثور على العنصر، لا يوجد حاجة للاستمرار في الحلقة. يمكنك إضافة `break` على النحو التالي:
  • يجب إضافة تعليمة `else` في نهاية الحلقة لطباعة "Not Found" إذا لم يتم العثور على العنصر المطلوب. يمكنك إضافة `else` على النحو التالي:

بعد تصحيح هذه المشكلات، يجب أن تعمل الشيفرة بشكل صحيح للبحث عن العنصر المطلوب في القائمة المرتبة.

طيب استخدم نفس الشيفره عادي لو بدور علي اسماء عادي صح والا اي ؟

ولو سمحت سوال كمان هو انا ممكن استخدم الخورزميه ده فيه اي نوع يعني مثل dict وكده يعني والا الا فيه ال arr فقط؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...