春风亭朝小树 发表于 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
页: 1 [2] 3 4
查看完整版本: 08 - 请帮我测试字符串