首页 > 解决方案 > 我正在尝试检查括号是否完整并计算两个括号的完整和不完整,但我得到了不正确的输出

问题描述

txt = input("Enter any Brackets : ")

j = 0
k = 0
for i in txt:
    if i == "(" or i == "{" or i == "[":
        j += 1
    if i == ")" or i == "}" or i == "]":
        k += 1
if j < k and j != 0 and k != 0:
    print("complete" + str(j))
    print("incomplete" + str(k - j))
elif j > k and j != 0 and k != 0:
    print("complete" + str(k))
    print("incomplete" + str(j - k))
elif j == k and j != 0 and k != 0:
    print("complete"+str(k))

输出:

Enter bracket : (()}
complete2

但预期的输出是:

complete 1 and incomplete 1

标签: python

解决方案


您正在单个if语句中检查所有括号类型,基本上等同({等等。您应该做的是将每种类型的打开和关闭分别分开并单独记录每种类型。

Python 将匹配和计数作为一个内置函数,你可以使用它,String.count('pattern')所以我用它来编写更简洁的代码。

此外,由于我们同时跟踪开口和闭合,我们可以确定不匹配是开口类型还是闭合类型。

这是我对您的问题的解决方案:

txt = input("Enter brackets : ")

opened_parentheses = txt.count('(')
closed_parentheses = txt.count(')')
opened_braces = txt.count('{')
closed_braces = txt.count('}')
opened_brackets = txt.count('[')
closed_brackets = txt.count(']')

parentheses = opened_parentheses - closed_parentheses
braces = opened_braces - closed_braces
brackets = opened_brackets - closed_brackets

report = ''

if opened_parentheses > 0 or closed_parentheses > 0:
    if parentheses == 0:
        report += f'{closed_parentheses} complete parentheses \n'
    elif parentheses < 0:
        report += f'{abs(parentheses)} parentheses missing openings\n'
    else:
        report += f'{parentheses} parentheses missing closure\n'
else:
    report += 'no parentheses\n'

if opened_braces > 0 or closed_braces > 0:
    if braces == 0:
        report += f'{closed_braces} complete braces \n'
    elif braces < 0:
        report += f'{abs(braces)} braces missing openings\n'
    else:
        report += f'{braces} braces missing closure\n'
else:
    report += 'no braces\n'

if opened_brackets > 0 or closed_brackets > 0:
    if brackets == 0:
        report += f'{closed_brackets} complete brackets \n'
    elif brackets < 0:
        report += f'{abs(brackets)} brackets missing openings\n'
    else:
        report += f'{brackets} brackets missing closure\n'
else:
    report += 'no brackets\n'

print(report)

作为一个很好的后续实践,您可以通过实施一种方法来确定不正确的模式,例如(([))]将被视为完全完成但没有意义的模式,从而改进这一点。


推荐阅读