תרגילים נוספים: שבוע 4

תודה לנגה אוסין על כתיבת התרגילים!

שבוע 4

מחברת 1 – לולאות for

יעקב השחור

אתם בבלאג’יו, משחקים במשחק הקלפים “יַעֲקֹב הַשָּׁחֹר”, לא בהגינות רבה. בכל סיבוב אתם שולפים קלף, ואתם מבינים שככל שהקלף שנשלף נמוך יותר – כך הסיכוי לשלוף קלף גבוה יותר עולה.
כתבו פונקציה אשר מקבלת כפרמטר את רשימת ערכי הקלפים שנשלפו, וקובעת אם כדאי להשתתף גם בסיבוב הבא או לא.

הפונקציה פועלת לפי החוקיות הבאה:

  • רשימת הקלפים שנשלפו תהיה מיוצגת על־ידי ערכם המספרי בלבד. למשל, נסיך יהיה 11 ומלך יהיה 13. המשחק לא כולל ג’וקר.
  • אם ערכו של הקלף הוא בין 2 ל־6 כולל, מד הסיכון ירד בנקודה אחת (כי עכשיו החבילה מכילה קלפים טובים יותר).
  • אם ערכו של הקלף הוא בין 10 ל־13 כולל, או שערכו שווה 1 (“אס”), מד הסיכון יעלה בנקודה אחת.
  • המספרים 7–9 הם ניטרליים, ולא מוסיפים למד סיכון או גורעים ממנו.
  • אין חשש לבעיות קלט.

על הפונקציה להחזיר True אם מד הסיכון קטן מאפס, או False אם מד הסיכון גדול או שווה לאפס.

דוגמאות:

  • עבור קלט של [1], הפונקציה תחזיר False.
  • עבור קלט של [1, 2, 3, 4, 5, 6, 7, 8, 9], הפונקציה תחזיר True.
  • עבור קלט של [10, 2], הפונקציה תחזיר False.

אתגר: ייצגו את קלפי משפחת המלוכה כמחרוזות; קרי “J” עבור נסיך, “Q” עבור מלכה ו־“K” עבור מלך. ממשו זאת ללא שימוש ב־or, וללא הגדרת if או elif בעבור כל אחד מהקלפים בנפרד.

צפנת פענח

לפניכם רשימה של רשימות. כל תת־רשימה מכילה אותיות וספרות שלמות וחיוביות:

puzzle_input = [
    ['s', '1', 't', '9'], ['b', '2', '5'], ['u','3', '7', 'y'],
    ['c', '4', 'a', '6'], ['g', '5'], ['c', '6', '3', '5'], ['c', '7', '3'],
    ['x', '8', '3'], ['e', '9', '1'], ['s', '2', '2', '6'], ['m', '12', '9'],
    ['s', '8', '2', 'j'], ['!', '9', '1'], ['?', '9', '2']
]

כתבו פונקציה (תוכלו לקרוא לה foo, אם תרצו) אשר תרכיב מילה המסתתרת בתתי־הרשימות, לפי החוקיות הבאה: אם סכום המספרים בתת־רשימה מסוימת שווה ל־10, דִגמו ממנה את האות הראשונה. הפונקציה תחזיר את המילה שהתקבלה מצירוף כל האותיות בזו אחר זו.

מחברת 2 ו־3 – מילונים

טחינה

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

cookbook = {
    'pasta': {'origin': 'italy', 'prep_time': 25, 'calories': 400},
    'curry': {'origin': 'india', 'prep_time': 60, 'calories': 250},
    'chraime': {'origin': 'morocco', 'prep_time': 40, 'calories': 350}
}

לאחרונה גיליתם דבר נפלא: כל דבר הוא טעים יותר לאחר שמוסיפים לו טחינה. רק דקת הכנה נוספת, ופי 2 קלוריות!
עדכנו בהתאם את ספר הבישול: הוסיפו דקה אחת של הכנה עבור כל מאכל, והכפילו את הקלוריות.

מחברת 4 – פריקה

כוהף

ממשו פונקציה אשר מקבלת מספר זוגי ולא ידוע של פרמטרים. הפונקציה תחזיר רשימה אשר חצייה הראשון “הוחלף” עם חצייה השני.

