Untitled
unknown
plain_text
a year ago
2.9 kB
7
Indexable
import time
import random
# wages - rate*hour*<num of orders currently holding>
WAGE_PER_HOUR = 10
def retry(max_attempts=3, delay=1):
"""Retry decorator to attempt function execution multiple times."""
def decorator(func):
# @wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_attempts):
try:
return func(*args, **kwargs)
except Exception as e:
print(f"Attempt {attempt + 1} failed: {e}")
time.sleep(delay)
print(f"Failed to execute {func.__name__} after {max_attempts} attempts.")
return [] # Return empty list if all retries fail
return wrapper
return decorator
def retry1(max_attempts = 4, delay =2):
def decorator(func):
def wrapper(*args, **kwargs):
for attempt in range(max_attempts):
try:
return func(*args, **kwargs)
except Exception as e:
print(f"Attempt {attempt} failed: Error {e}")
time.sleep(delay)
return []
return wrapper
return decorator
@retry1(max_attempts=3, delay=1)
def get_dasher_orders():
if random.random() < 0.9: # Simulate a failure 30% of the time
raise Exception("Failed to fetch orders")
times = ["order1 Pickup 1",
"order2 Pickup 2",
"order1 Deliver 5",
"order3 Pickup 7",
"order2 Deliver 12",
"order3 Deliver 20"]
return times
class PaymentCalculator:
def __init__(self, wage_rate_per_hour):
self.wage_rate_per_hour = wage_rate_per_hour
def is_rush_hour(self, cur_time, rush_hours):
if not rush_hours:
return False
for start, end in rush_hours:
if start <= cur_time <= end:
return True
return False
def get_dasher_wage(self, dasher_id, rush_hours=None):
events = get_dasher_orders()
total_wages = 0
active_orders = {}
for event in events:
order_id, event_type, time = event.split(" ")
if event_type == "Pickup":
active_orders[order_id] = int(time)
elif event_type == "Deliver":
pickup_time = active_orders[order_id]
elapsed_time_in_hours = (int(time) - pickup_time) / 60
wage = self.wage_rate_per_hour * (2 if self.is_rush_hour(time, rush_hours) else 1)
price = wage * elapsed_time_in_hours * len(active_orders)
total_wages += price
del active_orders[order_id]
return round(total_wages, 2)
calculator = PaymentCalculator(10)
print(calculator.get_dasher_wage(6))
print("SDF SDF ".split())Editor is loading...
Leave a Comment