我仍然是python的新手,我的代码有问题。
好像我的循环没有遍历整个网络。网络是一个列表,其中每个元素是一个人的字典,它告诉人的名字,它喜欢哪些游戏,以及它连接到谁。 我通过在循环中放置一条打印线来测试循环,它只显示第一个元素。因此,我的结果是正确的,如果它是关于我网络中的第一个元素。
所以,如果我print add_connection(network, "John", "Mercedes")
我得到了更新的网络连接,这是我所期望的,所以这很好。但是,如果我print add_connection(network, "Bryant", "John")
我希望再次获得更新的网络,而是返回网络不变。这是我的代码:
network = [{'Games': ['The Movie: The Game', 'The Legend of Corgi', 'Dinosaur Diner'], 'Connected': ['Bryant', 'Debra', 'Walter'], 'Name': 'John'}, {'Games': ['City Comptroller: The Fiscal Dilemma', 'Super Mushroom Man'], 'Connected': ['Olive', 'Ollie', 'Freda', 'Mercedes'], 'Name': 'Bryant'}, {'Games': ['The Legend of Corgi', 'Pirates in Java Island', 'Seahorse Adventures'], 'Connected': ['Walter', 'Robin', 'Bryant'], 'Name': 'Mercedes'}]
def add_connection(network, user_A, user_B):
for eachPerson in network:
if user_A == eachPerson["Name"]:
exists = False
for connection in eachPerson["Connected"]:
if connection == user_B:
exists = True
if exists == False:
eachPerson["Connected"].append(user_B)
return network
return "network unchanged"
print add_connection(network, "John", "Mercedes")
print add_connection(network, "Bryant", "John")
有谁知道我做错了什么? 感谢
答案 0 :(得分:0)
您是否尝试使用调试器来完成此操作?我的python有点生疏,但从它的外观来看,如果eachPerson["Connected"]
为空,该方法可以在第一次迭代后终止。
答案 1 :(得分:0)
有两种情况会终止。
if check_in_Network(network, user_A, user_B) == False:
可以写成(不要使用camelcase函数名称):
if not check_in_network(network, user_A, user_B):
第二个是如果userA在网络中,并且没有与userB的连接。这听起来不错吗?您可以使用以下命令逐步执行代码以执行:
import pdb
pdb.set_trace()
在功能开始时添加以上内容。 命令在这里:https://docs.python.org/2/library/pdb.html#debugger-commands
大多数情况下,你需要n(下一个),s(步骤),r(返回)和c(继续)。