Python 3.x 我有一个查询,在执行下面的代码时,我';m获取类型错误“;Int对象不可iterable“;
然而,我试图理解使用pythontutor,我在Zip参数中得到了错误Python 3.x 我有一个查询,在执行下面的代码时,我';m获取类型错误“;Int对象不可iterable“;,python-3.x,Python 3.x,然而,我试图理解使用pythontutor,我在Zip参数中得到了错误 probs = [0.315, 0.226, 0.289, 0.087, 0.083] paper = [533, 486, 386, 234, 263] demand_paper2= 0 for probs, paper in zip (probs, paper): demand_paper2 = demand_paper2 + probs * paper print( 'Expected demand:
probs = [0.315, 0.226, 0.289, 0.087, 0.083]
paper = [533, 486, 386, 234, 263]
demand_paper2= 0
for probs, paper in zip (probs, paper):
demand_paper2 = demand_paper2 + probs * paper
print( 'Expected demand: ' + str(demand_paper2))
var1 = sum([prob * (d- demand_paper2)**2
for prob, d in zip(probs, demand_paper2)])
std1 = var1 ** 0.5
print('The standard deviation of demand: {0:0.3f}'.format(std1))
这次通话都有两个问题:
zip(问题,需求文件2)
第一个问题是您在第一个循环中意外反弹了probs
变量。因此,它现在只包含一个值(列表中的最后一个值),而不是在代码开始时绑定到的原始列表
第二个问题是zip
的另一个参数。demand\u paper2
变量是一个数字,因此也不能迭代。我认为您希望在原始的文件
列表上进行迭代,但该列表不可用,但至少这将问题简化为具有相同问题的两个变量
解决整个问题的方法就是选择新的变量名。如果列表的名称与第一个循环中的变量的名称不同,那么就可以了
probs = [0.315, 0.226, 0.289, 0.087, 0.083]
papers = [533, 486, 386, 234, 263] # renamed this variable
demand_paper2= 0
for prob, paper in zip (probs, papers): # and use prob and papers here
demand_paper2 = demand_paper2 + prob * paper
print( 'Expected demand: ' + str(demand_paper2))
var1 = sum([prob * (d- demand_paper2)**2
for prob, d in zip(probs, papers)]) # refer to the papers list here
std1 = var1 ** 0.5
print('The standard deviation of demand: {0:0.3f}'.format(std1))
demand\u paper2
变量名也很糟糕,但我保持原样,因为它现在实际上并没有引起任何问题。但它可能会更好,比如预期的\u-paper
或其他什么 zip中'for prob,d(probs,demand_paper2)]的缩进错误d
invar1=sum([prob*(d-demand_paper2)**2
@PatrickArtner:我得到问题标题中描述的错误。您的问题必须来自于在sum
调用中作为两行单独输入多行列表理解。