numbers = [1, 2]

numbers = numbers + [3, 4]
print(numbers)

numbers = numbers * 2
print(numbers)

"""
Explanation: <img src="images/logo.jpg" style="display: block; margin-left: auto; margin-right: auto;" alt="לוגו של מיזם לימוד הפייתון. נחש מצויר בצבעי צהוב וכחול, הנע בין האותיות של שם הקורס: לומדים פייתון. הסלוגן המופיע מעל לשם הקורס הוא מיזם חינמי ללימוד תכנות בעברית.">
<span style="text-align: right; direction: rtl; float: right;">פעולות על רשימות</span>
<span style="text-align: right; direction: rtl; float: right; clear: both;">הקדמה</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
    עד כה למדנו שישנם שני אופרטורים חשבוניים שעובדים על רשימות: חיבור וכפל.<br>
    חיבור משרשר רשימה אחת לאחרת, וכפל משרשר רשימה לעצמה כמה פעמים.<br>
    ניזכר בדוגמאות:
</p>
End of explanation
"""


numbers == [1, 2, 3, 4]

1 in numbers

[1, 2] in numbers

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
    למדנו גם שאפשר להשוות בין רשימות בעזרת אופרטורי השוואה, שעליהם למדנו בשיעור על ביטויים בוליאניים.
</p>
End of explanation
"""


print(numbers)
print("Flip the order: " + str(numbers[::-1]))
print("Only first 4 items: " + str(numbers[:4]))
print("Only first 4 items, in reversed order:: " + str(numbers[3::-1]))

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
    השבוע כבר הספקנו ללמוד על חיתוכים (Slicing), כך שיש לנו כבר ידע רב באשר לשימוש ברשימות.
</p>
End of explanation
"""


animals = ['pig', 'shark', 'lion']

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
    למרות כל הידע המועיל שצברנו עד כה, טרם נגענו בפעולות השייכות לנתונים מסוג רשימה.<br>
    הפעולות האלו יתווספו לארגז הכלים שלנו, יקלו על כתיבת הקוד ויעשו אותו קריא יותר.
</p>

<span style="text-align: right; direction: rtl; float: right; clear: both;">פעולות על רשימה</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
נגדיר רשימה שתשמש אותנו לדוגמאות:
</p>
End of explanation
"""


animals.append('duck')
print(animals)

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
במהלך הרצת הדוגמאות נשים לב ש<mark>פעולות על הרשימה משפיעות ישירות על הרשימה עצמה</mark>.<br>
זה אומר שלא נצטרך להשתמש בהשמה כדי לערוך את הרשימה שעליה אנחנו עובדים.
</p>

<span style="text-align: right; direction: rtl; float: right; clear: both;">הוספת איבר</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
רשימה היא סוג נתונים נוח לשימוש, בין היתר כיוון שניתן להוסיף לה כמה איברים שנרצה.<br>
נוכל להוסיף איבר לסוף הרשימה באמצעות הפעולה <code>append</code>:
</p>
End of explanation
"""


animals = animals + ['duck']
print(animals)

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
הפעולה הזו תשיג תוצאה דומה לקוד שכתבנו עד היום בדרך טיפה פחות אלגנטית:
</p>
End of explanation
"""


animals.append(['duck', 'zebra'])
print(animals)

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
שימו לב שבניגוד לשורה שמופיעה למעלה, <code>append</code> מאפשרת להוסיף בכל פעם איבר אחד בלבד.<br>
ניסיון להעביר לפעולה <code>append</code> רשימה, נניח, יוסיף את הרשימה המשנית כולה כאיבר אחד בסוף הרשימה הראשית:
</p>
End of explanation
"""


animals.pop()
print(animals)

"""
Explanation: <div class="align-center" style="display: flex; text-align: right; direction: rtl; clear: both;">
    <div style="display: flex; width: 10%; float: right; clear: both;">
        <img src="images/exercise.svg" style="height: 50px !important;" alt="תרגול"> 
    </div>
    <div style="width: 90%">
        <p style="text-align: right; direction: rtl; float: right; clear: both;">
            כתבו פונקציה שמקבלת מספר, ומחזירה רשימה של כל המספרים החיוביים הזוגיים עד אותו מספר.
        </p>
    </div>
</div>

<span style="text-align: right; direction: rtl; float: right; clear: both;">הסרת איבר</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
נוכל להסיר איבר <em>מסוף הרשימה</em> באמצעות קריאה לפעולה <code>pop</code>:
</p>
End of explanation
"""


