python - Python抛出ValueError:list.remove(x):x不在列表中(不在列表上迭代)
问题描述
我正在尝试解决 Vasya-Clerk 的 codewars kata。我收到值错误,因为我正在从列表中删除项目。我读到我应该制作列表的副本,但由于我没有迭代列表本身,而只是附加和删除值,所以我不太清楚如何以及在何处使用命令 [:] 进行此复制。我知道我可以用字典更好地解决这个问题,但如果可能的话,我想用列表来完成它。
以下是说明: 新的“复仇者联盟”电影刚刚上映!电影院售票处有很多人排着长队。他们每个人都有一张 100、50 或 25 美元的钞票。“复仇者联盟”的票价为 25 美元。Vasya 目前是一名文员。他想把一张票卖给这条线上的每个人。如果 Vasya 最初没有钱并且严格按照人们排队的顺序出售门票,是否可以向每个人出售一张票并找零?返回 YES,如果 Vasya 可以向每个人出售一张票并用他当时手头的账单找零。否则返回 NO
def tickets(people):
cash = []
for bill in people:
if bill == 25:
cash.append(bill)
elif bill == 50:
if 25 in cash:
cash.append(bill)
cash.remove(25)
else:
return "NO"
elif bill == 100:
if 25 and 50 in cash:
cash.append(bill)
cash.remove(25)
cash.remove(50)
elif 25 and 25 and 25 in cash:
cash.append(bill)
cash.remove(25)
cash.remove(25)
cash.remove(25)
else:
return "NO"
else:
return "NO"
return "YES"
test.assert_equals(tickets([25, 25, 50]), "YES")
test.assert_equals(tickets([25, 100]), "NO")
解决方案
您的问题在于以下两行:
if 25 and 50 in cash:
和
elif 25 and 25 and 25 in cash:
与您的假设相反,第一个与 相同,50 in cash
第二个评估为25 in cash
。相反,您要正确指定条件,并计算 25 的现金数量。他们成为:
if 25 in cash and 50 in cash:
和
elif cash.count(25) >= 3:
推荐阅读
- javascript - 键/值对的值也可以是键吗?
- python - 无法抓取多个网址
- python - 如何在 Flask 中使用翻译?
- spring-boot - 使用 SpringBoot @KafkaHandler 时访问 Avro 模式版本
- google-apps-script - Google Apps 脚本:如何运行 .gs 文件中的所有功能?
- python - 使用 huggingface fill-mask pipeline 获得超过 5 条建议
- javascript - Suitescript:无法从搜索中获取结果
- python - Python:这个数组元素替换正确吗?
- node.js - 在 find() mongoDB/mongoose 查询结果中格式化日期?
- angular - Angular 8 ngx-cookie 2.4 无法从 FireFox 读取(即使它存在)但适用于 Chrome/Edge