【发布时间】:2012-05-09 06:01:56
【问题描述】:
我编写了一个简单的脚本来根据每用户平均收入 (ARPU)、利润和客户保持客户的年数 (ltvYears) 来模拟客户生命周期价值 (LTV)。下面是我的脚本。它在“ltvYears = ltvYears + [ltv_loop]”这一行引发错误。错误消息是“TypeError: can only concatenate tuple (not "list") to tuple”。有人可以告诉我是什么原因造成的吗?我怀疑问题可能源于“ltvYears = ('f',[])”,我在其中添加了类型代码以消除另一个错误(将 float 乘以 int)。
我是 Python 新手,所以这段代码很可能是初学者的错误。
lowYears = 0
highYears = 20
modeYears = 3
ARPU = 65.0*12.0
MARGIN = .30
ltvYears = ('f',[])
ltv = []
def ltv(arpu, years, margin):
return arpu * years * margin
N = 10000
for n in range(N):
#estimate LTV
ltv_loop = random.triangular(lowYears, highYears, modeYears)
ltvYears = ltvYears + [ltv_loop]
ltv = ltv + [ltv(ARPU, ltvYears, MARGIN)]
show = 0
if (show==1):
#plot ltv histogram
plt.hist(ltv,bins=10)
plt.title("LTV Probability Density")
plt.xlabel("")
plt.ylabel("$")
plt.show()
编辑 - 这是我的变量的屏幕截图。
EDIT2 ---我在下面的帮助下找到了解决方案。一共有三个问题:
- 我错误地将相同的名称分配给变量和函数(+1 @autopopulated 指出这一点)
- 这一行是多余的“ltvYears = ltvYears + [ltv_loop]”
- 这一行本应使用“ltv_loop”作为第二个参数“ltv = ltv + [calculateltv(ARPU, ltv_loop, MARGIN)]”
+1 @DonCallisto 和 @RikPoggi 对项目 2 和 3 的帮助
【问题讨论】:
-
发布整个错误信息,这比将其拆分成文本更清晰。
-
“我在哪里添加了类型代码”错误...“类型代码”是什么意思?
-
@Lattyware 我正在寻找更具描述性的错误消息。我提出的问题是我从 Pyscripter(我必须在这台机器上使用)得到的全部内容。
-
@MarkByers 我指的是 ltvYears = ('f',[])。我添加了“f”以指示该数组将包含浮点数。在我这样做之前,我遇到了一个关于将浮点数和整数相乘的错误。
-
@hughesdan:“数组”是什么意思?那是一个元组,而不是一个数组。 'f' 如何表示它包含浮点数?对我来说,它看起来像是包含一个字符串和一个列表。
标签: python