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

ما الخطاء في كود بايثون التالي

Ail Ahmed

السؤال

السلام عليكم

ده مسائل من موقع codwars

Create a function that always returns True/true for every item in a given list.
However, if an element is the word 'flick', switch to always returning the opposite boolean value.

وده الحل بناعي ,  بس بيضهر خطاء علي الموقع codewars

boo = 'True'

for row in range(len(arr)):

    if 'flick' in arr[row]:
        boo = 'False'
        arr[row] = boo

    else:
        arr[row] = boo    

print(arr)     

 

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

Recommended Posts

  • 0

المطلوب منك هو كتابة دالة تُرجع دائمًا True لأي عنصر في قائمة معينة، ولديك العنصر هو كلمة "flick"، أي  يجب على الدالة تبديل السلوك لترجع دائمًا القيمة المنطقية المعاكسة.

ولديك مشكلتان:

1- التكرار اللانهائي، حيث عندما تواجه حلقة for عنصرًا "flick" ، يتم تعيين boo إلى "False"، ثم يتم تعيين العنصر نفسه إلى boo.

لكن بما أن boo الآن "False" ، فسيتم إعادة تعيين boo إلى "True" في التكرار التالي، سيستمر هذا التناوب إلى أجل غير مسمى ، مما يؤدي إلى حلقة لانهائية.

2- عدم معالجة عناصر غير السلسلة، افترض الكود أن جميع العناصر في القائمة هي سلاسل، فإذا واجهت عنصرًا غير سلسلة (مثل رقم أو قائمة فرعية) ، فسيتسبب ذلك في حدوث خطأ TypeError.

لذا سيصبح الكود كالتالي وأضفت تعليقات لتفهم  ما يحدث:

def always_true(arr):
    """
    تعديل القائمة المعطاة `arr` لترجع دائمًا True عند فحصها لمعرفة صحتها.

    إذا كان عنصر في `arr` هو كلمة "flick" ، فإن الدالة تقلب السلوك
    لترجع دائمًا القيمة المنطقية المعاكسة. ومع ذلك ، لا تعدل القائمة الأصلية مباشرة
    لتجنب التأثيرات الجانبية المحتملة.

    Args:
        arr: القائمة التي تريد تعديلها.

    Returns:
        None. تعدل الدالة القائمة المُدخلة مباشرة.

    Raises:
        TypeError: إذا لم يكن عنصر في `arr` سلسلة.
    """

    truth_state = True

    for i in range(len(arr)):
        if arr[i] == 'flick':
            truth_state = not truth_state  # تبديل حالة الصدق
            arr[i] = 'flicked'  # تمييز العنصر لتجنب التكرار اللانهائي

        arr[i] = truth_state

    return None  # غير ضروري ، لكن يمكن الاحتفاظ به للتناسق

# مثال على الاستخدام
arr = ['a', 'b', 'flick', 'c', 'flick', 'd']
always_true(arr)
print(arr)  # إخراج: ['True', 'True', 'flicked', 'True', 'flicked', 'True']

# مثال آخر
arr2 = [0, 1, 'flick', True, False]
always_true(arr2)
print(arr2)  # إخراج: [True, True, 'flicked', True, False]

 

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

  • 0

ان السؤال المطلوب انه اذا كان العنصر يساوى flick فيجب ان تغير القيمة الحالة التى تقوم بارجاعها .

  • يخبرك انه فى بداية البرنامج يجب ان تقوم بارجاع true واذا ظهرت كلمة flick يجب ان تبدل true ب false
  • اذا ظهرت كلمة flick مرة اخرى يجب انت تبدل false ب true مرة اخرى .
  • ما تقوم به انت هو انك تبدل true ب false مرة واحدة فقط واذا ظهرت كلمة flick مرة ثانية لا تقوم بتبديل false ب true 
boo = True
for row in range(len(arr)):

    if 'flick' in arr[row]:
        boo = not  boo
        arr[row] = boo

    else:
        arr[row] = boo    

print(arr)     

لذلك نقوم باستخدام هذا السطر    boo = not  boo   

وهذا السطر يقوم بتبديل قيمة boo الحالية فان كانت boo تساوى True سيقوم بتبديلها ب False و العكس اذا كانت ب False فسيقوم بتبديلها ب True

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

  • 0
