【问题标题】:Python loop issuePython循环问题
【发布时间】:2017-06-01 14:21:22
【问题描述】:

我一直在 Udacity 上课,我正在提交我的期末项目。

我必须通过解析一个字符串来创建一个数据结构:-

example_input="John 与 Bryant、Debra、Walter 有联系。\ John 喜欢 播放电影:游戏、柯基传奇、恐龙餐厅。\ 科比与奥利弗、奥利、弗雷达、梅赛德斯有联系。\科比喜欢 播放城市审计长:财政困境,超级蘑菇人。\ 梅赛德斯与沃尔特、罗宾、科比有联系。\梅赛德斯喜欢 玩柯基传奇、爪哇岛海盗、海马 Adventures.\ Olive 与 John、Ollie 有联系。\ Olive 喜欢玩 柯基传奇,星际舰队指挥官。\黛布拉连接到 Walter、Levi、Jennie、Robin。\ Debra 喜欢扮演七谋士, 爪哇岛的海盗,矮人和剑。\沃尔特连接到 John, Levi, Bryant.\ Walter 喜欢玩海马历险记、忍者 仓鼠,超级蘑菇人。\李维与奥利,约翰, Walter.\ Levi喜欢玩柯基传奇,七谋士,城市 Comptroller: The Fiscal Dilemma.\ Ollie 与 Mercedes 有联系, Freda, Bryant.\ Ollie 喜欢玩《武器召唤》、《矮人与剑》, The Movie: The Game.\ Jennie 与 Levi、John、Freda、 罗宾.\珍妮喜欢玩超级蘑菇人、恐龙餐厅、电话 武器。\罗宾连接到奥利。\罗宾喜欢玩Call of Arms、Dwarves 和 Swords。\ Freda 与 Olive、John、Debra 有联系。\ Freda喜欢玩星际舰队指挥官、忍者仓鼠、海马 冒险。”

我成功地做到了,我的输出数据结构如下:-

[['John', ['Bryant', 'Debra', 'Walter'], ['The Movie: The Game', 'The 柯基传奇','恐龙餐厅']],['科比',['橄榄','奥利', '弗雷达','梅赛德斯'],['城市审计员:财政困境','超级 蘑菇人]], ['梅赛德斯', ['沃尔特', '罗宾', '科比'], ['The 《柯基传奇》、《爪哇岛海盗》、《海马历险记》]]、 ['橄榄',['约翰','奥利'],['柯基传奇','星际舰队 指挥官']],['黛布拉',['沃尔特','李维','珍妮','罗宾'],['七 阴谋家,“爪哇岛的海盗”,“矮人与剑”]], ['Walter', ['John', 'Levi', 'Bryant'], ['Seahorse Adventures', 'Ninja 仓鼠','超级蘑菇人']],['Levi',['Ollie','John', '沃尔特'],['柯基传奇','七个计划者','城市 Comptroller: The Fiscal Dilemma']], ['Ollie', ['Mercedes', 'Freda', '布莱恩特'],['武器的召唤','矮人和剑','电影: Game']], ['Jennie', ['Levi', 'John', 'Freda', 'Robin'], ['Super 蘑菇人','恐龙餐厅','武器的召唤']],['罗宾', ['奥利'],['武器的召唤','矮人和剑']],['弗雷达', ['橄榄','约翰','黛布拉'],['星际舰队指挥官','忍者仓鼠', 《海马历险记》]]]

问题是我需要定义一个过程来查找我所做的连接的连接,但它运行不正常。嵌套循环只运行一次迭代。我不知道为什么。我尝试正常循环,也尝试使用范围函数。我也使用了while循环,但没有任何效果。这是我下面的代码:-

    def get_secondary_connections(network, user):
        found=False
        for entry in network:
            if entry[0]==user:
                connections=entry[1]
                found=True
        connection_of_connections=[]
        i=0
        while i <len(connections):
            for entry in network:
                if connections[i] in entry[0]:
                    connection_of_connections=connection_of_connections+entry[1]
i=i+1
        if found == True:
            return connection_of_connections
        else:
            return None
    print get_secondary_connections(net, 'John')

【问题讨论】:

  • 你能美化你的输出数据结构吗?看到结构如何在没有换行符和缩进的情况下嵌套是很痛苦的。您可以将其粘贴到在线 json 格式化程序中。
  • 另外,你的i=i+1不知何故丢失了它的缩进。
  • 为什么不使用字典而不是列表?
  • 没有。在发布这个问题时,缩进已经出现了一些问题,并且一些代码没有被接受,所以我不得不做一些调整,导致我没有正确缩进。我必须向你保证,'i=i+1' 是在正确的位置。 @ashbygeek
  • Umm... 如果它在正确的位置,那么 get_secondary_connections 函数在 i=i+1 之前的行结束,i=i+1 语句在任何包含该语句的类或脚本中作为单个指令浮动函数,i=i+1 之后的其余代码完全违反了 Python 的缩进规则。所以,请看 AS Mackay 的回答

标签: python loops


【解决方案1】:

从您的代码缩进中并不清楚您打算如何进行搜索,但是我用您的数据测试了以下修改后的版本,它似乎可以工作:

def get_secondary_connections(network, user):
    connection_of_connections=[]    
    for entry in network:
        if entry[0]==user:
            connections=entry[1]
            i=0
            while i < len(connections):
                connection = connections[i]
                for other_entry in network:
                    if other_entry[0] == connection:
                        for item in other_entry[1]:
                            if (item != user) and (not item in connection_of_connections):
                                connection_of_connections.append(item)
                i=i+1
    if len(connection_of_connections) > 0:
        return connection_of_connections
    else:
        return None

希望这有帮助。

【讨论】:

  • 你是救生员。万分感谢。顺便说一句,我只是好奇为什么我的代码没有像我预期的那样运行。我可能会学到一些我不知道的东西。请教。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2014-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多