我想通过允许用户在列表中插入现金量来使收银机总计。但这给了我这个错误:
const s3 = new AWS.S3()
s3.config.update({
accessKeyId:keys.accessKeyId,
secretAcccessKey:keys.secretAcccessKey,
region: 'us-west-2'
});
router.get('/',
passport.authenticate('jwt',{session:false}),
(req,res)=>{
const key =`${req.user.id}/${uuid()}.jpeg`;
s3.getSignedUrl(
'putObject',{
Bucket:'NameOfBucket',
ContentType:'jpeg',
Key:key,
Expires:1000
},
(e,url)=>res.json({e}));
});
在这里附上我的代码。我想知道我的代码是什么问题?但是在这里我必须做Purchase :12
Purchase :23
Purchase :12
Purchase :29.2
Purchase :11
Purchase :q
['12', '23', '12', '29.2', '11']
11.0
['12', '23', '12']
12.0
['12']
12.0
Traceback (most recent call last):
File "C:\Users\Wan Afifi\Desktop\Python\append.py", line 17, in <module>
add = float(purchase_amount.pop())
IndexError: pop from empty list
才能完成任务。
.pop()
答案 0 :(得分:1)
您每次循环迭代都会从列表中弹出一个元素两次:
while len(purchase_amount) != 0:
print(float(purchase_amount.pop()))
add = float(purchase_amount.pop())
除非列表中元素的数量为偶数,否则将导致问题,因为您没有没有在最后弹出第二个元素。
您只需要弹出一次 ,然后打印您分配给add
的值:
while len(purchase_amount) != 0:
add = float(purchase_amount.pop())
print(add)
# ...
!= 0
测试是可选的,因为在布尔型上下文(例如while
)中,非零整数值被视为“ true”。也可以删除len()
调用,因为非空列表也被认为是真实的:
while purchase_amount:
add = float(purchase_amount.pop())
print(add)
# ...
接下来,您要将值添加到收集的总计中。当前,您每次迭代都将subtotal
变量替换为添加到自身的add
:
while purchase_amount:
add = float(purchase_amount.pop())
subtotal = subtotal + add
接下来,您根本不需要使用list.pop()
。只需直接遍历列表即可:
for add in purchase_amount:
add = float(add)
subtotal = subtotal + add
您可以使用+=
扩充作业来缩短最后一行:
for add in purchase_amount:
add = float(add)
subtotal += add
您可以使用map()
函数进一步缩短它的时间,以在循环时将所有元素转换为浮点数,并使用sum()
函数将序列中的所有值相加:
subtotal = sum(map(float, purchase_amount))