לדוגמה:

  1. עבור הקלט 4, 3, 2, 1 – יתקבל [2, 1, 4, 3].
  2. עבור הקלט ‘banana’, ‘nana’ – יתקבל [‘nana’, ‘banana’].
  3. עבור הקלט 66, 55, 44, 33, 22, 11 – יתקבל [33, 22, 11, 66, 55, 44].

השתמשו ב־slicing וב־unpacking.

רטינה יומית

בעקבות המצב סיגלתם לעצמכם שגרת אימונים ביתית. כל הכבוד! לאחר כל אימון, רשמתם כמה ימים עברו מאז שהתחלתם, וכמה תרגילים עשיתם מכל סוג. הרישום נראה כך:

daily_routine = (
    {'day': 1, 'capability': {'pushups': 8, 'squats': 20, 'pullups': 2}},
    {'day': 2, 'capability': {'pushups': 13, 'squats': 39, 'pullups': 2}},
    {'day': 3, 'capability': {'pushups': 21, 'squats': 51, 'pullups': 3}}
)

חשבו את סכום התרגילים שעשיתם בכל יום, ואת ממוצע התרגילים שביצעתם סה"כ (ללא תלות בסוג התרגילים).
השתמשו ב־kwargs.

(בחנו את עצמכם: הממוצע אמור להיות 53.)

מחברת #5 – בילטעינים

  1. ממשו מילון המציג את חמישה־עשר המספרים האי־זוגיים הראשונים החל מ־100, באופן הבא:
{1: 101, 2: 103, 3: 105, 4: 107, 5: 109, 6: 111, 7: 113, 8: 115, 9: 117, 10: 119, 11: 121, 12: 123, 13: 125, 14: 127, 15: 129}

מחברת 6 – סיכום

ארנב ומזון

הגשמתם חלום ואימצתם שלושה ארנבים: זיגמונד, פרידריך ואִרווין. מזל טוב!
הנחתם לצד הארנבונים כמות שווה של גזר, חסה ובצל ירוק, ולכל אורך היום הראשון צפיתם בהם אוכלים. בכל פעם שראיתם ארנב אוכל דבר מה רשמתם בקצרה את האות הראשונה של שמו ואת האות הראשונה של מה שאכל. בסופו של דבר קיבלתם מחברת מבולגנת למדי, אשר נראית כך:

תקציר
['I l', 'F l', 'I s', 'I l', 'I c', 'Z s', 'Z s', 'I l', 'I s', 'Z c', 'Z l', 'I l', 'I l', 'F c', 'Z c', 'Z c', 'F c', 'I s', 'F c', 'Z c']

על מנת להכיר את ארנביכם טוב יותר, ולדעת מהי כמות האוכל שכדאי לרכוש בפעם הבאה, ענו של השאלות הבאות:

  1. מיהו הארנב הכי זללן? כלומר, מיהו הארנב שצרך את כמות המזון הגדולה ביותר?
  2. מהו המזון החביב על הארנב הזללן ביותר?
  3. איזה מבין המזונות זכה להערכה הרבה ביותר משלושת הארנבים? כלומר, מאיזה סוג מזון נשאר הכי פחות בסוף היום?

הוראות והנחות קלט:

  1. השתמשו במילונים, unpacking ולולאות for.
  2. ניתן ליצור אך ורק מילונים ריקים.
  3. כל מחרוזת ברשימה מכילה שתי אותיות: הראשונה מייצגת את שם הארנב, והשנייה מייצגת את סוג המזון (l עבור חסה, c עבור גזר, ו־s עבור בצל ירוק).
  4. הניחו כי כל הכמויות שוות בגודלן. מספיק להוסיף 1 לערך הכמותי של כל מאכל בעבור כל פעם שהוא רשום.
3 לייקים

צפנת פענח: success!

לייק 1

אפשר בבקשה הסבר על ניסוח השאלה ‘כוהף’?
פונקציה אשר מקבלת מספר זוגי ולא ידוע של פרמטרים?
def function(unknown)
הכוונה שהפרמטרים הם ב-unknown או שזה קלט מהמשתמש?

תמונה

