Python Forum

Full Version: Problems with understanding class index.
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
class Store(): Money = 5.00 Day = 1 Stores = [] def __init__(self,StoreName,StoreProfit,storecost): self.StoreName = StoreName self.StoreCount = 0 self.StoreProfit = StoreProfit self.StoreCost = storecost def BuyStore(self): whichStore = int(input("Which store do you wish to buy?")) store = Store.Stores[whichStore-1] if store.StoreCost <= Store.Money: store.StoreCount+=1 Store.Money -= store.StoreCost else: print("You do not have enough money") @classmethod def DisplayGameInfo(cls): print("--------------------") print("Day # "+str(cls.Day)) print("Money = $"+str(cls.Money)) i = 1 for store in cls.Stores: store.DisplayStoreInfo(i) i+=1 def DisplayStoreInfo(self,i): print("Store name # "+ str(self.StoreName)) print("Money = $"+str(Store.Money)) print("Store Count " + str(self.StoreCount)) print(str(i)) def NextDay(self): Store.Day+=1 DailyProfit = self.StoreProfit * self.StoreCount Store.Money += DailyProfit Store.Stores.append(Store('Lemonade Stand',1.5,3)) Store.Stores.append(Store('Record Store',5,15)) Store.Stores.append(Store('Ice Cream Shop',10,90)) while True: Store.DisplayGameInfo() print("Available options N, B, Q") result = input("Please enter your selection") if result == 'B' or result == 'b': Store.Stores[0].BuyStore() elif result == 'N' or result == 'n': Store.Stores[0].NextDay() elif result == 'Q' or result == 'q': break else: print("Bad input") print("Thank you for playing Python Idle Tycoon")
The problem is with the logic inside of of the while loop. Store.Stores[0].BuyStore() and Store.Stores[0].NextDay() Why is the index 0 for Stores - wouldn't that just call the first class everytime? Though, when testing it - it doesn't follow. It doesn't seem to change anything no matter what the index is. I'm afraid I don't understand what's happening here. Secondly. How is Store.Stores[0].NextDay() working at all. I understand you're calling the class store and then the class variable that's a list, but what does that list have to do with NextDay which is its own instance method?

If this is TL;DR How is this working? Primarily the '0' Index? From my understanding it should just access the Lemonade Stand everytime.
if result == 'B' or result == 'b': Store.Stores[0].BuyStore() elif result == 'N' or result == 'n': Store.Stores[0].NextDay()
It is not well written code.

BuyStore() and NextDay() should be a class methods. They don't use an instance variables. Since they are essentially class methods it doesn't matter which instance of Store is used to call them.

I also don't like that you have to explicitly add stores to Store.Stores. This should happen automatically in the __init__ method.
I agree with @deanhystad This code is a mess
And there is serious problem with NextDay and how it calculates DailyProfit - it uses only StoreProfit for store at index 0 (the store on which instance the method is called), i.e. 5 while e.g. IceCream Store has DailyProfit 0f 10
Yeah, I should've probably prefaced that I was following a course. The instructor pretty much put it like this but talked about the problems in the QandA thread. I believe I have a better grasp on what is actually going on. I just paused the video because I assumed that the code was not going to work as intended(as you've stated) Nonetheless, I appreciate the response despite the spaghetti code. It was fixed later down the line as well.