我对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”。希望这有道理。
答案 0 :(得分:1)
您可以使用list
的{{1}}方法:
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']
答案 1 :(得分:0)
如果您不想更改原始列表,这可能会很有用。
这将创建一个新列表。
此代码将删除除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']