# תרגול לבחינה בפייתון: לפי ההנחיות של תשפ"ז (שאלון 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"`. פרקו אותה לפי פסיק, נקו רווחים מכל חלק, הפכו למספרים והדפיסו את הסכום ואת המספר הגדול ביותר.