我想知道是否有更好的方法:我正在检查计算是否为0,如果为0,则什么也没有发生。如果不是0,钱将被添加到玩家。问题是我现在必须检查15种不同的股利计算,这将如何明智地执行?我可以做15条if / else语句,但这很麻烦。我的一个想法是使用下面的代码,但如果语句为true,则继续循环以检查其他语句,如果为true,则对它们进行操作。在Python中有可能吗?
我的另一个想法是执行一次while循环,基本上每60秒执行一次,即使分度为0,也只需设置所有股票的分度,但是我认为如果玩家在此期间做其他事情,就有机会成为bug执行。一些示例代码:
import random
import sys
import time
import os
def playerStatus():
playerStatus.playerMoney = 10000
playerStatus.playerLoan = 0
def dividends():
while True:
networthCalc()
pm = playerStatus.playerMoney
print("cash:", pm)
dividends.aapl = networthCalc.aapl / random.randint (20,30)
dividends.goog = networthCalc.goog / random.randint (20,30)
time.sleep(1)
if dividends.aapl > 0:
newCash = dividends.aapl + pm
setattr(playerStatus, "playerMoney", newCash)
print("aapl payed div:", dividends.aapl)
elif dividends.goog > 0:
newCash = dividends.goog + pm
setattr(playerStatus, "playerMoney", newCash)
print("goog payed div:", dividends.goog)
else:
pass
def networthCalc():
networthCalc.aapl = getattr(stockPrice, "aapl") * getattr(showAssets, "aapl")
networthCalc.goog = getattr(stockPrice, "goog") * getattr(showAssets, "goog")
def showAssets():
showAssets.aapl = 10
showAssets.goog = 10
def stockPrice():
stockPrice.aapl = 200
stockPrice.goog = 200
playerStatus()
showAssets()
stockPrice()
networthCalc()
dividends()
答案 0 :(得分:1)
构建操作列表并存储要处理的值。如果您想知道是否有任何大于0的计算,请使用函数any()
x = 3
calculations = [x+1,x+2,x+(-3)]
if any(calculations):
#do something
print("there's something above 0")
如果您需要执行特定的计算,并且每个“函数”返回的值都大于零,则可以将计算创建为函数,并创建一个字典以将结果作为值存储,函数名称为键(我们将创建内容在函数中进行计算的原因是因为我们希望动态获取值,而不是在创建字典的那一刻获取值,因此我们每次都基于传入的值创建一个新值)。这样,您就知道哪个返回了什么值。如果要基于大于0的返回值进行处理,只需创建另一个字典并使用返回的键作为to_do
字典的键即可:
def aapl_calc(value):
return value + 5
def goo_calc(value):
return value -2
def calculate_everything(x):
return {"aapl":aapl_calc(x), "goo":goo_calc(x)}
def appl_to_do():
print("appl was greater than zero")
def goo_to_do():
print("goo was greater than zero")
to_do = {"aapl": appl_to_do, "goo":goo_to_do}
results = calculate_everything(2)
#checking if anything is greater than zero is easy
if any(results.values()):
print("something return as 0")
#creating a list of greater than 0 to use as keys
greater_than_zero = [key for key, val in results.items() if val]
#run each of the values greater than 0
for each in greater_than_zero:
to_do[each]()
但是if
语句没有什么问题,阅读起来会更干净。
答案 1 :(得分:0)
不确定要执行的操作,但是可以将所有值放入numpy数组中并检查:
arr [arr == 0]
这将为您提供一个布尔数组,可用于仅对所需股票建立索引