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

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

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

קובייה אלקטרונית — מודול random

מה בשיעור?

  • מספרים פסאודו-אקראיים
  • זרע אקראיות ולמה בלעדיו הכול חוזר
  • רעש מפין צף — פעם בעיה, פעם פתרון
  • randint כולל את שני הגבולות — בניגוד ל-Arduino

מה נלמד כאן

  • מספרים אקראיים ומודול random
  • זרע אקראיות
  • קובייה אלקטרונית

קובייה בלי קובייה

קובייה אלקטרונית

לוחצים, ומספר בין 1 ל-6 מופיע על התצוגה.


הידע שצריך

1. שלושת השלבים

הדק (לחיצה) → הגרלהתצוגה.

2. האמת על אקראיות במחשב

⚠️ מחשב לא יודע לייצר אקראיות אמיתית. מה שהוא מייצר הוא סדרה שנראית אקראית — תוצאה של חישוב. אלה מספרים פסאודו-אקראיים.

3. זרע האקראיות

נקודת ההתחלה נקבעת על ידי זרע (seed). אם הזרע זהה בכל הפעלה — הסדרה זהה. קובייה כזו חסרת ערך.

הפתרון — והרעיון היפה של השיעור:

from machine import ADC, Pin
import random

adc = ADC(Pin(34))       # פין שלא מחובר לכלום
noise = adc.read()
random.seed(noise)

קוראים פין אנלוגי שלא מחובר לשום דבר.

פין צף כזה קולט רעש חשמלי אקראיבדיוק אותו "זבל" שבשיעור 4 היה בעיה שפתרנו עם Pull-Up. כאן הוא בדיוק מה שאנחנו רוצים.

אותה תופעה פיזיקלית — פעם בעיה, פעם פתרון.

4. random.randint

random_int = random.randint(1, 6)

⚠️ שימו לב להבדל מ-Arduino: שם random(1, 7) החזירה 1 עד 6 (הגבול העליון לא נכלל). בפייתון randint(1, 6) מחזירה 1 עד 6 — שני הגבולות נכללים.

זו טעות קלאסית למי שעובר בין השפות.


הניסוי

המטרה: לחיצה מגרילה 1 עד 6 ומציגה.

רשימת רכיבים

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

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

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

החיבור

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


הקוד

from machine import Pin, ADC
import random
import time

pin_list = [5, 16, 17, 18, 19, 23, 12, 13]
pins = [Pin(p, Pin.OUT) for p in pin_list]

number_list = [
    [1,1,1,1,1,1,0,0], [0,1,1,0,0,0,0,0], [1,1,0,1,1,0,1,0],
    [1,1,1,1,0,0,1,0], [0,1,1,0,0,1,1,0], [1,0,1,1,0,1,1,0],
    [1,0,1,1,1,1,1,0], [1,1,1,0,0,0,0,0], [1,1,1,1,1,1,1,0],
    [1,1,1,1,0,1,1,0],
]

button = Pin(14, Pin.IN)

# זרע מרעש של פין לא מחובר
adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB)
random.seed(adc.read())

def display_number(num):
    if num < 0 or num > 9:
        return
    for i in range(8):
        pins[i].value(number_list[num][i])

while True:
    if button.value() == 0:
        time.sleep(0.2)
        while button.value() == 0:
            pass
        display_number(random.randint(1, 6))

מה אמור לקרות

הקובייה מציגה


נסו בעצמכם

  • הסירו את random.seed והפעילו מחדש כמה פעמים. אותם מספרים? עכשיו הבנתם.
  • הוסיפו אנימציית הטלה: ספרות מתחלפות מהר לפני שהתוצאה נעצרת.
  • ספרו 100 הטלות. כמה פעמים יצא כל מספר?
  • הוסיפו זמזם בכל הטלה.
  • ב-Shell: import random ואז random.randint(1,6) כמה פעמים.

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

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

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