将返回的“value”与python中的字符串进行比较

2024-10-02 02:39:29 发布

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

我有一个python脚本,它生成一个输入的链接列表,然后比较字符,以确保所有打开的方括号都有正确顺序的右括号。在

例如(9-{5*2(1+1)})==真 (9-{5*2{1+1))==错误

当我比较函数的返回值和字符串时,问题就来了。if函数就停在第152行。当我中断脚本时,会出现以下错误:

Traceback (most recent call last):
  File "lab2.py", line 195, in <module>
    bracketCheck(list)
  File "lab2.py", line 152, in bracketCheck
    if list.getNodeAtPosition(i) == '(' or list.getNodeAtPosition(i) == '{' or list.getNodeAtPosition(i) == '[':
      File "lab2.py", line 114, in getNodeAtPosition
    currentNode = currentNode.getNext()
keyboardInterrupt

下面是我的脚本代码,其中的链接列表深受DreamInCode中atraub的启发。此外,输入必须一次输入一个,直到输入“done”:

^{pr2}$

Tags: or函数inpy脚本列表if链接
3条回答

你的代码里逻辑错误太多了,我记不清了。。在

以下修改后的代码运行良好(基于我的基本测试),请执行diff并尝试查看原始代码中的错误:

def bracketCheck(myList):
    checkmyList = LinkedList()
    opencount=0
    closecount=0
    i=0
    isEqual = True
    while(i < myList.length):
        i=i+1
        if myList.getNodeAtPosition(i-1).cargo == '(' or myList.getNodeAtPosition(i-1).cargo == '{' or myList.getNodeAtPosition(i-1).cargo == '[':
            checkmyList.addLast(myList.getNodeAtPosition(i-1))
            opencount = opencount + 1
        if myList.getNodeAtPosition(i-1).cargo == ')':
            closecount = closecount + 1
            if checkmyList.getLast().__str__() == openbrackets[0]:
                checkmyList.removeLast()
            else:
                isEqual = False

        if myList.getNodeAtPosition(i-1).cargo == '}':
            closecount = closecount + 1
            if checkmyList.getLast().__str__() == openbrackets[1]:
                checkmyList.removeLast()
            else:
                isEqual = False

        if myList.getNodeAtPosition(i-1).cargo == ']':
            closecount = closecount + 1
            if checkmyList.getLast().__str__() == openbrackets[2]:
                checkmyList.removeLast()
            else:
                isEqual = False
    '''print checkmyList'''
    print opencount
    print closecount
    if isEqual == False:
        print "an extra is missing."
    else:
        print "win!"

print "Enter myList:"
myList = LinkedList()
while input != "done":
    input = raw_input()
    if input == "done":
        break
    myList.addLast(input)

print myList
bracketCheck(myList)

请记住上面的代码不是python代码,甚至不是“体面的”。在这里您几乎看不到原始代码中的逻辑缺陷。在

如果你想要一个Python的解决方案,请参考@yak的答案。在

brmap = dict(['()', '[]', '{}'])
closebr = set(brmap.values())

def check_brackets(expr):
    stack = []
    for c in expr:
        if c in brmap:
            stack.append(brmap[c])
        elif c in closebr and (not stack or stack.pop() != c):
            return False
    return not stack

为什么while(list.first.hasNext)会终止?
有些情况下,当您从列表中删除项时,有些情况下您不修改它。如果保持列表不变,它将永远循环。在

i=0; i=i+1是怎么回事?在

相关问题 更多 >

    热门问题