鱼C论坛

 找回密码
 立即注册
查看: 2691|回复: 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 编辑

代碼:
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[temp[-1]]: return False
            else: temp.pop()
        elif s in list(bracket.keys()):
            temp.append(s)
    return not temp

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

請輸入字符串:
{(})
False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-7 17:00:40 | 显示全部楼层
elif i =="}" and b[-1]=="}":
这行的大括号是不是反了
想知道小甲鱼最近在做啥?请访问 -> 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 ['(',')','[',']','{','}']:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 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("不合法!")
这里可以用集合~~
欢迎追问,探讨
想知道小甲鱼最近在做啥?请访问 -> 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.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的
想知道小甲鱼最近在做啥?请访问 -> 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.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的
想知道小甲鱼最近在做啥?请访问 -> 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.左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-8 08:43:15 | 显示全部楼层
加油好好学
想知道小甲鱼最近在做啥?请访问 -> 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语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[temp[-1]]: return False
            else: temp.pop()
        elif s in list(bracket.keys()):
            temp.append(s)
    return not temp

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

請輸入字符串:
{(})
False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 13:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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