אינדקסים צריכים להיות מספר שלם ולא float

:+1:

פתרונות:
יעקב השחור:

תקציר
# Returns a boolean value - True if it's worth to play next round (according to he cards already picked list)
CARDS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K']

def danger_rate(cards):
    danger = 0
    for each in cards:
        each = CARDS.index(each) + 1
        if 2 <= each <= 6:
            danger -= 1
        elif 9 <= each <= 13 or each == 1:
            danger += 1
    return danger < 0

cards = [1, 'K', 2, 7, 6, 5]
print(danger_rate(cards))

צפנת פענח:

תקציר
# Returns the decryption of the word - if a list has 10 total sum the first letter is added to the word
puzzle_input = [
    ['s', '1', 't', '9'], ['b', '2', '5'], ['u','3', '7', 'y'],
    ['c', '4', 'a', '6'], ['g', '5'], ['c', '6', '3', '5'], ['c', '7', '3'],
    ['x', '8', '3'], ['e', '9', '1'], ['s', '2', '2', '6'], ['m', '12', '9'],
    ['s', '8', '2', 'j'], ['!', '9', '1'], ['?', '9', '2']
]

def foo(puzzle):
    word = ""
    for each in puzzle:
        counter = 0
        for letter in each:
            if letter.isnumeric():
                counter += int(letter)
        if counter == 10:
            word += each[0]
    return word

print(foo(puzzle_input))

טחינה:

תקציר
# Adds thini to each receipe, so adds a minute prepare time to each one amd double the calories
cookbook = {
    'pasta': {'origin': 'italy', 'prep_time': 25, 'calories': 400},
    'curry': {'origin': 'india', 'prep_time': 60, 'calories': 250},
    'chraime': {'origin': 'morocco', 'prep_time': 40, 'calories': 350}
}

def add_time_and_calories(book):
    for each in book:
        book[each]['prep_time'] += 1
        book[each]['calories'] *= 2
    return book

print(add_time_and_calories(cookbook))

כוהף:

תקציר
# Returns a list of the arguments - from the middle till the end and from the beginning till the middle
# The number of arguments has to be even
def get_backwards(*args):
    middle = len(args) // 2
    return list(args[middle:] + args[:middle])

print(get_backwards("nana", "banana"))

רטינה יומית:

תקציר
# Prints the total amount of exercises each day and the average amount of total exercises for all days
daily_routine = (
    {'day': 1, 'capability': {'pushups': 8, 'squats': 20, 'pullups': 2}},
    {'day': 2, 'capability': {'pushups': 13, 'squats': 39, 'pullups': 2}},
    {'day': 3, 'capability': {'pushups': 21, 'squats': 51, 'pullups': 3}}
)

def get_sum(day, capability):
    total = 0
    for exercise in capability:
        total += capability[exercise]
    print(f"The total amount of exercises in day {day} is {total}")
    return total

final_sum = 0
for each in daily_routine:
    final_sum += get_sum(**each)
average = final_sum / len(daily_routine)
print(f"The average amount of exercises is: {average}")

בילטעינים:

תקציר
# Prints a dictionary which contains 15 odd numbers and starts at the number 101
final = {}
how_many_odds = 15
start_at = 101
for index, number in enumerate(range(start_at, start_at + (how_many_odds * 2), 2), 1):
    final[index] = number
print(final)

ארנב ומזון:

תקציר
rabbits_tracing = ['I l', 'F l', 'I s', 'I l', 'I c', 'Z s', 'Z s', 'I l', 'I s', 'Z c',
                   'Z l', 'I l', 'I l', 'F c', 'Z c', 'Z c', 'F c', 'I s', 'F c', 'Z c']
translations = {'I': 'Irvin', 'Z': 'Zigmond', 'F': 'Fredrich', 'l': 'lettuce', 'c': 'carrot', 's': 'salary'}

# Returns a tuple - the first organ is how many dishes he ate and the second one is what's his favorite dish
def get_sum(rabbit):
    total = 0
    favorite_dish = 0
    for dish in rabbit:
        current = rabbit[dish]
        if current > favorite_dish:
            favorite_dish = current
            favorite_dish_name = dish
        total += current
    return (total, favorite_dish_name)

