鱼C论坛

 找回密码
 立即注册
查看: 2072|回复: 4

[已解决]第20讲 动动手问题

[复制链接]
发表于 2022-4-17 02:12:07 | 显示全部楼层 |阅读模式

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

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

x
请各位大佬帮我看看我的代码
为啥运行不了
我觉得逻辑上应该没问题诶
题目:请编写一个程序,判断给定的字符串 s 中括号的写法是否合法。

条件:

字符串仅包含 '('、')'、'['、']'、'{'、'}' 这三对括号的组合
左右括号必须成对编写,比如 "()" 是合法的,"(" 则是非法的
左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的

我写的代码:
s = input("请输入测试字符串:")
list1 =[]
list2 =[]
for c in s:
    if c == '(' or c== '{' or c == '[':
        list1.append(c)
    else:
        list2.insert(0,c)
    a = len(list1)
    b = len(list2)
if a == b:  
    for i in range(0,a):
        if list1[i] == '(' and list2[i] == ')':
            continue
        elif list1[i] == '{' and list2[i] == '}':
            continue
        elif list1[i] == '[' and list2[i] == ']':
            continue
        else:
            print("不合法")
            i = -1
            break
    if i == a:
        print("合法")
else:
    print("不合法")

最佳答案
2022-4-17 09:45:14
本帖最后由 代码小白liu 于 2022-4-17 10:43 编辑
s = input("请输入测试字符串:")
list1 =[]
list2 =[]
for c in s:
    if c == '(' or c== '{' or c == '[':
        list1.append(c)
    else:
        list2.insert(0,c)
a = len(list1)
b = len(list2)
if a == b:
    for i in range(0, a):
        if list1[i] == '(' and list2[i] == ')':
            continue
        elif list1[i] == '{' and list2[i] == '}':
            continue
        elif list1[i] == '[' and list2[i] == ']':
            continue
        else:
            print("不合法")
            break
    else:
        print("合法")
else:
    print("不合法")


修改了下代码能正常运行了,但是这个思路是只用于只有一种括号,如果是多种括号或者是嵌套的 就是不适用了,[{}] list1[0]是不等于list2[0]的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-17 04:59:55 | 显示全部楼层
我猜是因为列表超出索印问题,应该使用 try 方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-17 09:45:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 代码小白liu 于 2022-4-17 10:43 编辑
s = input("请输入测试字符串:")
list1 =[]
list2 =[]
for c in s:
    if c == '(' or c== '{' or c == '[':
        list1.append(c)
    else:
        list2.insert(0,c)
a = len(list1)
b = len(list2)
if a == b:
    for i in range(0, a):
        if list1[i] == '(' and list2[i] == ')':
            continue
        elif list1[i] == '{' and list2[i] == '}':
            continue
        elif list1[i] == '[' and list2[i] == ']':
            continue
        else:
            print("不合法")
            break
    else:
        print("合法")
else:
    print("不合法")


修改了下代码能正常运行了,但是这个思路是只用于只有一种括号,如果是多种括号或者是嵌套的 就是不适用了,[{}] list1[0]是不等于list2[0]的

评分

参与人数 1鱼币 -1 收起 理由
python爱好者. -1 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-4-17 11:35:00 | 显示全部楼层
代码小白liu 发表于 2022-4-17 09:45
修改了下代码能正常运行了,但是这个思路是只用于只有一种括号,如果是多种括号或者是嵌套的 就是不 ...

为什么捏,一个已经是把后进去的放在前面了,另一个是普通的列表,两个list【0】不是应该合法的么
比如说{【】}
list1 录入进去是{【
list2 录入进去是} 】
不是很能理解为什么嵌套就无法运行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-17 11:41:10 | 显示全部楼层
KatouMegumiTyan 发表于 2022-4-17 11:35
为什么捏,一个已经是把后进去的放在前面了,另一个是普通的列表,两个list【0】不是应该合法的么
比如 ...

嵌套可以,[]{}这种不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 20:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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