作业20,设计判断字符是否合理的程序,运行结果都是不合理?(萌新,求带)
s = input("请输入测试字符串:")b = []
for i in s:
if i in ['(',')','[',']','{','}']:
if i == "(" or "[" or "{":
b.append(i)
elif i ==")" and b[-1]=="(":
b.pop()
elif i =="]" and b[-1]=="[":
b.pop()
elif i =="}" and b[-1]=="{":
b.pop()
if b ==[]:
print("合法!")
else:
print("不合法!")
要求
1.字符串仅包含 '('、')'、'['、']'、'{'、'}' 这三对括号的组合
2.左右括号必须成对编写,比如 "()" 是合法的,"(" 则是非法的
3.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的 两个问题。
第二个if的两个or写法不对
末尾的if…else…层次不对
s = input("请输入测试字符串:")
b = []
for i in s:
if i in ['(',')','[',']','{','}']:
if i == "(" or i =="[" or i =="{":#这里写的不对
b.append(i)
elif i ==")" and b[-1]=="(":
b.pop()
elif i =="]" and b[-1]=="[":
b.pop()
elif i =="}" and b[-1]=="{":
b.pop()
if b ==[]:#这里层次不对,不应该在for里面
print("合法!")
else:
print("不合法!") 你这思路我没看出来,还有明显的错误 ——
假设字符是 都是 右括号,如 "))))"(不合法),你的循环里 if 和 elif 都不成立,这时 b == [] --> 合法?
---
我说一下我的思路:以成对的左右括号为了例, 从左往右遍历字符,若首先就遇到右括号,就中止循环,不合法;
当一遇到 “左括号”,就 加1, 遇到“右括号” 就减1,最终结果为0 ,即为 左右匹配,合法。
sunrise085 发表于 2021-7-7 19:39
两个问题。
第二个if的两个or写法不对
末尾的if…else…层次不对
厉害! 阿奇_o 发表于 2021-7-7 20:39
你这思路我没看出来,还有明显的错误 ——
假设字符是 都是 右括号,如 "))))"(不合法),你的循环里 if...
谢谢你 sunrise085 发表于 2021-7-7 19:39
两个问题。
第二个if的两个or写法不对
末尾的if…else…层次不对
可以问问我写的 or 与你的有什么区别吗?
阿奇_o 发表于 2021-7-7 20:39
你这思路我没看出来,还有明显的错误 ——
假设字符是 都是 右括号,如 "))))"(不合法),你的循环里 if...
对对对,我再改进一下 飞花落尽 发表于 2021-7-8 12:01
可以问问我写的 or 与你的有什么区别吗?
or的用法,是多个逻辑表达式并列,一个为True,则结果为True。
i == "(" or "[" or "{"
这种写法,是把 i == "(" "[" "{" 三者并列,第一部分不一定为True,后两者一定为True,所以永远为True
还有另外一种写法,就像你的第一个if那样写
if i in '({[':
页:
[1]