# Returns which rabbit ate the most
def get_fatest_rabbit(rabbits):
    fatest = 0
    for rabbit in rabbits:
        sum_eating, fav_dish = get_sum(rabbits[rabbit])
        if fatest < sum_eating:
            fatest = sum_eating
            fatest_name = rabbit
            fatest_fav_dish = fav_dish
    return translations[fatest_name], translations[fatest_fav_dish]

# Returns the favorite dish of the rabbits
def get_fav_dish(rabbits):
    dishes = {}
    for rabbit in rabbits:
        for each in rabbits[rabbit]:
            if each not in dishes:
                dishes[each] = rabbits[rabbit][each]
            else:
                dishes[each] += rabbits[rabbit][each]
    return translations[sorted(dishes, key=dishes.get, reverse=True)[0]]

rabbits = {}    # Creates a dictionary of the rabbits - each key is a rabbit name
for each in rabbits_tracing:    # each value is a dictionary of the dishes he ate
    name, space, dish = each
    if name not in rabbits:
        temp = {}
        temp[dish] = 1
        rabbits[name]= temp
    elif dish not in rabbits[name]:
        rabbits[name][dish] = 1
    else:
        rabbits[name][dish] += 1
print(rabbits)

fatest, fav_dish = get_fatest_rabbit(rabbits)
print(f"The fatest rabbit is: {fatest}, his favorite dish is: {fav_dish}")
print(f"The favorite dish of the rabbits is: {get_fav_dish(rabbits)}")

כוהף הפתרון שלי: (לוקח בחשבון הכנסת קלטים ולא הכנסה של נתונים לפונקציה)

קוד
def flip_in_helf(x):
    middle = len(x) // 2
    return x[middle:] + x[:middle]


inputs = []
given_input = 0
zugi = 0
while given_input != '':
    given_input = input("Enter an input or ampty string to exit: ")
    if given_input != '':
        inputs.append(given_input)
        zugi = (zugi + 1) % 2
    elif zugi != 0:
        given_input = 0

print(flip_in_helf(inputs))

בילטעינים:

קוד
def odds(start, number_of_odds):
    if start % 2 == 0:
        start += 1
    odds = {}
    for index, number in enumerate(range(start, start + number_of_odds * 2, 2), 1):
        odds[index] = number
    return odds

print(odds(100, 15))

טחינה:

קוד
def adding_thini(cookbook):
    for food_name, recipe_info in cookbook.items():
        cookbook[food_name]['prep_time'] += 2
        cookbook[food_name]['calories'] *= 2
    return cookbook
        
print(adding_thini(cookbook))

אתחיל בזה שלא מדובר בתלונה - סיימתי את כל התרגילים הרגילים.
ראיתי רק היום את התרגילים הנוספים, כשנכנסתי לבדוק אם יש כבר תרגילים של שבוע 5.
לא מוצא “פיל או גנטיקה” ו/או/ ג’וק, סמור, בֹּנֶה.

יש אפשרות שכמו ש-מחברות שבוע 1, 2,… נמצאות בראש הדף כשנכנסים לפורום, יופיעו קישורים לשאלות הנוספות?

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

לייק 1

הבנתי…
אזכור להבא.
תודה.

יעקב השחור

תקציר
def game(li):
    risk = 0
    for card in li:
        if card in [7, 8, 9]:
            continue
        elif card in [1, 10, 'J', 'Q', 'K']:
            risk += 1
        else:
            risk -= 1
    if risk < 0:
        return True
    else:
        return False

צפנת פענח

תקציר
def foo(puzzle):
    word = ''
    for li in puzzle:
        temp = 0
        for char in li:
            if char.isnumeric():
                temp += int(char)
        if temp == 10:
            for char in li:
                if char.isalpha():
                    word += char
                    break
    return word


puzzle_input = [
    ['s', '1', 't', '9'], ['b', '2', '5'], ['u','3', '7', 'y'],
    ['c', '4', 'a', '6'], ['g', '5'], ['c', '6', '3', '5'], ['c', '7', '3'],
    ['x', '8', '3'], ['e', '9', '1'], ['s', '2', '2', '6'], ['m', '12', '9'],
    ['s', '8', '2', 'j'], ['!', '9', '1'], ['?', '9', '2']
]
print(foo(puzzle_input))

