如何通过允许用户在列表中插入现金量并且列表在字符串中来使收银机总计?

时间:2018-08-04 17:38:08

标签: python python-3.x while-loop

我想通过允许用户在列表中插入现金量来使收银机总计。但这给了我这个错误:

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()

1 个答案:

答案 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))