פייתון/פייתון גרסה 3/אמת בלולאה
מראה
< פייתון | פייתון גרסה 3
צרו את התכנית הבאה:
נקודד הסטה מעגלית (Cyclic code). הסטה מעגלית או ציקלית היא פונקציה הבודקת האם רשימה אחת זהה לרשימה אחת.
נעזר בדומה, תהי
בכל בדיקה מסיטה מעגלית הפונקציה את הרשימה הנבדקת במיקום אחד, כלומר
במידה ובאחת ההסטות שתי הרשימות שוות תחזיר הפונקציה אמת.
קידוד
[עריכה]האלגוריתם אותו בנינו מבוסס על דרך השלילה:
- אם אורכי הרשימות אינו זהה - החזר שקר.
- בצע הזזה של הרשימה השנייה פעמים כאשר
- השווה את כל אחד מהמיקומים של אל המיקום בפונקציה השנייה לאחר ביצוע ההסטה.
- אם איבר במיקום אחד אינו זהה לשני - הפסק את הבדיקה והסט שוב את הרשימה
- אחרת, הרשימות זהות ולכן תתבצע ההתניה המותנת (מדוע? ראה טווח של ביצוע מותנה).
- השווה את כל אחד מהמיקומים של אל המיקום בפונקציה השנייה לאחר ביצוע ההסטה.
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