5 הדרכים הטובות ביותר לבדוק 0s עוקבות במספר בסיסים שונים באמצעות Python – היו בצד הנכון של השינוי

פרסומת
MAGNEZIX מגנזיקס


💡 ניסוח בעיה: מאמר זה נועד להתמודד עם האתגר של זיהוי אפסים עוקבים בתוך מספרים המבוטאים בכל בסיס נתון. לדוגמה, בהינתן המספר 1002 בבסיס 3, הפלט הרצוי יהיה Trueשכן למספר, כאשר יומר לבסיס 3, יהיו אפסים עוקבים (כלומר, 102010 בבסיס 3).

פרסומת

שיטה 1: המרה ואיטרציה

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

הנה דוגמה:

def has_consecutive_zeros(number, base):
    converted_number=""
    while number > 0:
        converted_number = str(number % base) + converted_number
        number //= base
    return '00' in converted_number

# Example usage:
print(has_consecutive_zeros(1002, 3))

תְפוּקָה: True

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

שיטה 2: שימוש בהמרה מובנית

במקום המרה ידנית, הפונקציה המובנית של Python format() יכול לשמש להמרה בסיסית. שיטה זו מפחיתה את פוטנציאל הטעות בתהליך ההמרה והיא תמציתית.

הנה דוגמה:

def has_consecutive_zeros(number, base):
    return '00' in format(number, 'b' if base == 2 else 'o' if base == 8 else 'x' if base == 16 else '')

# Example usage:
print(has_consecutive_zeros(1002, 3))

תְפוּקָה: True

ה has_consecutive_zeros() הפונקציה ממנפת את זה של Python format() פונקציה עבור המרות בסיס ולאחר מכן בודקת אפסים עוקבים. שים לב שעבור בסיסים שאינם בינאריים, אוקטליים והקסדצימליים, נדרש מיפוי מותאם אישית.

שיטה 3: ביטויים רגולריים

ביטויים רגולריים הם כלי רב עוצמה להתאמת דפוסים. שיטה זו משתמשת בפייתון re מודול לחיפוש אפסים עוקבים בייצוג המחרוזת של המספר. זה יעיל ותמציתי לאיתור דפוסים.

הנה דוגמה:

import re

def has_consecutive_zeros(number, base):
    return re.search('00', format(number, 'b' if base == 2 else 'o' if base == 8 else 'x' if base == 16 else ''))

# Example usage:
print(has_consecutive_zeros(1002, 3) is not None)

תְפוּקָה: True

הפונקציה has_consecutive_zeros() שימושים re.search() למצוא אפסים עוקבים במחרוזת. הוא מחזיר אובייקט התאמה אם הוא מוצא אפסים עוקבים ו None אחרת.

שיטה 4: פעולות Bitwise

שיטה זו ישימה לבדיקת אפסים עוקבים בבינארי. הוא משתמש בהזזה סיביות ובפעולות AND כדי לזהות אם יש אפס סיביות עוקבות במספר. מושלם עבור פעולות ברמת סיביות על מספרים בינאריים.

הנה דוגמה:

def has_consecutive_zeros_binary(number):
    return (number & (number >> 1)) == 0

# Example usage (binary equivalent of 1002 in base 3 is 102010, which is 34 in decimal):
print(has_consecutive_zeros_binary(34))

תְפוּקָה: False

ה has_consecutive_zeros_binary() הפונקציה פועלת על מספרים בינאריים כדי לזהות אפסים עוקבים. הוא מעביר את הסיביות של מספר אחד ימינה ומבצע בשיטת סיביות AND עם המספר המקורי. אם כל הביטים הם אפסים, קיימים אפסים עוקבים.

שיטת בונוס One Liner 5: הבנת רשימה והצטרפות

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

הנה דוגמה:

has_consecutive_zeros = lambda num, base: '00' in ''.join([str((num // base**i) % base) for i in range(num.bit_length() // base.bit_length() + 1)][::-1])

# Example usage:
print(has_consecutive_zeros(1002, 3))

תְפוּקָה: True

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

סיכום/דיון

  • שיטה 1: המרה ואיטרציה. זה מובן בקלות. עם זאת, זה לא הכי יעיל, במיוחד עבור מספרים גדולים ובסיסים לא סטנדרטיים.
  • שיטה 2: שימוש בהמרה מובנית. אלגנטי יותר משיטה 1 ומשתמש בפונקציות מובנות של Python. זה מוגבל לבסיסים סטנדרטיים אלא אם כן מותאם אישית יותר.
  • שיטה 3: ביטויים רגולריים. עוצמתי ותמציתי להתאמת דפוסים. יכול להיות מוגזם עבור דפוסים פשוטים ופחות קריא למי שלא מכיר את הרקס.
  • שיטה 4: פעולות Bitwise. יעיל במיוחד עבור מספרים בינאריים. לא ישים ישירות למספרים בבסיסים שאינם בינאריים.
  • שיטת בונוס 5: One-Liner. הוא תמציתי ופיתוני אך יכול להיות פחות קריא וקשה יותר לנפות באגים עבור מצבים מורכבים.



קישור לכתבת המקור – 2024-03-07 22:24:34

Facebook
Twitter
LinkedIn
Telegram
WhatsApp
Email
פרסומת
MAGNEZIX מגנזיקס

עוד מתחומי האתר