Diff
checker
文本
文本
图像
文档
Excel
文件夹
Legal
Enterprise
桌面版
定价
登录
下载 Diffchecker 桌面版
比较文本
查找两个文本文件之间的差异
工具
历史
实时编辑器
折叠未更改行
关闭换行
视图
拆分
统一
比对精度
智能
单词
字符
语法高亮
选择语法
忽略
文本转换
转到第一个差异
编辑输入
Diffchecker Desktop
运行Diffchecker最安全的方式。获取Diffchecker桌面应用:您的差异永远不会离开您的电脑!
获取桌面版
Solution to hwk7prob2
创建于
5年前
差异永不过期
清除
导出
分享
解释
11 删除
行
总计
删除
字符
总计
删除
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
50 行
全部复制
33 添加
行
总计
添加
字符
总计
添加
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
63 行
全部复制
"""Detect matching of parentheses in an expression"""
"""Detect matching of parentheses in an expression"""
# MCS 260 Fall 2021 Lecture 17
# MCS 260 Fall 2021 Lecture 17
复制
已复制
复制
已复制
# Read expression (which should include parentheses
)
# Read expression (which should include parentheses
/brackets
)
s = input("Expression: ")
s = input("Expression: ")
复制
已复制
复制
已复制
# We'll use a stack to keep track of all the "(
"
# We'll use a stack to keep track of all the "(
" or "[
"
# that haven't been matched with ")"
yet. Every
# that haven't been matched with ")"
or "]"
yet. Every
# new
"("
we see gets pushed, and every
")"
we see
# new
opening delimiter
we see gets pushed, and every
closing
#
closes whatever is at the top of the stack.
# delimiter
we see
closes whatever is at the top of the stack.
currently_open = []
currently_open = []
# We want both the characters of s and their positions
# We want both the characters of s and their positions
# so we use enumerate()
# so we use enumerate()
for i,c in enumerate(s):
for i,c in enumerate(s):
# c is character from s
# c is character from s
# i is the position (0-based index) of that character in s
# i is the position (0-based index) of that character in s
复制
已复制
复制
已复制
if c == "(
":
if c == "(
" or c == "[
":
# New left paren
opened; push it
# New left paren
/bracket
opened; push it
currently_open.append(
i
)
currently_open.append(
[c,i]
)
elif c == ")
":
elif c == ")
" or c == "]
":
# Right
paren
closes whatever left
paren
is at the
# Right
delim
closes whatever left
delim
is at the
# top of the stack. But we need to make sure the
# top of the stack. But we need to make sure the
# stack is nonempty before trying to pop.
# stack is nonempty before trying to pop.
try:
try:
复制
已复制
复制
已复制
currently_open.pop()
# i0 and c0 are the corresponding i and c
# for the opening paren/bracket
c0, i0 =
currently_open.pop()
if (c0 == "(" and c == "]") or (c0=="[" and c == ")"):
print("Error:")
print(s)
print(" "*i0 + "^ has mismatched delimiter types")
print("First delimiter is " + c0)
print("Second delimiter is " + c)
exit()
else:
print("Matching delimiters found: " + s[i0:i+1])
except IndexError:
except IndexError:
复制
已复制
复制
已复制
# Error because there was no
"("
on the
# Error because there was no
opening delim
on the
# stack to match
this ")"
# stack to match
the closing delimiter
print("Error:")
print("Error:")
print(s)
print(s)
print(" "*i + "^ does not match any preceding (")
print(" "*i + "^ does not match any preceding (")
exit()
exit()
复制
已复制
复制
已复制
# are there any
parentheses
open?
# are there any
delimiters
open?
# If so, it means that there is a (
with no match
# If so, it means that there is a (
or [
with no match
if len(currently_open) > 0:
if len(currently_open) > 0:
print("Error:")
print("Error:")
print(s)
print(s)
print(" "*currently_open.pop() + "^ is not matched by any following )")
print(" "*currently_open.pop() + "^ is not matched by any following )")
else:
else:
复制
已复制
复制
已复制
print("
Parentheses
matched successfully.")
print("
Delimiters
matched successfully.")
# Examples of what we expect the error messages to look like:
# Examples of what we expect the error messages to look like:
# (1 + ((2+3) - 5
# (1 + ((2+3) - 5
# ^ is not matched by any following )
# ^ is not matched by any following )
# ( 1 + (3-4))) + 5
# ( 1 + (3-4))) + 5
# ^ does not match any preceding (
# ^ does not match any preceding (
已保存差异
原始文本
打开文件
"""Detect matching of parentheses in an expression""" # MCS 260 Fall 2021 Lecture 17 # Read expression (which should include parentheses) s = input("Expression: ") # We'll use a stack to keep track of all the "(" # that haven't been matched with ")" yet. Every # new "(" we see gets pushed, and every ")" we see # closes whatever is at the top of the stack. currently_open = [] # We want both the characters of s and their positions # so we use enumerate() for i,c in enumerate(s): # c is character from s # i is the position (0-based index) of that character in s if c == "(": # New left paren opened; push it currently_open.append(i) elif c == ")": # Right paren closes whatever left paren is at the # top of the stack. But we need to make sure the # stack is nonempty before trying to pop. try: currently_open.pop() except IndexError: # Error because there was no "(" on the # stack to match this ")" print("Error:") print(s) print(" "*i + "^ does not match any preceding (") exit() # are there any parentheses open? # If so, it means that there is a ( with no match if len(currently_open) > 0: print("Error:") print(s) print(" "*currently_open.pop() + "^ is not matched by any following )") else: print("Parentheses matched successfully.") # Examples of what we expect the error messages to look like: # (1 + ((2+3) - 5 # ^ is not matched by any following ) # ( 1 + (3-4))) + 5 # ^ does not match any preceding (
更改后文本
打开文件
"""Detect matching of parentheses in an expression""" # MCS 260 Fall 2021 Lecture 17 # Read expression (which should include parentheses/brackets) s = input("Expression: ") # We'll use a stack to keep track of all the "(" or "[" # that haven't been matched with ")" or "]" yet. Every # new opening delimiter we see gets pushed, and every closing # delimiter we see closes whatever is at the top of the stack. currently_open = [] # We want both the characters of s and their positions # so we use enumerate() for i,c in enumerate(s): # c is character from s # i is the position (0-based index) of that character in s if c == "(" or c == "[": # New left paren/bracket opened; push it currently_open.append([c,i]) elif c == ")" or c == "]": # Right delim closes whatever left delim is at the # top of the stack. But we need to make sure the # stack is nonempty before trying to pop. try: # i0 and c0 are the corresponding i and c # for the opening paren/bracket c0, i0 = currently_open.pop() if (c0 == "(" and c == "]") or (c0=="[" and c == ")"): print("Error:") print(s) print(" "*i0 + "^ has mismatched delimiter types") print("First delimiter is " + c0) print("Second delimiter is " + c) exit() else: print("Matching delimiters found: " + s[i0:i+1]) except IndexError: # Error because there was no opening delim on the # stack to match the closing delimiter print("Error:") print(s) print(" "*i + "^ does not match any preceding (") exit() # are there any delimiters open? # If so, it means that there is a ( or [ with no match if len(currently_open) > 0: print("Error:") print(s) print(" "*currently_open.pop() + "^ is not matched by any following )") else: print("Delimiters matched successfully.") # Examples of what we expect the error messages to look like: # (1 + ((2+3) - 5 # ^ is not matched by any following ) # ( 1 + (3-4))) + 5 # ^ does not match any preceding (
查找差异