דלגו לתוכן המרכזי
KitLab
שיעור קודם
תצוגת שבעה מקטעים — רשימות והבנת רשימה· 17 / 41
תצוגת שבעה מקטעים — רשימות והבנת רשימה
🎬

הסרטון בדרך אלינו

בינתיים — התמלול המלא של השיעור מחכה לכם למטה

תצוגת שבעה מקטעים — רשימות והבנת רשימה

מה בשיעור?

  • שמונה מקטעים וטבלת הספרות
  • רשימה של רשימות ושני אינדקסים
  • def — פונקציה בלי סוגי החזרה
  • הזחה במקום סוגריים מסולסלים
  • הבנת רשימה ליצירת שמונה אובייקטים

מה נלמד כאן

  • תצוגת שבעה מקטעים
  • טבלת קודי הספרות
  • רשימה של רשימות ופונקציה בפייתון

הספרות שבכל מקום

תצוגת מקטעים

שעונים, מעליות, משקלים — בכל מקום שצריך מספר בלי מסך.


הידע שצריך

1. המבנה

מבנה התצוגה

שמונה נוריות בצורת הספרה 8: שבעה מקטעים (a-g) ונקודה עשרונית (dp).

כל מקטע הוא נורית רגילה. צירופים שונים = ספרות ואותיות. להצגת 5: מדליקים a, f, g, c, d.

2. טבלת הקודים

חיבור התצוגה

הספרה a b c d e f g dp
0 1 1 1 1 1 1 0 0
1 0 1 1 0 0 0 0 0
2 1 1 0 1 1 0 1 0
3 1 1 1 1 0 0 1 0
4 0 1 1 0 0 1 1 0
5 1 0 1 1 0 1 1 0
6 1 0 1 1 1 1 1 0
7 1 1 1 0 0 0 0 0
8 1 1 1 1 1 1 1 0
9 1 1 1 1 0 1 1 0

3. רשימה של רשימות

בפייתון, טבלה היא פשוט רשימה שכל איבר שלה הוא רשימה:

number_list = [
    [1, 1, 1, 1, 1, 1, 0, 0],   # 0
    [0, 1, 1, 0, 0, 0, 0, 0],   # 1
    ...
]

ניגשים עם שני אינדקסים:

number_list[5][0]   # המקטע a של הספרה 5 → 1

הראשון הוא השורה (הספרה), השני העמודה (המקטע).

בפייתון זה הרבה יותר טבעי מ-C: אין צורך להצהיר int number_array[][8] עם גדלים — פשוט רושמים רשימות.

4. פונקציה

def display_number(num):
    for i in range(8):
        pins[i].value(number_list[num][i])

def מגדירה פונקציה. במקום שמונה פקודות בכל פעם — display_number(7).

בפייתון אין void, אין סוגי החזרה, ואין סוגריים מסולסלים. ההזחה היא המבנה — מה שמוזח פנימה שייך לפונקציה.


הניסוי

המטרה: להציג 0 עד 9, כל אחת חצי שנייה.

רשימת רכיבים

הרכיב כמות
לוח ESP32 1
לוח ניסוי 400 נקודות 1
תצוגת שבעה מקטעים 1
נגד 220Ω 8

שמונה נגדים — אחד לכל מקטע.

התרשים החשמלי

התרשים החשמלי

החיבור

חיבור הרכיבים

זה החיבור הצפוף ביותר שבניתם. קחו את הזמן.


הקוד

from machine import Pin
import time

pin_a = 5;  pin_b = 16; pin_c = 17; pin_d = 18
pin_e = 19; pin_f = 23; pin_g = 12; pin_dp = 13
pin_list = [pin_a, pin_b, pin_c, pin_d, pin_e, pin_f, pin_g, pin_dp]

number_list = [
    [1, 1, 1, 1, 1, 1, 0, 0],   # 0
    [0, 1, 1, 0, 0, 0, 0, 0],   # 1
    [1, 1, 0, 1, 1, 0, 1, 0],   # 2
    [1, 1, 1, 1, 0, 0, 1, 0],   # 3
    [0, 1, 1, 0, 0, 1, 1, 0],   # 4
    [1, 0, 1, 1, 0, 1, 1, 0],   # 5
    [1, 0, 1, 1, 1, 1, 1, 0],   # 6
    [1, 1, 1, 0, 0, 0, 0, 0],   # 7
    [1, 1, 1, 1, 1, 1, 1, 0],   # 8
    [1, 1, 1, 1, 0, 1, 1, 0],   # 9
]

# יוצרים אובייקט Pin לכל מקטע — בשורה אחת
pins = [Pin(p, Pin.OUT) for p in pin_list]

def display_number(num):
    for i in range(8):
        pins[i].value(number_list[num][i])

while True:
    for n in range(10):
        display_number(n)
        time.sleep(0.5)

שימו לב לשורה הזו:

pins = [Pin(p, Pin.OUT) for p in pin_list]

זו הבנת רשימה (list comprehension) — תכונה של פייתון שיוצרת רשימה שלמה בשורה אחת. היא יוצרת שמונה אובייקטי Pin, אחד לכל מספר ברשימה.

ב-C היה צריך לולאה של ארבע שורות. כאן שורה אחת שנקראת כמעט כמו משפט באנגלית.

מה אמור לקרות

התצוגה סופרת


נסו בעצמכם

  • הוסיפו לטבלה את האות A (a,b,c,e,f,g דולקים).
  • הדליקו את הנקודה: שנו את העמודה האחרונה ל-1.
  • ספרו לאחור: range(9, -1, -1).
  • שלבו עם שיעור 4: לחיצה מקדמת את הספרה.
  • נסו לכתוב את שורת ה-pins בלולאה רגילה. כמה שורות יצאו?

🧰 הרכיבים לשיעור הזה

רוצים את חומרי הקורס והעדכונים?

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