animals = animals[:-1]
print(animals)

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
הפעולה הזו תשיג תוצאה דומה לקוד שכתבנו עד היום בצורה המסורבלת הבאה:
</p>
End of explanation
"""


last_animal = animals.pop()
print(last_animal)
print(animals)

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
הפעולה <code>pop</code> מחזירה את הערך שהוציאה, כך שניתן לשמור אותו בצד:
</p>
End of explanation
"""


first_animal = animals.pop(0)
print(first_animal)
print(animals)

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
הפעולה גם מאפשרת לנו לבחור את המקום שממנו אנחנו מעוניינים להוציא את הערך.<br>
נעשה זאת בעזרת העברת ארגומנט עם מיקום הערך שאנחנו רוצים להוציא מהרשימה:
</p>
End of explanation
"""


animals_to_add = ['duck', 'pig', 'zebra']
animals.extend(animals_to_add)
print(animals)

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
כדי להסיר יותר מאיבר אחד, ייתכן שעדיין תעדיפו להשתמש בחיתוך רשימות.
</p>

<div class="align-center" style="display: flex; text-align: right; direction: rtl; clear: both;">
    <div style="display: flex; width: 10%; float: right; clear: both;">
        <img src="images/exercise.svg" style="height: 50px !important;" alt="תרגול"> 
    </div>
    <div style="width: 90%">
        <p style="text-align: right; direction: rtl; float: right; clear: both;">
            כתבו פונקציה שמקבלת רשימה, ומחזירה רשימה בסדר איברים הפוך.<br>
            השתמשו בפעולה <code>pop</code>.<br>
            לדוגמה: אם תועבר לפונקציה הרשימה <code dir="ltr" style="direction: ltr">[3, 2, 1]</code>, הפונקציה תחזיר <code dir="ltr" style="direction: ltr">[1, 2, 3]</code>.
        </p>
    </div>
</div>

<span style="text-align: right; direction: rtl; float: right; clear: both;">הוספה של כמה איברים</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
נוכל להוסיף יותר מאיבר אחד בשימוש יחיד בפעולה <code>extend</code>:
</p>
End of explanation
"""


animals_to_add = ['duck', 'pig', 'zebra']
animals = animals + animals_to_add
print(animals)

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
במבט ראשון, הפעולה תשיג תוצאה דומה לשרשור רשימות:
</p>
End of explanation
"""


string_numbers = ['1', '2', '3', '4', '5']
string_numbers.extend('6789')  # string as argument
string_numbers.extend(['10', '11'])  # list as argument
print(string_numbers)

"""
Explanation: <p style="text-align: right; direction: rtl; float: right; clear: both;">
אבל אחד היתרונות המובהקים של <code>extend</code> הוא שניתן להעביר לה כארגומנט כל iterable שהוא.<br>
הפעולה <code>extend</code> תפרק את ה־iterable ותוסיף כל איבר בנפרד לרשימה המקורית: 
</p>
End of explanation
"""


print(animals)
zebra_counter = animals.count('zebra')
print(f"I've found {zebra_counter} zebras in your zoo!")

"""
Explanation: <div class="align-center" style="display: flex; text-align: right; direction: rtl; clear: both;">
    <div style="display: flex; width: 10%; float: right; clear: both;">
        <img src="images/exercise.svg" style="height: 50px !important;" alt="תרגול"> 
    </div>
    <div style="width: 90%">
        <p style="text-align: right; direction: rtl; float: right; clear: both;">
            כתבו פונקציה שמקבלת רשימה, ומחזירה רשימה המכילה את הרשימה המקורית, ומייד אחריה את אותה רשימה בסדר הפוך.<br>
            לדוגמה: עבור הרשימה <code dir="ltr" style="direction: ltr">[1, 2, 3]</code> תוחזר הרשימה: <code dir="ltr" style="direction: ltr">[1, 2, 3, 3, 2, 1]</code>
        </p>
    </div>
