我开始学习蟒蛇了。在此代码中,我试图打印输入用户的生日以及他/她的姓名。我正在使用字典来实现这个功能。下面是我的代码片段
n=input("Enter Name: ")
def birth():
dict1={{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}}
if dict1["name"]==n:
print(dict1["name"]+"'s birth was on " +dict1["birthdate"])
else:
print("Not in database")
birth()在输入X时,我的预期输出应该如下所示:
X's birthdate was on 16-June-1989但是我的错误越来越少,我尝试了一个在线搜索,但我想了解我在这里错过了什么。我相信我会得到很多评论。但我也相信,许多人将提供建设性的和学习的建议。
File "main.py", line 8, in <module>
birth()
File "main.py", line 3, in birth
dict1={{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}}
TypeError: unhashable type: 'dict'发布于 2020-04-17 10:40:24
因为字典变量dict1不能解析自己的元素,所以需要创建一个变量/对象来解析通过解析变量p完成的字典元素。
n=input("Enter name: ")
def birth(n):
dict1=[{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}]
for p in dict1:
if p["name"]==n:
print(p["name"]+"'s birth was on " +p["birthdate"])
break;
else:
print("Not in database")
break;
birth(n)发布于 2020-04-17 07:54:44
定义dict1的方式是不正确的。应该是这样的:
In [1131]: def birth(n):
...: #dict1={{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}}
...: dict1=[{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}]
...: for d in dict1:
...: if d["name"]==n:
...: print(d["name"]+"'s birth was on " +d["birthdate"])
...: else:
...: print("Not in database")
...:
In [1132]: birth(n)
X's birth was on 16-June-1989此外,如果将用户输入n作为参数传递给函数birth,则更有意义。然后调用类似于birth(n)的方法。
否则,该方法将与名为n的变量紧密耦合。
发布于 2020-04-17 08:10:25
那是因为你的初始化错误。在python中,花括号不仅用于dict文字,而且用于set文字。您可以在这个问题中获得更多信息。
例如:
# that will be a dict:
d = {"name": "My name", "birthdate": "16-June-1989"}
# and that will be a set:
d = {"name", "birthdate"}
# your line 3 has set initialization, which contains 2 dicts of user info:
dict1={{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}}另一个问题是Python集合中必须只包含可哈斯的元素和dict,这是不可接受的。这是解释。
因此,您应该将dict1变量类型更改为list或tuple。如果您需要更多关于列表、集合和元组之间的差异的信息,这里有一个关于数据结构的python 文档的链接。
此外,您的函数还将为数据库中的每个条目打印一些内容。我认为在函数执行之后只需要打印一次。
因此,您的功能应该如下所示:
def birth(name):
database = [{"name": "X", "birthdate": "16-June-1989"},
{"name": "Y", "birthdate": "23-08-1990"}]
found = False
for entry in database:
if entry["name"] == name:
print(entry["name"] + "'s birth was on " + entry["birthdate"])
found = True
break
if not found:
print("Not in database")
birth('X')
# Will print: X's birth was on 16-June-1989
birth('My name is')
# Will print: Not in databasehttps://stackoverflow.com/questions/61266478
复制相似问题