python - 我正在尝试检查括号是否完整并计算两个括号的完整和不完整,但我得到了不正确的输出
问题描述
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
解决方案
您正在单个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)
作为一个很好的后续实践,您可以通过实施一种方法来确定不正确的模式,例如(([))]
将被视为完全完成但没有意义的模式,从而改进这一点。
推荐阅读
- discord.js - 如何在删除之前检查消息是否存在
- ios - 如何在 SwiftUI 2 上的地图注释上显示工作表?
- javascript - APK 发布或内置 react native 后功能未运行
- ansible - Jinja2 for 循环遍历对象列表没有给出首选输出
- c# - SharePoint 文件夹名称验证器
- vue.js - Nuxt.js auth 用户已设置,但 loggedIn 仍然为 false
- c# - 如何通过“实时”滚动另一个comobox上的滚动来更改combobox.text?
- python - 我正在尝试使用 Anaconda 启动 Jupyter,但笔记本无法启动。它也不显示任何错误
- mongodb - 级别系统,用户名无法检索
- javascript - sum 的值是串联而不是总和