使用条件节点链接在链表上迭代

2024-06-16 08:55:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编码的概念非常陌生,所以我不能100%确定我在问什么。我有一个对象列表,其中包含一个框的ID、可选择选项的数量以及它链接到的框的ID

我正在尝试按顺序遍历这些框,将所有可能选择的选项相加 enter image description here

例如,“连接6”总共有3个,“连接7”总共有2个,“连接4”总共有7个

我有2个类,1个设置列表中的所有链接,1个遍历它们。我还没能达到求和部分,因为无论我做什么,都会永远打印出第一个盒子的ID,直到它崩溃VS(不知道如何阻止它在开始运行时做我的蠢事,即使关闭终端也无济于事)

class Node:
    def __init__(self, box_id):
        self.box_id = box_id
        self.options_number = None
        self.pre = None
        self.next = None
    def __repr__(self):
        return self.box_id

class LinkedList():
    def __init__(self, nodes=None):
        self.head = None
        self.reg_num = 0
        if nodes is not None:
            for node in nodes:
                box_id = node.box_id
                # print(f'One: {box_id}')
                # box_id = node.next
                # print(f'Two: {box_id}')
                # if box_id == []:
                #     print("I should really stop")
                while box_id != []:
                    print(box_id)
                    box_id = node.next

下面是打印出节点的样子

nodes = node_setup(test)
for node in nodes:
   print(f'Question Text: {node.name}  Current: {node.box_id} Options: {node.options_number} Next Link: {node.next}')
Question Text: Connect 1  Current: {30706B51-789C-4AFA-998D-759297B95F99} Options: 1 Next Link: ['{EA65B6DA-90FE-412A-AF1F-83F994CCB5FA}']
Question Text: Connect 2  Current: {EA65B6DA-90FE-412A-AF1F-83F994CCB5FA} Options: 3 Next Link: ['{77AC8029-95D8-4DA8-9B62-D487DBA742D6}']
Question Text: Connect 3  Current: {77AC8029-95D8-4DA8-9B62-D487DBA742D6} Options: 1 Next Link: ['{DF56E1B2-DD19-485D-B720-A5A28AA6C156}']
Question Text: Connect 5  Current: {B4045D8D-6E54-4E43-B820-4C70036F08AF} Options: 1 Next Link: ['{D1720CEC-81FF-4460-A5CB-86BC9B5AB7F5}']
Question Text: Connect 4  Current: {DF56E1B2-DD19-485D-B720-A5A28AA6C156} Options: 2 Next Link: ['{B4045D8D-6E54-4E43-B820-4C70036F08AF}', '{8C51E3B4-7302-4453-AEE0-7C9E659CA2B0}']
Question Text: Connect 6  Current: {8C51E3B4-7302-4453-AEE0-7C9E659CA2B0} Options: 2 Next Link: ['{D837ECDC-897D-4A91-89E3-F6222FE12F06}']
Question Text: Connect 7  Current: {D1720CEC-81FF-4460-A5CB-86BC9B5AB7F5} Options: 1 Next Link: ['{D837ECDC-897D-4A91-89E3-F6222FE12F06}']
Question Text: Connect 8  Current: {D837ECDC-897D-4A91-89E3-F6222FE12F06} Options: 1 Next Link: []

在这里,它运行的是LinkedList

for node in nodes:
    print(f'Question Text: {node.name}  Current: {node.box_id} Options: {node.options_number} Next Link: {node.next}')
plz_Work = LinkedList(nodes)
Question Text: Connect 1  Current: {30706B51-789C-4AFA-998D-759297B95F99} Options: 1 Next Link: ['{EA65B6DA-90FE-412A-AF1F-83F994CCB5FA}']
Question Text: Connect 2  Current: {EA65B6DA-90FE-412A-AF1F-83F994CCB5FA} Options: 3 Next Link: ['{77AC8029-95D8-4DA8-9B62-D487DBA742D6}']
Question Text: Connect 3  Current: {77AC8029-95D8-4DA8-9B62-D487DBA742D6} Options: 1 Next Link: ['{DF56E1B2-DD19-485D-B720-A5A28AA6C156}']
Question Text: Connect 5  Current: {B4045D8D-6E54-4E43-B820-4C70036F08AF} Options: 1 Next Link: ['{D1720CEC-81FF-4460-A5CB-86BC9B5AB7F5}']
Question Text: Connect 4  Current: {DF56E1B2-DD19-485D-B720-A5A28AA6C156} Options: 2 Next Link: ['{B4045D8D-6E54-4E43-B820-4C70036F08AF}', '{8C51E3B4-7302-4453-AEE0-7C9E659CA2B0}']
Question Text: Connect 6  Current: {8C51E3B4-7302-4453-AEE0-7C9E659CA2B0} Options: 2 Next Link: ['{D837ECDC-897D-4A91-89E3-F6222FE12F06}']
Question Text: Connect 7  Current: {D1720CEC-81FF-4460-A5CB-86BC9B5AB7F5} Options: 1 Next Link: ['{D837ECDC-897D-4A91-89E3-F6222FE12F06}']
Question Text: Connect 8  Current: {D837ECDC-897D-4A91-89E3-F6222FE12F06} Options: 1 Next Link: []
['{EA65B6DA-90FE-412A-AF1F-83F994CCB5FA}']
['{EA65B6DA-90FE-412A-AF1F-83F994CCB5FA}']
['{EA65B6DA-90FE-412A-AF1F-83F994CCB5FA}']
['{EA65B6DA-90FE-412A-AF1F-83F994CCB5FA}']
['{EA65B6DA-90FE-412A-AF1F-83F994CCB5FA}']
ect....

老实说,我非常非常不知道该怎么做,我非常感谢任何人能给予我的帮助


Tags: textselfboxnoneidnodeconnectlink
1条回答
网友
1楼 · 发布于 2024-06-16 08:55:00

我现在已经解决了。我在错误的地方得到了答案

它仍然不完美,因为我不能让它在有2个链接的地方工作,但现在这让我通过了永久循环,能够解决其余的问题

class LinkedList():
def __init__(self, nodes=None):
    self.head = None
    self.reg_num = 0
    if nodes is not None:
        box_id = nodes[0].box_id
        while box_id != []:
            node_range = len(nodes)
            for node in range(node_range):
                if box_id == nodes[node].box_id:
                    name = nodes[node].name
                    print(f'name {name}')
                    next_id = nodes[node].next
                    if next_id != []:
                        next_id = next_id[0] #This needs to be something more clever
                    box_id = next_id

和印刷品

name Connect 1
name Connect 2
name Connect 3
name Connect 4
name Connect 5
name Connect 7
name Connect 8

====================================================================================

编辑:现在就想好怎么做了

start_id = nodes[0].box_id
plz_Work = LinkedList(nodes, start_id)

阶级

class LinkedList():
def __init__(self, nodes, start_id):
    if nodes is not None:
        box_id = start_id
        while box_id != []:
            node_range = len(nodes)
            for node in range(node_range):
                if box_id == nodes[node].box_id:
                    name = nodes[node].name
                    print(f'name: {name}')
                    next_id = nodes[node].next
                    if next_id != []:
                        next_range = len(next_id)
                        if next_range < 2:
                            next_id = next_id[0]
                        else:
                            for next_num in range(next_range):
                                LinkedList(nodes, next_id[next_num])
                            next_id = []
                    box_id = next_id

印刷品

name: Connect 1
name: Connect 2
name: Connect 3
name: Connect 4
name: Connect 5
name: Connect 7
name: Connect 8
name: Connect 6
name: Connect 8

相关问题 更多 >