飞花落尽 发表于 2021-7-7 16:57:10

课后作业20,设计一个判断字符是否合理的程序,哪里出错了?(萌新,求带)

s = input("请输入测试字符串:")
a = []
a[:] = s
b = []
for i in a[:]:
    if i != "(" or ")" or "[" or "]" or "{" or "}":
      print("不合法")
    elif 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("不合法!")
      

学渣李某人 发表于 2021-7-7 17:00:40

elif i =="}" and b[-1]=="}":
这行的大括号是不是反了

灰晨 发表于 2021-7-7 17:09:14

本帖最后由 灰晨 于 2021-7-7 17:11 编辑

if i != "(" or ")" or "[" or "]" or "{" or "}":
这么写肯定只会执行这个if语句里的,下面你elif写出花来都没用,
因为不可能有一个i 同时为()[]{}
改一下
if i not in ['(',')','[',']','{','}']:

青出于蓝 发表于 2021-7-7 17:50:38

s = input("请输入测试字符串:")
a = []
a[:] = s
b = []
for i in a[:]:
    if i in {"(",")","[","]","{","}"}:
      b.append(i)
if b ==[]:
    print("合法!")
else:
    print("不合法!")

这里可以用集合~~
欢迎追问,探讨

飞花落尽 发表于 2021-7-7 18:45:18

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.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的

飞花落尽 发表于 2021-7-7 18:45:48

青出于蓝 发表于 2021-7-7 17:50
这里可以用集合~~
欢迎追问,探讨


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.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的

飞花落尽 发表于 2021-7-7 18:46:20

灰晨 发表于 2021-7-7 17:09
if i != "(" or ")" or "[" or "]" or "{" or "}":
这么写肯定只会执行这个if语句里的,下面你elif写出花 ...


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.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的

Kayko 发表于 2021-7-8 08:43:15

加油好好学

灰晨 发表于 2021-7-8 10:08:32

飞花落尽 发表于 2021-7-7 18:46
s = input("请输入测试字符串:")
b = []
for i in s:


我用的是not in 吧
照你一开始的代码,把if 语句改成 i not in ['(',')'.'[',']','{','}']:
先判断i在不在集合里,不在就打印不合法,
在就执行下面elif语句

傻眼貓咪 发表于 2021-9-4 14:01:19

本帖最后由 傻眼貓咪 于 2021-9-4 14:07 编辑

代碼:
def check(string: str) -> bool:
    bracket = {"(": ")", "{": "}", "[": "]"}
    temp = []
    for s in string:
      if s in list(bracket.values()):
            if not temp: return False
            elif s != bracket]: return False
            else: temp.pop()
      elif s in list(bracket.keys()):
            temp.append(s)
    return not temp

print(check(input("請輸入字符串:\n")))
輸入/輸出結果:
請輸入字符串:
((({{{[]}}}{}()[])))
True

請輸入字符串:
{(})
False
页: [1]
查看完整版本: 课后作业20,设计一个判断字符是否合理的程序,哪里出错了?(萌新,求带)