• pythony异常处理/catalan数和出栈排列数


    pythony@异常处理@catalan数和出栈排列数@try_except

    python异常处理

    • 错误和异常

    • 在Python中,try语句可以用来捕获可能发生异常的代码块,并在异常发生时执行相应的处理代码。try语句可以与exceptfinallyelse等关键字一起使用,以实现不同的异常处理逻辑。

      try语句的基本语法如下:

      try:
          # 可能发生异常的代码块
      except ExceptionType1:
          # 处理 ExceptionType1 类型的异常
      except ExceptionType2:
          # 处理 ExceptionType2 类型的异常
      ...
      else:
          # 如果没有发生异常,执行的代码
      finally:
          # 不论是否发生异常,都会执行的代码
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      其中:

      • try关键字后面的代码块可能会发生异常,如果发生异常,程序会跳转到相应的except代码块进行处理。
      • except关键字后面可以跟一个或多个异常类型,表示捕获哪些类型的异常。如果没有指定异常类型,则会捕获所有类型的异常。如果程序发生了指定类型的异常,程序就会跳转到相应的except代码块进行处理,否则不会执行相应的except代码块。
      • else关键字后面的代码块会在try代码块没有发生异常时执行,它通常用于执行一些必须在没有异常时才能执行的代码。
      • finally关键字后面的代码块会在tryexcept代码块执行完毕后无论是否发生异常都会执行,通常用于释放资源或清理数据等操作。

    demo

    下面是一个简单的示例代码,演示了如何使用try语句和else语句处理异常:

    try:
        num1 = int(input("请输入一个整数:"))
        num2 = int(input("请输入另一个整数:"))
        result = num1 / num2
    except ValueError:
        print("输入的不是整数")
    except ZeroDivisionError:
        print("除数不能为零")
    else:
        print("结果为:", result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这个例子中,我们使用try语句尝试读取两个整数,然后计算它们的商。如果输入的不是整数或除数为零,程序就会跳转到相应的except代码块进行处理。如果没有发生异常,程序就会执行else代码块,输出计算结果。

    总之,try...except...else语句是Python中异常处理机制的一个重要组成部分,可以帮助我们编写更加健壮和可靠的程序。在实际开发过程中,应该根据具体的应用场景来选择合适的异常处理策略。

    示例:数值异常和抛出

    卡特蓝数

    def factorial(n):
    
        if(n<0):
            # 对于非法输入(负数,我们抛出异常)
            raise ValueError(f"{n} must be a positive number!!")
        f=1
        while(n):
           f*=n
           n-=1
        return f
    
    # print(factorial(5))
    def catalan(n):
        # c=1/(n+1)*(factorial(2*n))/(factorial(n)**2)
        c=factorial(2*n)/(factorial(n+1)*factorial(n))
        return int(c)
    # print(catalan(4))
    
    # 打印前n个catalan数
    def get_catalan_seq_tops(n):
        # l=[catalan(i) for i in range(1,n+1)]#如果从n=1开始计数
        print("n:catalan(n)")
        for i in range(0,n+1):#从n=0开始
            c=catalan(i)
            print(f"{i}:{c}")    
    if __name__=="__main__":
        get_catalan_seq_tops(10)
    #前十个: [1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796]
    # PS D:\repos\PythonLearn>  py catalan.py
    # n:catalan(n)
    # 0:1
    # 1:1
    # 2:2
    # 3:5
    # 4:14
    # 5:42
    # 6:132
    # 7:429
    # 8:1430
    # 9:4862
    # 10:16796
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    通项

    C n = 1 n + 1 ( 2 n n ) = 2 n ! ( n + 1 ) ! n ! C_n=\frac{1}{n+1}\binom{2n}{n} =\frac{2n!}{(n+1)!n!} Cn=n+11(n2n)=(n+1)!n!2n!

    递推

    C 0 = 1 C n + 1 = ∑ i = 0 n C i C n − i = 2 ( 2 n + 1 ) n + 2 C n C_0=1 \\ C_{n+1}=\sum\limits_{i=0}^{n}C_iC_{n-i} =\frac{2(2n+1)}{n+2}C_n C0=1Cn+1=i=0nCiCni=n+22(2n+1)Cn

    栈和catalan数

    • 如果n个不同元素进栈{ 1 , 2 , 3 , 4 , . . . 1,2,3,4,... 1,2,3,4,...}(允许栈非空的时候出栈,即使还有元素未进栈)
    • 那么出栈的序列数(不同的排列数)为catalan(n)种

    例如

    • 用s表示push(入栈)

    • 用x表示pop(出栈)

    • 例如 2个元素({1,2})先后进栈(中途允许出栈),则出栈序列可能有如下2种

      • 12
        • 出入栈操作序列:(sxsx)
      • 21
        • 出入栈操作序列(ssxx)
    • 例如 3个元素({1,2,3})先后进栈(中途允许出栈),则出栈序列可能有如下5种

      • 123
      • 132
      • 213
      • 231
      • 321
    • 例如 4个元素({1,2,3,4})先后进栈(中途允许出栈),则出栈序列可能有如下14种

      • 1234

      • 1243

      • 1324

      • 1342

      • 1432

      • 2134

      • 2143

      • 2314

      • 2341

      • 2431

      • 3214

      • 3241

      • 3421

      • 4321

  • 相关阅读:
    数据结构学习笔记——查找算法中的树形查找(平衡二叉树)
    航运船公司人工智能AI产品成熟化标准化规模应用,全球港航人工智能/集装箱人工智能领军者CIMC中集飞瞳,打造国际航运智能化标杆
    基于SpringBoot+Vue的宿舍管理系统
    01-工具篇-windows与linux文件共享
    ts学习02-数据类型
    【HMS core】【FAQ】HMS Toolkit典型问题合集1
    微服务的发展历程的详细说明及每个阶段主流的架构和组件
    i人e人什么意思_MBTI职业人格测试_免费测试和结果查看
    【C++】继承 ⑦ ( 继承中的对象模型分析 | 继承中的构造函数和析构函数 )
    『 基础算法题解 』之双指针(上)
  • 原文地址:https://blog.csdn.net/xuchaoxin1375/article/details/126897476