بتاريخ 5 دقائق مضت قال Mustafa Suleiman:
            truth_state = not truth_state  # تبديل حالة الصدق

هي كلمه Not بتعمل اي

 

بتاريخ 1 دقيقة مضت قال محمد عاطف11:

ان السؤال المطلوب انه اذا كان العنصر يساوى flick فيجب ان تغير القيمة الحالة التى تقوم بارجاعها .

  • يخبرك انه فى بداية البرنامج يجب ان تقوم بارجاع true واذا ظهرت كلمة flick يجب ان تبدل true ب false
  • اذا ظهرت كلمة flick مرة اخرى يجب انت تبدل false ب true مرة اخرى .
  • ما تقوم به انت هو انك تبدل true ب false مرة واحدة فقط واذا ظهرت كلمة flick مرة ثانية لا تقوم بتبديل false ب true 
boo = True
for row in range(len(arr)):

    if 'flick' in arr[row]:
        boo = not  boo
        arr[row] = boo

    else:
        arr[row] = boo    

print(arr)     

لذلك نقوم باستخدام هذا السطر    boo = not  boo   

وهذا السطر يقوم بتبديل قيمة boo الحالية فان كانت boo تساوى True سيقوم بتبديلها ب False و العكس اذا كانت ب False فسيقوم بتبديلها ب True

اه يعني كلمله not بتبدل صح كده

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

  • 0
بتاريخ الآن قال Ail Ahmed:

هي كلمه Not بتعمل اي

 

اه يعني كلمله not بتبدل صح كده

نعم بالفعل كلمة not تقوم بتبديل القيمة الحالية من True الى False والعكس

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

  • 0
بتاريخ 1 دقيقة مضت قال Ail Ahmed:

هي كلمه Not بتعمل اي

  • إذا كان التعبير صحيحًا، فإن Not تجعله خاطئًا.
  • إذا كان التعبير خاطئًا، فإن Not تجعله صحيحًا.

أي عكس القيمة المنطقية لتعبيرات Boolean.

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

  • 0

لقد قمت بحل هذه السؤال من قبل علي الموقع و المساله بتطلب منك كتابة دالة تعيد القيمة True لكل عنصر في قائمة معينة. ولكن، لو كان أحد العناصر هو الكلمة "flick"، فستقوم الدالة باعادة القيمة المعاكسة (False) .
 من المفترض الحل يكون بهذه الطريقه 
 

def always_true(xs):
  flick_seen = False
  for row in range(len(xs)):
    if xs[row] == "flick":
      flick_seen = True
    if flick_seen:
      xs[row] = "False"
    else:
      xs[row] = "True"
  return xs

# اختبار الدالة
arr = ["a", "b", "c", "flick", "d", "e"]
print(always_true(arr))

 

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

  • 0

شكرااا جدا والله علي المعلوما ده

 

شكرااا اوي 

بتاريخ الآن قال Taha Khalid:

لقد قمت بحل هذه السؤال من قبل علي الموقع و المساله بتطلب منك كتابة دالة تعيد القيمة True لكل عنصر في قائمة معينة. ولكن، لو كان أحد العناصر هو الكلمة "flick"، فستقوم الدالة باعادة القيمة المعاكسة (False) .
 من المفترض الحل يكون بهذه الطريقه 
 

def always_true(xs):
  flick_seen = False
  for row in range(len(xs)):
    if xs[row] == "flick":
      flick_seen = True
    if flick_seen:
      xs[row] = "False"
    else:
      xs[row] = "True"
  return xs

# اختبار الدالة
arr = ["a", "b", "c", "flick", "d", "e"]
print(always_true(arr))

 

تمام , شكراا جدا لحصرتك

انا بكتب الكود ده فا بيظهر خظاء علي الموقع مش عارف ليه مغ ان الكود صح

def flick_switch(lst):
    
    boo = 'True'
    
    for i in range(len(lst)):
        
        if lst[i] == 'flick':
            boo = not boo
            lst[i] = boo
            
        else:
            lst[i] = boo
            
    return lst        
            
arr = ['codewars' , 'flick' , 'code' , 'wars']

print(flick_switch(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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...