python-course-hebrew

# תרגול לבחינה בפייתון: לפי ההנחיות של תשפ"ז (שאלון 735911) > כל תרגיל כאן מתאים לנושא שמשרד החינוך ביקש להדגיש בבחינה. בכל נושא התרגילים מסודרים **מהקל לקשה**. לפני שמתחילים נושא, קראו את [הדוגמאות הפתורות](/python-course-hebrew/exam-prep/examples.html) שלו. פתרו על הנייר או במחשב, ואחר כך השוו ל[פתרונות](/python-course-hebrew/exam-prep/solutions.html). > > **רמות הקושי:** 🟢 בסיסי · 🟡 בינוני · 🔴 מתקדם --- ## 1. פירוק מספר שלם לספרות: `//`, `%` ו‑`**` עם בסיס 10 📘 לפני התרגילים: [הדוגמאות הפתורות לנושא הזה](/python-course-hebrew/exam-prep/examples.html#topic-1) ### 🟢 בסיסי #### תרגיל 1 🟢: סכום וכמות ספרות קלטו מספר שלם חיובי, והדפיסו כמה ספרות יש בו ומה סכום הספרות שלו. קלט לדוגמה: `50731` #### תרגיל 2 🟢: כמה פעמים מופיעה ספרה קלטו מספר שלם חיובי וספרה (0–9). הדפיסו כמה פעמים הספרה מופיעה במספר. קלט לדוגמה: `1707170` · `7` #### תרגיל 3 🟢: בלי לולאה: מספר תלת‑ספרתי קלטו מספר בן **3 ספרות** בדיוק. בלי לולאה, הדפיסו את ספרת המאות, העשרות והאחדות, ואת המספר שמתקבל כשמחליפים בין הספרה הראשונה לאחרונה (472 ← 274). קלט לדוגמה: `472` #### תרגיל 4 🟢: ספרת האחדות וספרת העשרות קלטו מספר שלם (לפחות שתי ספרות), והדפיסו את ספרת האחדות ואת ספרת העשרות שלו. קלט לדוגמה: `3786` ### 🟡 בינוני #### תרגיל 5 🟡: מספר הפוך ופלינדרום קלטו מספר שלם חיובי. בנו את המספר ההפוך (4725 ← 5274), והדפיסו אם המספר הוא **פלינדרום** (שווה להפוך שלו). קלט לדוגמה: `12321` #### תרגיל 6 🟡: הספרה במקום k קלטו מספר ו‑k. הדפיסו את הספרה שנמצאת במקום k **מימין** (k = 0 הוא האחדות), בעזרת `10 ** k`. בדקו: 905162 ו‑k = 3 ← 5. קלט לדוגמה: `905162` · `3` ### 🔴 מתקדם #### תרגיל 7 🔴: מספר מהספרות הזוגיות קלטו מספר שלם חיובי, ובנו ממנו מספר חדש שבו רק הספרות **הזוגיות**, באותו סדר (48725 ← 482). רמז: ספרה שנמצאת במקום k (מימין, מ‑0) שווה `digit * 10 ** k`. קלט לדוגמה: `48725` #### תרגיל 8 🔴: ספרות בסדר עולה קלטו מספר שלם חיובי, ובדקו אם הספרות שלו **עולות משמאל לימין** (כל ספרה גדולה מזו שלפניה), כמו 1359. הדפיסו "עולה" או "לא עולה". רמז: בפירוק מקבלים את הספרות **מימין**, ולכן כל ספרה צריכה להיות **קטנה** מזו שיצאה לפניה. קלט לדוגמה: `1359` #### תרגיל 9 🔴: כל ספרה פעמיים קלטו מספר שלם חיובי, ובנו מספר חדש שבו כל ספרה מופיעה **פעמיים** (472 ← 447722). השתמשו ב‑`10 ** place`. קלט לדוגמה: `472` --- ## 2. לולאות `while` ו‑`for`, לולאות מקוננות וזקיף 📘 לפני התרגילים: [הדוגמאות הפתורות לנושא הזה](/python-course-hebrew/exam-prep/examples.html#topic-2) ### 🟢 בסיסי #### תרגיל 10 🟢: המספרים הזוגיים עד 20 הדפיסו בשורה אחת את כל המספרים הזוגיים מ‑2 עד 20, בעזרת `for` ו‑`range` עם קפיצה. #### תרגיל 11 🟢: לוח הכפל של מספר קלטו מספר, והדפיסו את לוח הכפל שלו מ‑1 עד 10, בצורה `7 x 3 = 21`. קלט לדוגמה: `7` #### תרגיל 12 🟢: חיוביים ושליליים עד זקיף קלטו מספרים עד שמוקלד **0**. הדפיסו כמה מהם היו חיוביים וכמה שליליים. קלט לדוגמה: `5` · `-2` · `8` · `-7` · `3` · `0` ### 🟡 בינוני #### תרגיל 13 🟡: ציונים עד זקיף קלטו ציונים עד שמוקלד **‎-1** (ערך הזקיף, שלא נספר). הדפיסו כמה ציונים נקלטו, את הממוצע ואת הציון הגבוה ביותר. אם לא נקלט אף ציון, הדפיסו "אין ציונים". קלט לדוגמה: `80` · `95` · `70` · `-1` #### תרגיל 14 🟡: לולאה מקוננת: סכום ספרות 6 הדפיסו את כל המספרים מ‑1 עד 60 שסכום הספרות שלהם הוא **6**. (לולאת `for` על המספרים, ובתוכה לולאת `while` שמפרקת לספרות.) #### תרגיל 15 🟡: משולש מספרים קלטו n, והדפיסו n שורות: בשורה i (מ‑1) מופיעים המספרים 1 עד i. קלט לדוגמה: `4` ### 🔴 מתקדם #### תרגיל 16 🔴: זקיף ומקסימום קלטו מספרים חיוביים עד שמוקלד **0**. הדפיסו את המספר שסכום הספרות שלו הוא הגדול ביותר. קלט לדוגמה: `345` · `99` · `1000` · `0` #### תרגיל 17 🔴: מספרים ראשוניים עד 50 הדפיסו את כל המספרים הראשוניים מ‑2 עד 50 (מספר ראשוני מתחלק רק ב‑1 ובעצמו). לולאה חיצונית על המספרים, ולולאה פנימית שבודקת מחלקים. --- ## 3. רשימות: איברים סמוכים ורשימת מונים 📘 לפני התרגילים: [הדוגמאות הפתורות לנושא הזה](/python-course-hebrew/exam-prep/examples.html#topic-3) ### 🟢 בסיסי #### תרגיל 18 🟢: זוג שבו השני כפול נתונה הרשימה `nums = [3, 6, 2, 4, 8, 5, 10, 1]`. הדפיסו כל זוג **סמוך** שבו האיבר השני הוא פי 2 מהראשון, וכמה זוגות כאלה יש. #### תרגיל 19 🟢: מיקום וערך נתונה הרשימה `prices = [12, 7, 30, 18]`. הדפיסו לכל איבר את **המיקום** שלו ואת **הערך** שלו, ובסוף את **המיקום** של המחיר הגבוה ביותר. #### תרגיל 20 🟢: כמה פעמים השכן גדול יותר נתונה הרשימה `steps = [5, 8, 6, 9, 12, 4]`. ספרו בכמה זוגות סמוכים האיבר **השני גדול** מהראשון. ### 🟡 בינוני #### תרגיל 21 🟡: שלושה שווים ברצף כתבו קוד שבודק אם ברשימה `lst = [4, 1, 1, 7, 7, 7, 2]` יש **שלושה** איברים שווים ברצף, ומדפיס True או False. #### תרגיל 22 🟡: רשימת מונים: הספרה השכיחה קלטו מספר שלם חיובי. בעזרת רשימת מונים `counts = [0] * 10`, הדפיסו כמה פעמים מופיעה כל ספרה שמופיעה במספר, ואת הספרה השכיחה ביותר. קלט לדוגמה: `3803583` #### תרגיל 23 🟡: ציונים שאף אחד לא קיבל נתונים ציוני מבחן מ‑1 עד 10: `grades = [7, 9, 7, 10, 5, 9, 7, 8, 5, 10]`. בעזרת רשימת מונים, הדפיסו את הציונים (1–10) **שאף תלמיד לא קיבל**. #### תרגיל 24 🟡: מיקום מול ערך (שאלת מעקב) בלי להריץ: מה ידפיס הקוד? ```python lst = [3, 0, 2, 2, 1] print(lst[lst[0]]) print(lst[lst[4]]) for i in range(len(lst)): if lst[i] == i: print("שווה במקום", i) ``` ### 🔴 מתקדם #### תרגיל 25 🔴: הרצף העולה הארוך ביותר נתונה הרשימה `temps = [18, 20, 23, 21, 22, 25, 27, 28, 24]`. הדפיסו את האורך של הרצף **העולה** הארוך ביותר (כל איבר גדול מהקודם). #### תרגיל 26 🔴: כל מספר בדיוק פעם אחת נתונה רשימה באורך n. בדקו בעזרת רשימת מונים אם כל המספרים מ‑1 עד n מופיעים בה **בדיוק פעם אחת**. בדקו על `[3, 1, 4, 2]` ועל `[3, 1, 3, 2]`. --- ## 4. מילון (`dict`) 📘 לפני התרגילים: [הדוגמאות הפתורות לנושא הזה](/python-course-hebrew/exam-prep/examples.html#topic-4) ### 🟢 בסיסי #### תרגיל 27 🟢: ספר טלפונים צרו מילון ריק, והכניסו אליו שלושה אנשי קשר (שם ← טלפון). אחר כך: (1) הדפיסו את הטלפון של "נור" (גישה לפי מפתח). (2) בדקו אם "רון" נמצא במילון. (3) הדפיסו את כל השמות בעזרת `keys()`. #### תרגיל 28 🟢: מחירון צרו מילון `prices = {"עט": 4, "מחברת": 9, "מחק": 2}`. הדפיסו את המחיר של מחברת, ואחר כך את כל המוצרים והמחירים בעזרת `items()`. בסוף חשבו כמה עולה הקנייה `["עט", "עט", "מחברת"]`. ### 🟡 בינוני #### תרגיל 29 🟡: ספירת מילים קלטו משפט. בעזרת מילון שמתחיל **ריק**, ספרו כמה פעמים מופיעה כל מילה, והדפיסו כל מילה ומספר ההופעות שלה (מעבר עם `items()`). קלט לדוגמה: `כן לא כן אולי כן לא` #### תרגיל 30 🟡: אותיות שחוזרות קלטו מילה באנגלית. בעזרת מילון, ספרו כמה פעמים מופיעה כל אות, והדפיסו רק את האותיות שמופיעות **יותר מפעם אחת**. קלט לדוגמה: `banana` ### 🔴 מתקדם #### תרגיל 31 🔴: ממוצע לכל תלמיד נתונה רשימה של זוגות (שם, ציון): `[("דנה", 90), ("עומר", 60), ("דנה", 80), ("עומר", 100), ("לין", 75)]`. בנו מילון שבו כל שם הוא מפתח והערך הוא **רשימת** הציונים שלו, והדפיסו ממוצע לכל תלמיד. #### תרגיל 32 🔴: מילון הפוך נתון המילון `cities = {"נור": "ירכא", "אדם": "עכו", "מאיה": "ירכא", "רון": "חיפה"}` (שם ← עיר). בנו ממנו מילון חדש: עיר ← **רשימת** האנשים שגרים בה, והדפיסו אותו. --- ## 5. קבצים (`txt` בלבד): קריאה, כתיבה, `split` 📘 לפני התרגילים: [הדוגמאות הפתורות לנושא הזה](/python-course-hebrew/exam-prep/examples.html#topic-5) ### 🟢 בסיסי #### תרגיל 33 🟢: מספור שורות קראו את הקובץ `names.txt` והדפיסו כל שם עם מספר לפניו: `1. נור`. אל תשכחו `strip()`. הקובץ `names.txt`: ```text נור אדם מאיה ``` #### תרגיל 34 🟢: כתיבה ואחר כך קריאה כתבו לקובץ `squares.txt` את הריבועים של 1 עד 5, מספר בכל שורה (מצב `"w"`). אחר כך פתחו את הקובץ לקריאה והדפיסו את כל התוכן שלו עם `read()`. ### 🟡 בינוני #### תרגיל 35 🟡: הדוגמה מההנחיות: מי נכשל במתמטיקה בקובץ `grades.txt` כל שורה היא `שם#מקצוע#ציון`. הדפיסו את השמות של מי שנכשל **במתמטיקה** (ציון נמוך מ‑55). השתמשו ב‑`open`, ‏`list(file)`, ‏`split("#")`, ‏`int()` ו‑`close()`. הקובץ `grades.txt`: ```text דני#מתמטיקה#95 דנה#אנגלית#82 רון#מתמטיקה#45 שירה#היסטוריה#88 רון#אנגלית#61 דנה#מתמטיקה#52 ``` #### תרגיל 36 🟡: שורת כותרת עם readline בקובץ `stock.txt` השורה הראשונה היא כותרת, ואחריה שורות `מוצר,כמות`. קראו את הכותרת עם `readline()` והדפיסו אותה, ואז הדפיסו את המוצרים שהכמות שלהם **קטנה מ‑10**. הקובץ `stock.txt`: ```text מלאי סניף ירכא מחברת,25 עט,8 מחק,3 סרגל,14 ``` #### תרגיל 37 🟡: שורות, מילים ותווים קראו את כל הקובץ `story.txt` עם `read()`, והדפיסו כמה שורות, כמה מילים וכמה תווים יש בו. הקובץ `story.txt`: ```text היה היה מלך ולמלך היו שלוש בנות סוף ``` ### 🔴 מתקדם #### תרגיל 38 🔴: ממוצע לכל מקצוע, לקובץ חדש קראו את `grades.txt`, וחשבו בעזרת **מילון** את הממוצע בכל מקצוע. כתבו את התוצאות לקובץ `summary.txt` (מצב `"w"`), שורה לכל מקצוע בצורה `מקצוע:ממוצע`. אחר כך הוסיפו לסוף הקובץ (מצב `"a"`) את השורה `סוף`, והדפיסו את כל הקובץ. הקובץ `grades.txt`: ```text דני#מתמטיקה#95 דנה#אנגלית#82 רון#מתמטיקה#45 שירה#היסטוריה#88 רון#אנגלית#61 דנה#מתמטיקה#52 ``` #### תרגיל 39 🔴: המצטיין בכל מקצוע קראו את `grades.txt` (`שם#מקצוע#ציון`), ומצאו בעזרת מילון את **הציון הגבוה ביותר בכל מקצוע ואת בעליו**. הדפיסו שורה לכל מקצוע. הקובץ `grades.txt`: ```text דני#מתמטיקה#95 דנה#אנגלית#82 רון#מתמטיקה#45 שירה#היסטוריה#88 רון#אנגלית#61 דנה#מתמטיקה#52 ``` --- ## 6. מחרוזות: `len`, `split`, `strip`, `lower`/`upper`, `replace`, `find`, חיתוך 📘 לפני התרגילים: [הדוגמאות הפתורות לנושא הזה](/python-course-hebrew/exam-prep/examples.html#topic-6) ### 🟢 בסיסי #### תרגיל 40 🟢: ניקוי קלט קלטו שם משתמש באנגלית. נקו רווחים מההתחלה ומהסוף, הפכו לאותיות קטנות, והחליפו כל רווח באמצע בקו תחתון. הדפיסו את התוצאה ואת האורך שלה. קלט לדוגמה: ` Ahmad Kais ` #### תרגיל 41 🟢: אינדקסים וחיתוך (שאלת מעקב) בלי להריץ: מה ידפיס הקוד? ```python text = "Python" print(text[0], text[-1], text[1:4]) print(text.upper(), text.find("th"), text.find("x")) print(text.replace("P", "J"), len(text)) ``` #### תרגיל 42 🟢: ראשונה, אחרונה ואמצעית קלטו מילה באנגלית. הדפיסו את האורך שלה, את האות הראשונה, את האות האחרונה ואת האות **האמצעית** (`word[len(word) // 2]`). קלט לדוגמה: `python` ### 🟡 בינוני #### תרגיל 43 🟡: find וחיתוך: כתובת דוא"ל לכל כתובת ברשימה `["dana@gmail.com", "omer.walla.co.il", "lin@atid.org"]`: אם אין בה `@` (‏`find` מחזירה ‎-1), הדפיסו "כתובת לא תקינה". אחרת הדפיסו את שם המשתמש (מה שלפני ה‑`@`) ואת הדומיין (מה שאחריו), בעזרת חיתוך. #### תרגיל 44 🟡: ספירת תנועות קלטו משפט באנגלית, וספרו כמה תנועות (`a e i o u`) יש בו, **גם** באותיות גדולות. רמז: `lower()` קודם. קלט לדוגמה: `I Love Python And SQL` ### 🔴 מתקדם #### תרגיל 45 🔴: משפט פלינדרום קלטו משפט באנגלית, ובדקו אם הוא **פלינדרום** כשמתעלמים מרווחים ומאותיות גדולות ("Never odd or even"). השתמשו ב‑`replace`, ‏`lower` ובלולאה שמשווה את התו במקום i לתו במקום `len - 1 - i`. קלט לדוגמה: `Never odd or even` #### תרגיל 46 🔴: סכום מספרים מתוך מחרוזת נתונה המחרוזת `"12,7,30, 5 ,8"`. פרקו אותה לפי פסיק, נקו רווחים מכל חלק, הפכו למספרים והדפיסו את הסכום ואת המספר הגדול ביותר.