טחינה

תקציר
cookbook = {
    'pasta': {'origin': 'italy', 'prep_time': 25, 'calories': 400},
    'curry': {'origin': 'india', 'prep_time': 60, 'calories': 250},
    'chraime': {'origin': 'morocco', 'prep_time': 40, 'calories': 350}
}
for recipe in cookbook:
    for cat in cookbook[recipe]:
        if cat == 'prep_time':
            cookbook[recipe][cat] += 60
        if cat == 'calories':
            cookbook[recipe][cat] *= 2
print(cookbook)

כוהף

תקציר
def swap(li):
    temp_li = []
    for half in li[(len(li) // 2):]:
        temp_li.append(half)
    for half in li[:(len(li) // 2)]:
        temp_li.append(half)
    return temp_li


print(swap([11, 22, 33, 44, 55, 66]))

רטינה יומית

תקציר
def calc(day, capability):
    tot = 0
    for exercise in capability:
        tot += capability[exercise]
    print(f"In day {day} I did a total of {tot} exercises")
    return tot


daily_routine = (
    {'day': 1, 'capability': {'pushups': 8, 'squats': 20, 'pullups': 2}},
    {'day': 2, 'capability': {'pushups': 13, 'squats': 39, 'pullups': 2}},
    {'day': 3, 'capability': {'pushups': 21, 'squats': 51, 'pullups': 3}}
)

avg = 0
for day in daily_routine:
    avg += calc(**day)
print(f"Average is: {avg // 3}")

בילטעינים

תקציר
d = {}
for i in range(15):
    d[i + 1] = 101 + (i * 2)

ארנב ומזון

תקציר
log = ['I l', 'F l', 'I s', 'I l', 'I c', 'Z s', 'Z s', 'I l', 'I s', 'Z c', 'Z l', 'I l', 'I l', 'F c', 'Z c', 'Z c', 'F c', 'I s', 'F c', 'Z c']
d = {}
for insert in log:
    name, food = insert.split(" ")
    if d.get(name, -1) == -1:
        d[name] = {}
    if d[name].get(food, -1) == -1:
        d[name][food] = 0
    d[name][food] += 1
    
# 1
total = []
for rabbit in d:
     total.append((sum(d[rabbit].values()), rabbit))
rabbit_name = max(total)[1]
if rabbit_name == 'I':
    p_name = "Irvin"
    print("Irvin")
elif rabbit_name == 'F':
    p_name = "Friedrich"
    print("Friedrich")
else:
    p_name = "Zigmund"
    print("Zigmund")
    
# 2
fav_food = max(d[rabbit_name], key=lambda k: d[rabbit_name][k])
if fav_food == 'l':
    print(f"{p_name} likes Lettuce the most")
elif fav_food == 'c':
    print(f"{p_name} likes Carrot the most")
else:
    print(f"{p_name} likes Scallion the most")

# 3
foods = []
for food in ['l', 's', 'c']:
    temp = 0
    for rabbit in d:
        if d[rabbit].get(food, -1) != -1:
            temp = d[rabbit][food]
    foods.append([temp, food])
most_food = max(foods)[1]
if most_food == 'l':
    print("Lettuce is the most favorite food")
elif most_food == 'c':
    print("Carrot is the most favorite food")
else:
    print("Scallion is the most favorite food")

רטינה יומית

תקציר

def routine():
daily_routine = (
{‘day’: 1, ‘capability’: {‘pushups’: 8, ‘squats’: 20, ‘pullups’: 2}},
{‘day’: 2, ‘capability’: {‘pushups’: 13, ‘squats’: 39, ‘pullups’: 2}},
{‘day’: 3, ‘capability’: {‘pushups’: 21, ‘squats’: 51, ‘pullups’: 3}}
)

sum_value = 0
def get_sum_value(day, capability):
     sum_line = sum(capability.values())
     print(f"total exercises in day {day} is {sum_line}")
     return sum_line / len(capability)

for line in daily_routine:
    sum_value += get_sum_value(**line)
print(f"the average is: {int(sum_value)}")

routine()

לייק 1