对于这个编码练习,我应该接受一个字母数字的建筑代码列表,并输出带有相应代码描述信息的json数据—相关数据列在我的函数下面。我知道我的解决方案不好,但我有点傻,不知道我应该怎么做。在
def return_code(code):
"""takes in a list of codes and returns a json dictionary of codes and corresponding
descriptions"""
data = []
for c in code:
if c.startswith("M") and "R" in c:
#gets mixed Res and Manufacturing districts
data.append({"code": c, "description": "Mixed Manufacturing & Residential
Districts"})
if c.startswith("M") and "R" not in c:
data.append({"code": c, "description": "Manufacturing Districts"})
if c.startswith("R"):
data.append({"code": c, "description": "Residential Districts"})
if c.startswith("ZR"):
data.append({"code": c, "description": "Special Zoning District"})
if c == "ZNA":
data.append({"code": c, "description": "Zoning Not Applicable"})
if c == "BPC":
data.append({"code": c, "description": "Battery Park City"})
if c == "PARK":
data.append({"code": c, "description": "New York City Parks"})
if c == "PARKNYS":
data.append({"code": c, "description": "New York State Parks"})
if c == "PARKUS":
data.append({"code": c, "description": "United States Parks"})
if c.startswith("ZR"):
data.append({"code": c, "description": "Special Zoning District"})
else:
pass
return json.dumps(data)
如下所示,例如,R1-1和R10H之间的任何代码都是“住宅”的,但我不确定应该如何检查某个值是否介于这些字母数字值之间?我想用一个包含所有代码和相应信息的字典,但是在这种情况下格式是不同的。R1-1有破折号,R10H没有。最好的检查方法是什么?在
正如评论中所讨论的,这似乎是正则表达式的工作。所有可能的代码的实际细节似乎对您的任务没有太大的影响,您应该能够通过查看字符串的开头来区分大多数代码。在
在你的字典里定义他们各自的正则表达式。这应该让您开始:
几句话:
for
循环——在本例中,是根据当前代码检查所有已定义模式的循环。在我们找到一个匹配的之后,就没有必要再检查其他的了。在for..else
中的部分将被调用,这意味着它不是由break
退出的。在我们的例子中,这意味着我们检查了所有的模式,但没有一个匹配-所以这可能是一个无效的构建代码,一个丢失的模式,一个不正确的模式。。。在PATTERNS
字典的最后一个条目后面留下逗号。Python允许这样做,尽管这不是必需的,这太棒了。因为这意味着您可以轻松地复制和粘贴行来填充其余的模式,并将它们向上或向下移动,而不必总是删除/添加逗号。在相关问题 更多 >
编程相关推荐