Python 在if/elif语句中不起作用的列表和词汇
代码如下:Python 在if/elif语句中不起作用的列表和词汇,python,list,function,if-statement,dictionary,Python,List,Function,If Statement,Dictionary,代码如下: def resetInv(inventory): if type(inventory) == list: inventory=[] return(inventory) elif type(inventory) == dict: return({}) elif type(inventory) == str: return('nothing in inventory') elif type(i
def resetInv(inventory):
if type(inventory) == list:
inventory=[]
return(inventory)
elif type(inventory) == dict:
return({})
elif type(inventory) == str:
return('nothing in inventory')
elif type(inventory) == bool:
return(False)
else:
return('not inventory type')
它适用于str和bool,但不适用于列表和字典。一些提示:
- PEP8建议函数使用不带边框的_名称(而不是camelCaseNames)
- 不要使用类型,如果必须检查类型,请使用
功能isinstance
- 在Python中,检查类型通常是一种代码气味——使用duck类型或更改算法
>>> def reset_inv(inventory):
if isinstance(inventory, list):
return []
elif isinstance(inventory, dict):
return {}
elif isinstance(inventory, str):
return 'nothing in inventory'
elif isinstance(inventory, bool):
return False
else:
return 'not inventory type'
>>> reset_inv([1, 2, 3])
[]
>>> reset_inv({"a": 1})
{}
>>> reset_inv("foo")
'nothing in inventory'
>>> reset_inv(True)
False
>>> reset_inv(0.1)
'not inventory type'
编写清单系统的惯用方法可能是使用简单的列表或dict作为对象的容器。下面我使用的是字符串,但您可能应该为库存项目编写一个类,该类具有值、重量等属性
>>> from collections import Counter
>>> class Inventory(object):
def __init__(self, items = None):
if items is None:
self.reset()
else:
self.items = items
def reset(self):
self.items = []
def report(self):
if not self.items:
print("Your sac is empty.")
return
print("You have {} items in your sac.".format(len(self.items)))
counter = Counter(self.items).items()
for count, item in counter:
print("{: >3} {}".format(item, count))
>>> inv = Inventory(['knife', 'rock', 'rock', 'cloth'])
>>> inv.report()
You have 4 items in your sac.
1 cloth
1 knife
2 rock
>>> inv.items.append('coin')
>>> inv.report()
You have 5 items in your sac.
1 cloth
1 coin
1 knife
2 rock
>>> inv.items.remove('rock')
>>> inv.report()
You have 4 items in your sac.
1 cloth
1 coin
1 knife
1 rock
>>> inv.reset()
>>> inv.report()
Your sac is empty.
你想通过这个来实现什么?非Pythonic中的代码是极端的。当dict和bool暗示您想要返回一个“空”对象时,为什么要将字符串
none
添加到列表和字符串中?我正在尝试实现一个函数来重置玩家的库存,例如,如果他们死亡并丢失了所有物品。这是为了测试,我想知道这是否是问题所在,一定是忘了把它解决掉了。对不起,什么是“库存”?这不可能是同时发生的所有事情。@BurhanKhalid:我可能太愚蠢了,无法理解这个笑话。谢谢,这很有帮助。我不能百分之百地理解它,但我知道如何使用它,这是最重要的。