-
Notifications
You must be signed in to change notification settings - Fork 113
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Submission project_swap_meet by Sorida Lac C17 #88
base: master
Are you sure you want to change the base?
Changes from all commits
965aa1c
d2dbaf7
7314410
de641e0
308b128
4976211
5da6cad
462424a
44f3d12
1d493a5
5d719c5
83e13f2
9217bb0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,10 @@ | ||
class Clothing: | ||
pass | ||
from swap_meet.item import Item | ||
|
||
class Clothing(Item): | ||
def __init__(self, category="", condition=0): | ||
super().__init__("Clothing", condition) | ||
|
||
def __str__(self): | ||
return "The finest clothing you could wear." | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,10 @@ | ||
class Decor: | ||
pass | ||
from swap_meet.item import Item | ||
|
||
class Decor(Item): | ||
def __init__(self, category="", condition=0): | ||
super().__init__("Decor", condition) | ||
|
||
def __str__(self): | ||
return "Something to decorate your space." | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,12 @@ | ||
class Electronics: | ||
pass | ||
from swap_meet.item import Item | ||
|
||
class Electronics(Item): | ||
|
||
def __init__(self, category="", condition=0): | ||
super().__init__("Electronics", condition) | ||
|
||
def __str__(self): | ||
return "A gadget full of buttons and secrets." | ||
|
||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,21 @@ | ||
|
||
class Item: | ||
pass | ||
def __init__(self, category="", condition=0, age= float("inf")): | ||
self.category = category | ||
self.condition = condition | ||
self.age = age | ||
|
||
|
||
def __str__(self): | ||
return "Hello World!" | ||
|
||
def condition_description(self): | ||
CONDITIONS = { | ||
0: "Mint", | ||
1: "Okay", | ||
2: "Good", | ||
3: "Great", | ||
4: "Excellent", | ||
5: "Flawless" | ||
} | ||
return CONDITIONS[self.condition] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,97 @@ | ||
from operator import attrgetter | ||
|
||
class Vendor: | ||
pass | ||
def __init__(self, inventory=None): | ||
if inventory == None: | ||
inventory = [] | ||
self.inventory = inventory | ||
|
||
def add(self, item): | ||
# Add item to the inventory | ||
self.inventory.append(item) | ||
# Return item that was added to inventory | ||
return item | ||
|
||
|
||
def remove(self, item): | ||
# Check if item in inventory that are match | ||
if item in self.inventory: | ||
# Remove item from the inventory | ||
self.inventory.remove(item) | ||
return item | ||
return False # If no matching items | ||
|
||
def get_by_category(self, category): | ||
# Return a list of item inventory from that category | ||
return [item for item in self.inventory if item.category == category] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nice list comprehension! |
||
|
||
def swap_items(self, other, my_item, their_item): | ||
|
||
# Check if Vendor items not in her inventory or Vendor friend's item not in their inventory | ||
if not my_item in self.inventory or not their_item in other.inventory: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Great check! |
||
return False | ||
|
||
# Vendor(my_item) add friend items to her inventory | ||
self.inventory.append(their_item) | ||
# Vendor remove her own items from her inventory | ||
self.inventory.remove(my_item) | ||
# Vendor friend's add Vendor to their inventory | ||
other.inventory.append(my_item) | ||
# Vendor friend's remove their item from their inventory | ||
other.inventory.remove(their_item) | ||
|
||
return True # Return True when Vendor and Vendor friend's swaping items from each other inventory | ||
|
||
def swap_first_item(self, other): | ||
# Check if Vendor and Vendor friend's inventory is not empty | ||
if self.inventory and other.inventory: | ||
# using index to access first item from vendor inventory | ||
my_item = self.inventory[0] | ||
#using index to access first item from vendor friend's inventory | ||
their_item = other.inventory[0] | ||
# using helper function, to swap first item from vendor and vendor friend's inventory | ||
self.swap_items(other, my_item, their_item) | ||
|
||
return True | ||
|
||
return False # If empty list return False | ||
|
||
def get_best_by_category(self, category): | ||
# Check if there is no items in the inventory that match category | ||
if not self.get_by_category(category): | ||
return None | ||
# Return the item that are match category and highest condition even there's duplicate items | ||
return max(self.get_by_category(category), key=attrgetter("condition")) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fantastic use of |
||
|
||
def swap_best_by_category(self, other, my_priority, their_priority): | ||
# Find the best items in Vendor inventory to match their priority | ||
my_best_item = self.get_best_by_category(their_priority) | ||
# Find the best items in Vendor friend's to match Vendor priority | ||
their_best_item = other.get_best_by_category(my_priority) | ||
|
||
# Return swap best items between Vendor and Vendor friend's from inventory | ||
return self.swap_items(other, my_best_item, their_best_item) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Great use of |
||
|
||
|
||
def get_by_newest(self): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Interesting additional function definition! Was the goal of this to return a sorted inventory by order of age? |
||
# Set minimum ages to float infinity | ||
new_ages = float("inf") | ||
# Set minimum items to None list | ||
items = [None] | ||
# Iterate item in the inventory | ||
for item in self.inventory: | ||
# Check if the item age is less than the new ages | ||
if item.age < new_ages: | ||
# update the item age | ||
items[0], new_ages = item, item.age | ||
else: | ||
# if item age equal to new age | ||
if item.age == new_ages: | ||
# Add item to items list | ||
items.append(item) | ||
return items | ||
|
||
|
||
|
||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import pytest | ||
from swap_meet.vendor import Vendor | ||
from swap_meet.item import Item | ||
|
||
def test_item_by_age(): | ||
|
||
age_1 = Item(age=5) | ||
age_2 = Item(age=22) | ||
age_3 = Item(age=30) | ||
vendor = Vendor([age_1, age_2, age_3] | ||
) | ||
|
||
age_items = vendor.get_by_newest() | ||
|
||
assert age_items != age_1 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Since |
||
assert age_items != age_2 | ||
assert age_items != age_3 | ||
|
||
|
||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,12 +2,12 @@ | |
import pytest | ||
from swap_meet.vendor import Vendor | ||
|
||
@pytest.mark.skip | ||
#@pytest.mark.skip | ||
def test_vendor_has_inventory(): | ||
vendor = Vendor() | ||
assert len(vendor.inventory) == 0 | ||
|
||
@pytest.mark.skip | ||
#@pytest.mark.skip | ||
def test_vendor_takes_optional_inventory(): | ||
inventory = ["a", "b", "c"] | ||
vendor = Vendor(inventory=inventory) | ||
|
@@ -16,7 +16,7 @@ def test_vendor_takes_optional_inventory(): | |
assert "b" in vendor.inventory | ||
assert "c" in vendor.inventory | ||
|
||
@pytest.mark.skip | ||
#@pytest.mark.skip | ||
def test_adding_to_inventory(): | ||
vendor = Vendor() | ||
item = "new item" | ||
|
@@ -27,7 +27,7 @@ def test_adding_to_inventory(): | |
assert item in vendor.inventory | ||
assert result == item | ||
|
||
@pytest.mark.skip | ||
#@pytest.mark.skip | ||
def test_removing_from_inventory_returns_item(): | ||
item = "item to remove" | ||
vendor = Vendor( | ||
|
@@ -40,7 +40,7 @@ def test_removing_from_inventory_returns_item(): | |
assert item not in vendor.inventory | ||
assert result == item | ||
|
||
@pytest.mark.skip | ||
#@pytest.mark.skip | ||
def test_removing_not_found_is_false(): | ||
item = "item to remove" | ||
vendor = Vendor( | ||
|
@@ -49,7 +49,10 @@ def test_removing_not_found_is_false(): | |
|
||
result = vendor.remove(item) | ||
|
||
raise Exception("Complete this test according to comments below.") | ||
#raise Exception("Complete this test according to comments below.") | ||
assert result != item | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 👍🏻 |
||
assert item not in vendor.inventory | ||
assert len(vendor.inventory) == 3 | ||
# ********************************************************************* | ||
# ****** Complete Assert Portion of this test ********** | ||
# ********************************************************************* |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,12 +2,12 @@ | |
from swap_meet.vendor import Vendor | ||
from swap_meet.item import Item | ||
|
||
@pytest.mark.skip | ||
#@pytest.mark.skip | ||
def test_items_have_blank_default_category(): | ||
item = Item() | ||
assert item.category == "" | ||
|
||
@pytest.mark.skip | ||
#@pytest.mark.skip | ||
def test_get_items_by_category(): | ||
item_a = Item(category="clothing") | ||
item_b = Item(category="electronics") | ||
|
@@ -23,7 +23,7 @@ def test_get_items_by_category(): | |
assert item_c in items | ||
assert item_b not in items | ||
|
||
@pytest.mark.skip | ||
#@pytest.mark.skip | ||
def test_get_no_matching_items_by_category(): | ||
item_a = Item(category="clothing") | ||
item_b = Item(category="clothing") | ||
|
@@ -34,7 +34,11 @@ def test_get_no_matching_items_by_category(): | |
|
||
items = vendor.get_by_category("electronics") | ||
|
||
raise Exception("Complete this test according to comments below.") | ||
#raise Exception("Complete this test according to comments below.") | ||
assert item_a != items | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Close! |
||
assert item_b != items | ||
assert item_c != items | ||
|
||
# ********************************************************************* | ||
# ****** Complete Assert Portion of this test ********** | ||
# ********************************************************************* |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lovely use of a constants dictionary to log the condition numbers to their descriptions!