You are on page 1of 45

Recitation 12

Python Programming for Engineers


Tel-Aviv University / 0509-1820 / Fall 2021-2022
Question #1
In [ ]: def P(assets, s1=0, s2=0):

if not assets:

return s1 == s2

return P(assets[1:], s1+assets[0], s2) or P(assets[1:], s1, s2+assets[0])

In [ ]: def P(assets, s1=0, s2=0, mem=None):

if not assets:

return s1 == s2

if not mem:

mem = {}

key = (len(assets),s1,s2) #can we also use (assets,s1,s2)?

if key not in mem:

mem[key] = P(assets[1:], s1 + assets[0], s2, mem) or P(assets[1:], s1, s2 + assets[0], mem)

return mem[key]

Question #2
In [ ]: import pandas as pd

‫ממשו את השירות ‪ load_orders_and_prices‬אשר קוראת את הקבצים ‪ prices,orders‬לתוך‬


‫אובייקטי ‪ DataFrame‬ומחזירה אותם‬
‫ לתוך‬prices,orders ‫ אשר קוראת את הקבצים‬load_orders_and_prices ‫ממשו את השירות‬
‫ ומחזירה אותם‬DataFrame ‫אובייקטי‬

In [ ]: def load_orders_and_prices(orders_csv_name, prices_csv_name):

orders = pd.read_csv(orders_csv_name)

prices = pd.read_csv(prices_csv_name)

return orders, prices

orders, prices = load_orders_and_prices("orders.csv", "prices.csv")

print(orders)

print(prices)

‫הדפיסו את מספר הפריטים שהוזמנו מכל המוצרים ע"י כל הלקוחות‬


‫הדפיסו את מספר הפריטים שהוזמנו מכל המוצרים ע"י כל הלקוחות‬

In [ ]: orders, prices = load_orders_and_prices("orders.csv", "prices.csv")

display(orders)

display(orders.sum())

print(orders.sum().sum())

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

In [ ]: orders_per_customer = (orders > 0).sum(axis=1) #num of orders per customer

print(type(orders))

print(type(orders_per_customer))

print((orders_per_customer > 2).sum())

‫הדפיסו את שם המוצר ממנו הוזמנו הכי הרבה פריטים‬


‫הדפיסו את שם המוצר ממנו הוזמנו הכי הרבה פריטים‬

In [ ]: display(orders)

sums_for_product = orders.sum()
display(sums_for_product)

print(sums_for_product.idxmax())

‫חשבו מהו הרווח הכולל של בית הקפה ממנו בוצעו


ההזמנות‪ ,‬על פי טבלת ההזמנות וטבלת‬
‫המחירים‬
‫חשבו מהו הרווח הכולל של בית הקפה ממנו בוצעו
ההזמנות‪ ,‬על פי טבלת ההזמנות וטבלת‬
‫המחירים‬

‫‪In [ ]:‬‬ ‫
))(‪print(orders.dot(prices.T).sum().sum‬‬
‫האם קיים מוצר שלא הוזמן ממנו אף פריט?‬
?‫האם קיים מוצר שלא הוזמן ממנו אף פריט‬

In [ ]: print((orders.sum()== 0).sum())

print((orders.sum() == 0).sum() != 0)

print((orders.sum() > 0).sum() != orders.shape[1])

Question #3
In [ ]: def pixelize_image(im,k):

im2=np.zeros(im.shape)

for x in range(0,im.shape[1],k ):
for y in range(0,im.shape[0],k):

im2[y:y+k,x:x+k] =im[y:y+k,x:x+k].mean()

#If dimensions are not guaranteed to be a multiplication of k:

im2[y:min(y+k,im.shape[0]),x:min(x+k,im.shape[1])] =

im[y:min(y+k,im.shape[0]),x:min(x+k,im.shape[1])].mean()

Question #4
In [ ]: class Subs:

def __init__(self, table, ships):

self.table = table

self.ships = ships

def __repr__(self):

result = ""

for i in range(len(self.table)):

for j in range(len(self.table)):

result += str(self.table[i][j]) + " "

result += "\n"

return result

In [ ]: def isAliveInDir(self, x, y, dx, dy):

n = len(self.table)

rowIndex = x + dx

colIndex = y + dy

while (rowIndex > -1 and rowIndex < n and

colIndex > -1 and colIndex < n):

if (self.table[rowIndex][colIndex] == 0):

break

elif (self.table[rowIndex][colIndex] == 1):

return True

rowIndex += dx

colIndex += dy

return False

In [ ]: def hit(self, x, y):

if (self.table[x][y] <= 0):

return 0

else:

# Mark local hit

self.table[x][y] = -1

# Check all directions and see if submarine still exists

down = self.isAliveInDir(x,y,1,0)

up = self.isAliveInDir(x,y,-1,0)

right = self.isAliveInDir(x,y,0,1)

left = self.isAliveInDir(x,y,0,-1)

if (down or up or right or left):

return 1

else:

return 2

In [ ]: def randomFromZeroTo(upper):

rand = random.random()

for i in range(upper):

currBorder = i / upper

nextBorder = (i + 1) / upper

if currBorder <= rand < nextBorder:

return I

In [ ]: def play(self):

rounds = 0

while (self.ships > 0):

x = randomFromZeroTo(len(self.table))

y = randomFromZeroTo(len(self.table))

hit_return = self.hit(x, y)

if (hit_return == 0):

print("Nothing")

elif (hit_return == 1):

print("Hit")

elif (hit_return == 2):

print("Destroyed")

self.ships -= 1

rounds += 1

return rounds

Question #5
In [ ]: def different_cells_num(mat1, mat2, th):

diffs = np.abs(mat2-mat1)

mask = diffs > th

return mask.sum()

#or: return np.sum(np.abs(mat2-mat1) > th)

In [ ]: def find_best_match(mat1, mat2, th):

n,m = mat2.shape #dimensions alias

best = mat1[:n, :m] #initialize best as the 1st submatrix

min_dif = different_cells_num(best, mat2, th)

for i in range(mat1.shape[0] – n + 1):

for j in range(mat1.shape[1] - m + 1):

sub_mat = mat1[i:i+n, j:j+m]

cur_dif = different_cells_num(sub_mat, mat2, th)

if cur_dif < min_dif: #a better submatix was found

min_dif = cur_dif

best = sub_mat

return best

Question #6
In [ ]: def is_sum_in_range(numbers, lower, upper):

if lower<0 and upper>0:

return True

if len(numbers)==0:

return False

else:

option1=is_sum_in_range(numbers[:-1],lower-numbers[-1],upper-numbers[-1])

option2=is_sum_in_range(numbers[:-1],lower,upper)

return option1 or option2

Good luck in the exams!

You might also like