美文网首页
07/20-07/24 第一周技能总结

07/20-07/24 第一周技能总结

作者: yumiii_ | 来源:发表于2020-07-24 15:47 被阅读0次

1.捕获中断(待补充...)
一开始我用的是try except KeyboardInterrupt,但在ctrl+C后未停止运行,其实这个时候应该是我套了两层循环,内循环还未停止的原因。但后期我也没有再去尝试这个问题。问了一下导师,他说了这么一句话:Ctrl + C一般是用捕获信号的形式而不是捕获异常,使用signal包试试。那我们来看下这个从未接触过的signal包是怎么用的吧:(目前我还没懂原理,只get到了怎么用)

def sigint_handler(signum, frame):
  global is_sigint_up
  is_sigint_up = True
  print 'catched interrupt signal!'

signal.signal(signal.SIGINT, sigint_handler)
signal.signal(signal.SIGHUP, sigint_handler)
signal.signal(signal.SIGTERM, sigint_handler)
is_sigint_up = False
while True:
  try:
    # 你想做的事情
    import time
    print "start ............."
    time.sleep(2)
    if is_sigint_up:
      # 中断时需要处理的代码
      print "Exit"
      is_sigint_up = False
      continue
  except Excepting,e:
    break

2.广度优先和深度优先
从一个网页的URL进去,抓取这个网页上包含的所有的二级三级四级...URL链接,一开始是没啥思路的,总感觉需要手动指定爬几级。然后写着写着突然意识到这是一个深度优先or广度优先的问题,那么,我们来搜一下它们的定义是什么吧。直接上别人博客里的图:



已知有上面的二叉树
广度优先:我们在遍历这个二叉树的时候,每一步有多个不同的选择,比如先从根结点出发,有往B节点走的路径,也有往C节点走的路径。假设选取了往B节点走的路径,那么下一步还有F和G两个方向可以走。广度优先的遍历方式为:D-B-C-F-G-A-E-H,广度优先的伪代码如下:

def bfs(Root_Node):
    if Root_Node is None:
        return
    queue = []
    Node = Root_Node
    queue.append(Node)
    while queue:
        Node = queue.pop(0)
        if Node.lChild:
            queue.append(Node.lChild)
        if Node.rChild:
            queue.append(Node.rChild)

深度优先:在遍历二叉树的时候,选中一个路径,一口气走到黑~走到最下层了怎么办呢,我们退回上一层,看看同级的是不是还有没被遍历过的。深度优先的遍历方式为:D-B-F-G-E-C-A-H,深度优先的伪代码如下:

def dps(Root_Node):
    if Root_Node is None:
        return
    if Root_Node.lChild:
        return dps(Root_Node.lChild)

    if Root_Node.rChild:
        return dps(Root_Node.rChild)
  1. ✅本周代码已push到github

相关文章

网友评论

      本文标题:07/20-07/24 第一周技能总结

      本文链接:https://www.haomeiwen.com/subject/ztthlktx.html