我对编程很陌生,我不确定我的问题是否正确。
我正在尝试制作一个程序来模拟植物在不同"季节"的基本生长。在各种"天气"中;事件以及"土壤"的类型;他们在。
例如:如果季节=夏季,则增长率= 1x,则出现晴天的几率为0.9,出现雨天的几率为0.1。
如果我创建一个名为Summer()的类,是否有可能定义这个特定季节的增长率和天气事件,并在以后访问它们?
我现在的代码是:
class Season():
def __init__(self, name):
self.getSeason = name
def getGrowthRate(self):
if self.getSeason == "Summer":
return 1
#then so forth for the rest of them
def getWeatherEvent(self):
if self.getSeason == "Summer":
# i dont know how to do this part, but for example, sunny = 0.9, rainy = 0.1 chance
是否可以将季节(也许还有天气事件)定义为独立的实体,并从它们内部访问我需要的值?
这可能不是很清楚,但任何帮助将非常感激,谢谢。
对我来说,自然的方法是有类Season
和所述类的实例:夏天,秋天,冬天,春天。我建议如下实现
import random
class Season:
conditions = ("sunny", "rainy")
def __init__(self, name, weights):
self.name = name
self.weights = weights
def get_weather(self):
return random.choices(self.conditions, self.weights)[0]
summer = Season("summer",[0.9,0.1])
fall = Season("fall",[0.5,0.5])
winter = Season("winter",[0.1,0.9])
spring = Season("spring",[0.5,0.5])
print(summer.get_weather()) # rainy
print(summer.get_weather()) # sunny
print(summer.get_weather()) # sunny
输出可能不同,因为它是不确定的。conditions
为类属性,表示为所有实例共享,name和weight为实例属性。我使用random.choices
,因为它允许权重作为第二个参数,它返回列表(在这种情况下有1个元素),所以我们需要通过使用[0]
获得该元素。
这个方法怎么样,不需要继承,如果你想让它们每次调用时都改变季节,你可以默认为None,并使用@property装饰他的方法。
import random
class Season:
seasons_data = {'summer':{'sunny':0.9, 'rain':0.1, 'snow':0},
'winter':{'sunny':0.1, 'rain':0.6, 'snow':0.2}}
growth_rate = {'summer':1,'winter':0.4}
seasons = list(seasons_data.keys())
def __init__(self, season=None):
self.season = season # random.choices(seasons)
self.weather = self.get_weather()
self.growth = self.growth_rate[self.season]
def get_weather(self):
current_season_data = self.seasons_data[self.season]
return random.choices(list(current_season_data.keys()), current_season_data.values())[0]
summer_season = Season('summer') #instance of summer
print(summer_season.weather) # fixed
print(summer_season.growth) # fixed growth of summer
print(summer_season.get_weather()) # randomize weather of summer