我是Python的新手,正在尝试写一个基于文本的游戏,它使用从各种卡片中提取的卡片,包括资源卡片。我正在尝试编写代码,使用户能够交易他们手中的资源,以使用列表做其他事情。我已经设法做到了这一点,如果用户交易每个资源的1个,但如果他们想交易相同资源的3个,则会遇到麻烦。
我在这里和几个不同的网站上进行了搜索,但他们只说如何删除列表中元素的所有实例。在列表中引用索引,例如。使用pop或del将不起作用,因为用户手中的牌在游戏中不断变化。
resources = ["A","A","B","C","A","B"]
print(resources)
if "A" in resources and "B" in resources and "C" in resources:
resources.remove("A")
resources.remove("B")
resources.remove("C")
else:
print("You do not have 1 of each resource!")
print(resources)
for i in range(3):
if "A" in resources:
resources.remove("A")
else:
print("You do not have 3 of 'A' resource!")
print(resources)这不是我要找的,因为即使用户没有3个"A",它也会删除2个"A“。我需要一些方法来检查用户的手,看看他们是否有3个或更多的"A“,如果他们没有,不要删除任何"A”。希望这是有意义的。
发布于 2019-06-16 00:22:35
可以使用list的count()方法
resources = ["A","A","B","C","A","B"]
# check if user has 3+ "A"
if resources.count("A") > 2:
# yes, remove 2 "A"s
for i in range(2):
resources.remove("A")
print(resources)打印:
['B', 'C', 'A', 'B']发布于 2019-06-16 01:19:24
如果您不想更改原始列表,这可能会很有用。
这将创建一个新列表。
此代码将删除除2项以外的所有项,其中任何项的数量超过2项。我添加了四个D来演示。
from collections import Counter
resources = ["A","A","B","C","A","B", *["D"] * 4]
list(''.join(item * 2 if count > 2 else item * count
for item, count in Counter(resources).items()))输出:['A', 'A', 'B', 'B', 'C', 'D', 'D']
https://stackoverflow.com/questions/56612119
复制相似问题