博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python装饰器的应用案例
阅读量:5104 次
发布时间:2019-06-13

本文共 3206 字,大约阅读时间需要 10 分钟。

目录

一、过程编程

二、面向装饰器和函数的编程

三、二的加强版

 


 

 

一、过程编程

(一)需求:打印菱形

1、空格、*号组成的菱形

2、输入菱形上半部分的行数即可打印

3、支持循环输入

(二)代码

from sys import stdoutwhile True:    # n = 3    num_str = input("请输入菱形上部的正三角的行数:")    if num_str.isdigit():  # 判断字符串是否为纯整数字组成        n = int(num_str)        for i in range(1, n + 1):            for j in range(1, n - i + 1):                stdout.write(' ')            for k in range(1, 2 * i - 1 + 1):                stdout.write('*')            print()        for i in range(1, n - 1 + 1):            for j in range(1, i + 1):                stdout.write(' ')            for k in range(1, 2 * (n - i) - 1 + 1):                stdout.write('*')            print()    else:        print("请输入整数!!!")

  

 

二、面向装饰器和函数的编程

(一)需求:打印菱形

1、空格、*号组成的菱形

2、输入菱形上半部分的行数即可打印。

3、支持循环输入

4、输入“q”、“exit”可以退出循环

 

 

(二)代码

简单的分析:

1、打印菱形:print_diamond(n)

2、验证输入是否是合法数字:@verify_number

3、永循环和n输入:@forever

这3层逻辑,分离开来。

 

from sys import stdoutdef forever(fun):    def inner():        print("循环")        while True:            # nonlocal n            n = input("请输入菱形上部的正三角的行数:")            if n == "q" or n == "exit":                print("程序已退出!")                break            fun(n)    return innerdef verify_number(fun):    def inner(n):        print("验证输入的有效性")        if isinstance(n, int) or n.isdigit():  # 判断字符串是否为纯整数字组成            n = int(n)            fun(n)        else:            print("请输入整数!!!")    return inner@forever@verify_numberdef print_diamond(n):    for i in range(1, n + 1):        for j in range(1, n - i + 1):            stdout.write(' ')        for k in range(1, 2 * i - 1 + 1):            stdout.write('*')        print()    for i in range(1, n - 1 + 1):        for j in range(1, i + 1):            stdout.write(' ')        for k in range(1, 2 * (n - i) - 1 + 1):            stdout.write('*')        print()print_diamond()

  

三、二的加强版

from sys import stdoutdef forever(fun):    def inner(*args, **kwargs):        print("循环")        while True:            if len(args):                if len(args) == 1:                    n = args[0]  # 获取第一个位置参数                    args = ()  # 清空,避免重复循环                    if n == "q" or n == "exit":                        print("程序已退出!")                        break                    fun(n)                else:                    print("参数多了")                    break            else:                n = input("请输入菱形上部的正三角的行数:")                if n == "q" or n == "exit":                    print("程序已退出!")                    break                fun(n)    return innerdef verify_number(fun):    def inner(n):        print("验证输入的有效性")        if isinstance(n, int) or n.isdigit():  # 判断字符串是否为纯整数字组成            n = int(n)            fun(n)        else:            print("请输入整数!!!")    return inner@forever@verify_numberdef print_diamond(n):    for i in range(1, n + 1):        for j in range(1, n - i + 1):            stdout.write(' ')        for k in range(1, 2 * i - 1 + 1):            stdout.write('*')        print()    for i in range(1, n - 1 + 1):        for j in range(1, i + 1):            stdout.write(' ')        for k in range(1, 2 * (n - i) - 1 + 1):            stdout.write('*')        print()print_diamond(4)

  

转载于:https://www.cnblogs.com/andy9468/p/9844282.html

你可能感兴趣的文章
JS function 函数基本定义方法
查看>>
Java再学习——关于ConcurrentHashMap
查看>>
bzoj3944 Sum
查看>>
后缀表达式/逆波兰表达式
查看>>
标准模板库中的优先队列(priority_queue)
查看>>
如何处理Win10电脑黑屏后出现代码0xc0000225的错误?
查看>>
局域网内手机访问电脑网站注意几点
查看>>
IT项目经验和难点分享
查看>>
那些黑刘翔的人,你们的良心被狗吃了
查看>>
TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?...
查看>>
Redis系列--内存淘汰机制(含单机版内存优化建议)
查看>>
最小二乘法
查看>>
iptables端口转发
查看>>
金融三问
查看>>
HTML5新API记录
查看>>
Android 8 AudioPolicy 分析
查看>>
Java Web开发后端常用技术汇总
查看>>
How to use jQuery countdown plugin
查看>>
富文本常用封装(NSAttributedString浅析)
查看>>
c++ STL
查看>>