春风亭朝小树
发表于 2021-11-20 17:56:56
啊呀呀,疯狂报错我麻了
春风亭朝小树
发表于 2021-11-20 18:21:48
s = input("请输入测试字符串:")
stack = []
for c in s:
if c == '(' or c == '[' or c == '{':
stack.append(c)
else:
if len(stack) == 0:
print("非法T_T")
break
//这里流程图写的是f之后if判断,这里为什么不加else,我加了之后错误
if c == ')':
d = '('
elif c == ']':
d = '['
elif c == '}':
d = '{'
//这我也觉得根据流程图也要加else的
if d != stack.pop():
print("非法T_T")
break
else:
if len(stack) == 0:
print("合法^o^")
else:
print("非法T_T")
我有几个问题啊,大佬帮我解释一下,有的问题在代码里面写出来了
1.我输入(())时输出的是()
2.我输入({[]})他直接报错
3.流程图和代码的问题,明明是if后false才接的,为什么没有else三个if都是同一个缩进(详情见上面代码文字)
lightninng
发表于 2021-11-20 18:51:05
春风亭朝小树 发表于 2021-11-20 18:21
s = input("请输入测试字符串:")
stack = []
楼主,这些问题相对来说没那么难,如果你是使用Pycharm编程的话,建议看一下版主的帖子
https://fishc.com.cn/forum.php?mod=viewthread&tid=173240&highlight=pycharm
大部分的集成ide都有断点和单步执行的功能,同时能显示当前内存中的变量以及他们的值,通过观察程序执行的过程,你的第1和第2个问题应该可以迎刃而解
第3个问题的关键点在于理解程序的逻辑,也就是说正常情况下你从字符串中取到这个字符要干什么。我试着简单说一下。
因为字符串中只有三类括号共六种,取到一个字符,
1.如果是左侧括号,就直接入栈,继续判断下一个字符。
2.如果是右侧括号,就和出栈的符号做对比:匹配,继续判断下一个字符;不匹配则字符串不符合要要求。
3.最后所有的字符都判断完,还没有不符合要求的情况出现,字符串就符合要求。
然后我们需要考虑一下两种特殊情况
a.栈里没东西,就直接获取到了右侧符号(不处理pop时会报错)。
b.字符串处理完毕,栈还未清空(程序不报错,但是说明还有左侧括号未被匹配,括号不成对)
把以上逻辑理清之后,再回过头看程序,问题3应该也解决了,如果还不清楚,还是那句话:
运行程序,单步执行,观察每一步中各个变量值的变化,相信很快你就能明白。编程还是需要大量的动手的,哪怕错,只要每次错的不一样,说明你就进步了~~~
春风亭朝小树
发表于 2021-11-20 20:45:26
lightninng 发表于 2021-11-20 18:51
楼主,这些问题相对来说没那么难,如果你是使用Pycharm编程的话,建议看一下版主的帖子
https://fishc ...
感谢大佬,我去试试一行行的来
今天摸鱼了吗
发表于 2021-11-21 15:15:52
好难
aironeng
发表于 2021-12-1 17:03:05
谢谢
claude123
发表于 2021-12-28 15:11:35
强强强强强强强强
可达可达鸭
发表于 2022-1-4 21:49:24
修改字符串
与森逐鹿
发表于 2022-1-10 21:15:31
这个题的思路对于我这种萌新真的好难想,我一直纠结在怎么解决分辨不出来[{]}这种类似的问题。
兮兮学编程
发表于 2022-1-21 20:08:19
66666666666
张亚当
发表于 2022-2-6 18:29:48
1
张亚当
发表于 2022-2-6 23:55:35
这个源码 字符串里不能加除了[]{}()的东西吧 比如字母数字什么的
ckblt
发表于 2022-2-7 21:22:06
有点难
xdJumping
发表于 2022-2-13 21:26:49
看看源码
Maxia000
发表于 2022-2-17 17:40:48
这个有点复杂
frankz
发表于 2022-2-20 11:59:09
代码
boboboiz
发表于 2022-3-4 22:19:35
这个题好绕啊,有点没吃透
wbd21
发表于 2022-3-14 19:10:09
08 - 请帮我测试字符串
Hyjxsssss
发表于 2022-5-4 20:09:34
# 题干:
# 字符串仅包含 '()'、'[]'、'{}' 这三对括号的组合
# 左右括号必须成对编写,比如 "()" 是合法的,"(" 则是非法的
# 左右括号必须以正确的顺序闭合,比如 "{()}" 是合法的,"{(})" 则是非法的
char = '''()[]{}'''
strings = input('请输入测试字符串:')
stack1 = []
stack2 = []
for each in strings:
if each not in char:
print('非法-_-')
break
if (each=='(') or (each=='[') or (each=='{'):
stack1.append(each)
else:
if len(stack1) == 0:
print('非法-_-')
break
if each == ')':
each = '('
if each == ']':
each = '['
if each == '}':
each = '{'
stack2.insert(0, each)
if stack1.pop() == stack2:
stack2.remove(stack2)
else:
if stack1 == stack2:
print('合法o_o')
else:
print('非法-_-')
san333
发表于 2022-6-3 23:24:51
1