Python:我的for循环不起作用。只检查第一个元素

时间:2017-08-03 15:36:21

标签: python for-loop

我仍然是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")

有谁知道我做错了什么? 感谢

2 个答案:

答案 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(继续)。