Mar-04-2019, 11:51 AM
(This post was last modified: Mar-04-2019, 11:51 AM by FloppyPoppy.)
(Mar-03-2019, 10:52 PM)snippsat Wrote: You can and should use f-string everywhere,eg your line 8.
Also think of line length,line 8 is now 215 characters in length.
PEP-8 say 79 characters line length,but i would say that 90'ish is okay.
Example:
user_purchase_location = 'Mall' most_profitable_resourse = 'Diamond' profit_sorted = '99' user_sale_destination = 'Gold Shop' print( f"The most profitable item to buy at {user_purchase_location} is {most_profitable_resourse}\n\ and will make a net profit of {profit_sorted} per unit when sold at {user_sale_destination}" )
Output:The most profitable item to buy at Mall is Diamond and will make a net profit of 99 per unit when sold at Gold Shop
Thanks for that information i will be sure to try and incorporate F strings going forward. I have changed the program to reflect your advice.
Here is how the code is looking now
#### taking user information user_purchase_location = input(f"Where are you planning to buy your goods?").lower() user_sale_destination = input(f"Where are you planning to sell your goods?").lower() #### dicts of items available to buy and sell at locations along with UEC price. buying_olisar = {'Medical Supply': 17.01,} selling_olisar = {'Agricium': 25.60, 'Aluminum': 1.25, 'Beryl': 4.26, 'Chlorine': 1.57, 'Corundum': 2.53, 'Diamond': 6.90, 'Distilled Spirits': 4.95, 'Fluorine': 2.80, 'Gold': 6.07, 'Hydrogen': 1.02, 'Iodine': 0.41, 'Laranite': 28.91, 'Processed Food': 1.39, 'Quartz': 1.44, 'Scrap': 1.67, 'Stims': 3.40, 'Titanium': 8.27, 'Tungsten': 3.90,} buying_levski = {'Agricultural Supply': 1.11, 'Aluminum': 1.20, 'Hydrogen': 0.98, 'Iodine': 0.38, 'Quartz': 1.37,} selling_levski = {'Agricium': 25.60, 'Altruciatoxine': 11.63, 'Beryl': 4.25, 'Chlorine': 1.56, 'Corundum': 2.53, 'Diamond': 6.07, 'Distilled Spirits': 4.95, 'Fluorine': 2.80, 'Gold': 6.07, 'Laranite': 28.25, 'Medical Supply': 18.00, 'Processed Food': 1.38, 'Scrap': 1.68, 'Stims': 3.40, 'Titanium': 8.27, 'Tungsten': 3.90, 'Widdow': 24.00,} buying_grim_hex = {'Chlorine': 1.44, 'Flurine': 2.63, 'Hydrogen': 0.97, 'Iodine': 0.34} selling_grim_hex = {'Altruciatoxine': 11.80, 'distilled spirits': 4.95, 'medical suppies': 18.05, 'processed food': 1.36, 'stims': 3.40, 'Widdow': 24.0} #### Sorting the dict into ascending value instead of alphabetical sort_buying_olisar = sorted(buying_olisar, key=lambda tup: tup[1]) sort_selling_olisar = sorted(selling_olisar, key=lambda tup:(tup[1], tup[0])) sort_buying_levski = sorted(buying_levski, key=lambda tup: tup[1]) sort_selling_levski = sorted(selling_levski, key=lambda tup:(tup[1], tup[0])) sort_buying_grim_hex = sorted(buying_arc_corp_mining_area_157, key=lambda tup: tup[1]) sort_selling_grim_hex = sorted(selling_arc_corp_mining_area_157, key=lambda tup:(tup[1], tup[0])) #### picking two dicts (buy/sell) and filtering them to print only common elements. def common(curr, other): return set(curr.keys()).intersection(set(other.keys())) tradable_items = common(buying_levski, selling_olisar) #### calculating the prices between possible sales. prices = {k: selling_olisar[k] - buying_levski[k] for k in tradable_items} #### finding the most profitable material import operator most_profitable_resourse = max(prices.items(), key=operator.itemgetter(1))[0] #### sorting and printing the most profitable purchase. profit_ammount = prices profit_sorted = (f'{profit_ammount[most_profitable_resourse]:.2f}') print( f"The most profitable item to buy at {user_purchase_location.title()} is {most_profitable_resourse.title()}\n\ and will make a net profit of {profit_sorted} per unit when sold at {user_sale_destination.title()}"What i am trying to do now is alter these two lines to reflect any input from the user opposed to just focusing on the two. This is why i added in the third area "grim_hex"
tradable_items = common(buying_levski, selling_olisar) prices = {k: selling_olisar[k] - buying_levski[k] for k in tradable_items}i have tried to create a second variable as follows:
user_purchase_location_1 = 'buying_'+user_purchase_location+'' user_sale_destination_1 = 'selling_'+user_sale_destination+''these produce the correct information but wont work when added into the code as below as they are interpreted as strings:
def common(curr, other): return set(curr.keys()).intersection(set(other.keys())) tradable_items = common(user_purchase_location_1, user_sale_destination_1) prices = {k: user_sale_destination_1[k] - user_purchase_location_1[k] for k in tradable_items}When im running it like that i get this error:
Traceback (most recent call last):
File "/home/floppypoppy/PycharmProjects/Star Citizen Trading Program/Star Citizen trading NEW.py", line 33, in <module>
tradable_items = common(user_purchase_location_1, user_sale_destination_1)
File "/home/floppypoppy/PycharmProjects/Star Citizen Trading Program/Star Citizen trading NEW.py", line 32, in common
return set(curr.keys()).intersection(set(other.keys()))
AttributeError: 'str' object has no attribute 'keys'
Sorry for the wall of text just trying to offer up as much information on what i am doing as possible. Is there anything you can suggest i research to to make the above work?
Again thanks for any help and kindest regards,
Harry (FP)