</div>

<span style="text-align: right; direction: rtl; float: right; clear: both;">ספירת איברים</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
כאן לא תמצאו הפתעות מיוחדות. הפעולה <code>count</code> מחזירה את מספר האיברים ברשימה, שזהים לאיבר שהעברתם לה כארגומנט.<br>
נשמע לכם מוכר? נכון! למחרוזות יש פעולה עם שם זהה שעושה בדיוק אותו דבר.
</p>
End of explanation
"""


print(animals)
zebra_finder = animals.index('zebra')
print(f"The first zebra in your zoo hides in park number {zebra_finder}")

"""
Explanation: <span style="text-align: right; direction: rtl; float: right; clear: both;">מציאת איבר</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
גם הפעולה הזו אמורה להישמע לכם מוכרת.<br>
הפעולה <code>index</code> מוצאת את המופע הראשון של האיבר שהעברתם לה כארגומנט.<br>
כן, גם הפעם למחרוזות יש פעולה באותו שם, שעושה בדיוק אותו דבר.
</p>
End of explanation
"""


print(f"Animals: {animals}")
while 'pig' in animals:
    animals.remove('pig')
print(f"Kosher Zoo: {animals}")

"""
Explanation: <div class="align-center" style="display: flex; text-align: right; direction: rtl;">
    <div style="display: flex; width: 10%; float: right; ">
        <img src="images/warning.png" style="height: 50px !important;" alt="אזהרה!"> 
    </div>
    <div style="width: 90%">
        <p style="text-align: right; direction: rtl;">
            כמו בפעולת <code>index</code> על מחרוזות, גם כאן הפעולה תזרוק שגיאה אם הערך לא נמצא.
        </p>
    </div>
</div>

<div class="align-center" style="display: flex; text-align: right; direction: rtl; clear: both;">
    <div style="display: flex; width: 10%; float: right; clear: both;">
        <img src="images/exercise.svg" style="height: 50px !important;" alt="תרגול"> 
    </div>
    <div style="width: 90%">
        <p style="text-align: right; direction: rtl; float: right; clear: both;">
            כתבו פונקציה שמקבלת רשימה, ומחזירה את מיקום המופע <em>האחרון</em> של האיבר הראשון ברשימה.<br>
            לדוגמה, עבור הרשימה <code dir="ltr" style="direction: ltr">[1, 2, 3, 5, 1, 2]</code> החזירו 4, כיוון ש־1 מופיע פעם אחרונה במקום 4 ברשימה.
        </p>
    </div>
</div>

<span style="text-align: right; direction: rtl; float: right; clear: both;">מחיקת איבר (שוב?)</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
הפעם נשתמש בפעולה <code>remove</code>, שבניגוד לפעולה <code>pop</code> מוחקת איבר לפי הערך שלו ולא לפי המיקום שלו.<br>
נשים לב שהפעולה תמחק את האיבר הראשון השווה לערך שהועבר כארגומנט, ולא את כל המופעים של אותו ערך.
</p>
End of explanation
"""


print(animals)
animals.sort()
print(animals)

strange_list = [1, 2, 3, 'dag maluah']
strange_list.sort()

"""
Explanation: <div class="align-center" style="display: flex; text-align: right; direction: rtl; clear: both;">
    <div style="display: flex; width: 10%; float: right; clear: both;">
        <img src="images/exercise.svg" style="height: 50px !important;" alt="תרגול"> 
    </div>
    <div style="width: 90%">
        <p style="text-align: right; direction: rtl; float: right; clear: both;">
            קבלו פונקציה שמקבלת רשימה של חיות, ומחזירה רשימה שבה אין מופעים של החיות camel, rabbit ו־pig.<br>
            לדוגמה, עבור הרשימה: <code dir="ltr" style="direction: ltr">['camel', 'camel', 'dove', 'pig', 'camel']</code> תוחזר הרשימה: <code dir="ltr" style="direction: ltr">['dove']</code>
        </p>
    </div>
</div>

