鱼C论坛

 找回密码
 立即注册
查看: 2227|回复: 7

[已解决]作业20,设计判断字符是否合理的程序,运行结果都是不合理?(萌新,求带)

[复制链接]
发表于 2021-7-7 19:39:31 | 显示全部楼层 |阅读模式
10鱼币
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 19:39:32
两个问题。
第二个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的两个or写法不对 末尾的if…else…层次不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-7 19:39:32 | 显示全部楼层    本楼为最佳答案   
两个问题。
第二个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("不合法!")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-7 20:39:54 | 显示全部楼层
你这思路我没看出来,还有明显的错误 ——
假设字符是 都是 右括号,如 "))))"(不合法),你的循环里 if 和 elif 都不成立,这时 b == [] --> 合法?

---
我说一下我的思路:以成对的左右括号为了例, 从左往右遍历字符,若首先就遇到右括号,就中止循环,不合法;
当一遇到 “左括号”,就 加1, 遇到“右括号” 就减1,最终结果为0 ,即为 左右匹配,合法。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-8 11:58:21 | 显示全部楼层
sunrise085 发表于 2021-7-7 19:39
两个问题。
第二个if的两个or写法不对
末尾的if…else…层次不对

厉害!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-8 11:58:51 | 显示全部楼层
阿奇_o 发表于 2021-7-7 20:39
你这思路我没看出来,还有明显的错误 ——
假设字符是 都是 右括号,如 "))))"(不合法),你的循环里 if  ...

谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-8 12:01:24 | 显示全部楼层
sunrise085 发表于 2021-7-7 19:39
两个问题。
第二个if的两个or写法不对
末尾的if…else…层次不对

可以问问我写的 or 与你的有什么区别吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-7-8 12:45:19 | 显示全部楼层
阿奇_o 发表于 2021-7-7 20:39
你这思路我没看出来,还有明显的错误 ——
假设字符是 都是 右括号,如 "))))"(不合法),你的循环里 if  ...

对对对,我再改进一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-8 12:55:08 | 显示全部楼层
飞花落尽 发表于 2021-7-8 12:01
可以问问我写的 or 与你的有什么区别吗?


or的用法,是多个逻辑表达式并列,一个为True,则结果为True。
i == "(" or "[" or "{"
这种写法,是把    i == "("       "["       "{"    三者并列,第一部分不一定为True,后两者一定为True,所以永远为True
还有另外一种写法,就像你的第一个if那样写
if i in '({[':
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-14 20:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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