鱼C论坛

 找回密码
 立即注册
查看: 2972|回复: 9

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

[复制链接]
发表于 2021-7-7 16:57:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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-9-4 14:01:19
本帖最后由 傻眼貓咪 于 2021-9-4 14:07 编辑

代碼:
  1. def check(string: str) -> bool:
  2.     bracket = {"(": ")", "{": "}", "[": "]"}
  3.     temp = []
  4.     for s in string:
  5.         if s in list(bracket.values()):
  6.             if not temp: return False
  7.             elif s != bracket[temp[-1]]: return False
  8.             else: temp.pop()
  9.         elif s in list(bracket.keys()):
  10.             temp.append(s)
  11.     return not temp

  12. print(check(input("請輸入字符串:\n")))
复制代码

輸入/輸出結果:
  1. 請輸入字符串:
  2. ((({{{[]}}}{}()[])))
  3. True

  4. 請輸入字符串:
  5. {(})
  6. False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-7-7 17:00:40 | 显示全部楼层
  1. elif i =="}" and b[-1]=="}":
复制代码

这行的大括号是不是反了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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 ['(',')','[',']','{','}']:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2021-7-7 17:50:38 | 显示全部楼层
  1. s = input("请输入测试字符串:")
  2. a = []
  3. a[:] = s
  4. b = []
  5. for i in a[:]:
  6.     if i in {"(",")","[","]","{","}"}:
  7.         b.append(i)
  8. if b ==[]:
  9.     print("合法!")
  10. else:
  11.     print("不合法!")
复制代码

这里可以用集合~~
欢迎追问,探讨
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-8 08:43:15 | 显示全部楼层
加油好好学
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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语句
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-4 14:01:19 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 2021-9-4 14:07 编辑

代碼:
  1. def check(string: str) -> bool:
  2.     bracket = {"(": ")", "{": "}", "[": "]"}
  3.     temp = []
  4.     for s in string:
  5.         if s in list(bracket.values()):
  6.             if not temp: return False
  7.             elif s != bracket[temp[-1]]: return False
  8.             else: temp.pop()
  9.         elif s in list(bracket.keys()):
  10.             temp.append(s)
  11.     return not temp

  12. print(check(input("請輸入字符串:\n")))
复制代码

輸入/輸出結果:
  1. 請輸入字符串:
  2. ((({{{[]}}}{}()[])))
  3. True

  4. 請輸入字符串:
  5. {(})
  6. False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 23:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表