<span style="text-align: right; direction: rtl; float: right; clear: both;">סידור רשימה</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
אחת הפעולות הנוחות ביותר שאפשר לבצע על רשימה היא <code>sort</code>, שמסדרת לנו את האיברים ברשימה.<br>
אם האיברים הם מחרוזות, הרשימה תסודר בסדר לקסיקוגרפי (אלפביתי).<br>
אם האיברים ברשימה הם מספרים (שלמים, עשרוניים או גם וגם), הרשימה תסודר מתמטית מהקטן לגדול.<br>
אם הרשימה מורכבת מסוגים שונים של איברים שאין ביניהם הגדרת שוויון ברורה (כמו מספרים ומחרוזות), פעולת הסידור תיכשל ותזרוק שגיאה.
</p>
End of explanation
"""


def get_minimum(numbers):
    numbers = numbers.sort()
    return numbers[-1]

numbers = '8, 9, 10, 11, 12'.split(', ')
minimum_number = get_minimum(numbers)
print(f"The minimum number is {minimum_number}")

"""
Explanation: <div class="align-center" style="display: flex; text-align: right; direction: rtl;">
    <div style="display: flex; width: 10%; float: right; ">
        <img src="images/warning.png" style="height: 50px !important;" alt="אזהרה!"> 
    </div>
    <div style="width: 90%">
        <p style="text-align: right; direction: rtl;">
            טעות נפוצה היא השמת התוצאה של <code>sort</code> חזרה למשתנה.<br>
            כיוון שהפעולה <code>sort</code> משנה את מיקום האיברים בתוך הרשימה ולא מחזירה ערך, השמה חזרה למשתנה תמחק את ערכו.
        </p>
    </div>
</div>

<div class="align-center" style="display: flex; text-align: right; direction: rtl; clear: both;">
    <div style="display: flex; width: 10%; float: right; clear: both;">
        <img src="images/exercise.svg" style="height: 50px !important;" alt="תרגול"> 
    </div>
    <div style="width: 90%">
        <p style="text-align: right; direction: rtl; float: right; clear: both;">
        <strong>תרגול</strong>:
            קבלו מהמשתמש 10 מספרים. מצאו את הערך השלישי הגדול ביותר.<br>
            לדוגמה, עבור הקלט הבא: <code dir="ltr" style="direction: ltr;">5, 1, 6, 2, 3, 4, 8, 7, 10, 9</code>, החזירו 8.
        </p>
    </div>
</div>

<span style="text-align: right; direction: rtl; float: right; clear: both;">הוספת איבר במקום מסוים</span>
<div class="align-center" style="display: flex; text-align: right; direction: rtl; clear: both;">
    <div style="display: flex; width: 10%; float: right; clear: both;">
        <img src="images/exercise.svg" style="height: 50px !important;" alt="תרגול"> 
    </div>
    <div style="width: 90%">
        <p style="text-align: right; direction: rtl; float: right; clear: both;">
        <strong>תרגול</strong>:
            קראו בתיעוד של פייתון על הפעולה <code>insert</code> השייכת לערכים מסוג רשימה.<br>
            הוסיפו דג מימין לכריש (shark) שברשימת <var>animals</var>.
        </p>
    </div>
</div>

<span style="text-align: right; direction: rtl; float: right;">תרגילים נוספים</span>
<span style="text-align: right; direction: rtl; float: right; clear: both;">חוטש</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
    כתבו פונקציה שמקבלת רשימה של רשימות, ומחזירה רשימה שטוחה והפוכה של כל האיברים.<br>
    לדוגמה: עבור הרשימה <code dir="ltr" style="direction: ltr">[[1, 2, 3], [4, 5, 6]]</code> החזירו <code dir="ltr" style="direction: ltr">[6, 5, 4, 3, 2, 1]</code>.
</p>

<span style="text-align: right; direction: rtl; float: right; clear: both;">רשימת תיקונים</span>
<p style="text-align: right; direction: rtl; float: right; clear: both;">
    לפניכם קוד שמטרתו היא מציאת המספר הקטן ביותר שהמשתמש הזין.<br>
    הכמנו בקוד 3 טעויות. מצאו אותן ותקנו אותן כך שהקוד יפעל.
</p>
End of explanation
"""


