לדלג לתוכן

פייתון/פייתון גרסה 3/אמת בלולאה

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

צרו את התכנית הבאה:

נקודד הסטה מעגלית (Cyclic code). הסטה מעגלית או ציקלית היא פונקציה הבודקת האם רשימה אחת זהה לרשימה אחת.

נעזר בדומה, תהי

בכל בדיקה מסיטה מעגלית הפונקציה את הרשימה הנבדקת במיקום אחד, כלומר

במידה ובאחת ההסטות שתי הרשימות שוות תחזיר הפונקציה אמת.

קידוד

[עריכה]

האלגוריתם אותו בנינו מבוסס על דרך השלילה:

  1. אם אורכי הרשימות אינו זהה - החזר שקר.
  2. בצע הזזה של הרשימה השנייה פעמים כאשר
    • השווה את כל אחד מהמיקומים של אל המיקום בפונקציה השנייה לאחר ביצוע ההסטה.
      • אם איבר במיקום אחד אינו זהה לשני - הפסק את הבדיקה והסט שוב את הרשימה
      • אחרת, הרשימות זהות ולכן תתבצע ההתניה המותנת (מדוע? ראה טווח של ביצוע מותנה).
def cyclic(lst1, lst2):
    '''
    a cyclicfunction
    :param lst1: a list
    :param lst2: a lsit
    :return: boolean
    '''
    if len(lst1) != len(lst2):
        return False
    else:  # same len
        if lst1 == lst2:         # compare the two list without moving:
            return True
        else: # shift lst2

            #first loop
            for shift in range(len(lst1)): #creates shift lists

                true_in_loop = True  # if lst1!=lst2 in each one of the shift-runings change the variable to False

                #second loop:
                for spot in range(len(lst1)): # checks if spot_n in lst1 equals to (spot + shift)/(lst1) in lst2:
                    if lst1[spot] != lst2[(spot + shift) % (len(lst1))]:
                        true_in_loop = False
                        break
                            # if one value is different - break the second loop and go to the next shift-list.
                            # else, go to conditional operation 
                if true_in_loop:  # if one of the shift-runings  return true than lst2 is cyclic of lst1
                    return True