目录

一、过程编程

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

三、二的加强版


一、过程编程

(一)需求:打印菱形

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

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

3、支持循环输入

(二)代码

from sys import stdoutwhile True:# n = 3num_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 nn = input("请输入菱形上部的正三角的行数:")if n == "q" or n == "exit":print("程序已退出!")breakfun(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_number
def 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("程序已退出!")breakfun(n)else:print("参数多了")breakelse:n = input("请输入菱形上部的正三角的行数:")if n == "q" or n == "exit":print("程序已退出!")breakfun(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_number
def 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

python装饰器的应用案例相关推荐

  1. python装饰器-python装饰器是哪个版本支持的

    python装饰器是哪个版本支持的 **kwargs): print ' % (unction.__name__:@app.route(':import unctoolsde log(text=&am ...

  2. python lock_python lock一步步教你理解Python装饰器

    请仔细看我们的decorator实例.我们定义了一个接受单个参数some_func的名为outer的函数.在outer内部我们定义了一个名为inner的嵌套函数.inner函数打印一个字符串然后调用s ...

  3. python 装饰器装饰类_5分钟的Python装饰器指南

    python 装饰器装饰类 重点 (Top highlight) There's no doubt that Python decorators are one of the more advance ...

  4. Python 装饰器详解(下)

    Python 装饰器详解(下) 转自:https://blog.csdn.net/qq_27825451/article/details/84627016,博主仅对其中 demo 实现中不适合pyth ...

  5. python装饰器由浅入深_详解Python装饰器由浅入深

    装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...

  6. Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景 附加功能 数据的清理或添加: 函数参数类型验证 @require_ints 类似请求前拦截 数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改 为函数提供额外的数据 ...

  7. 通过 Python 装饰器实现DRY(不重复代码)原

    通过 Python 装饰器实现DRY(不重复代码)原 Python装饰器是一个消除冗余的强大工具.随着将功能模块化为大小合适的方法,即使是最复杂的工作流,装饰器也能使它变成简洁的功能. 例如让我们看看 ...

  8. 通过 Python 装饰器实现DRY(不重复代码)原则

    通过 Python 装饰器实现DRY(不重复代码)原则 英文原文:DRY Principles through Python Decorators Python装饰器是一个消除冗余的强大工具.随着将功 ...

  9. [转载] python 装饰器

    参考链接: Python装饰器 因为Odoo里有大量的装饰器,所以决定把这个理得清晰一些. 装饰模式 23种设计模式之一,英文叫Decorator Pattern,又叫装饰者模式.装饰模式是在不必改变 ...

  10. 如何理解python装饰器

    如何理解python装饰器 @(Python学习-随手记)[Decorator, 帮助] 装饰器简介 装饰器decorator是一种高级python语法,可以对函数.方法.类进行加工. 装饰器常用场景 ...

最新文章

  1. python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...
  2. python内置函数中的 IO文件系列 open和os
  3. python 面向对象编程:类和实例
  4. 多生产者_通知:生产者补贴!打卡时间!定了
  5. jquery中$.each循环的跳出
  6. silverlight经典案例
  7. Delphi7中默认没有安装的官方控件
  8. Redis命令 - sortedSet
  9. 车路协同 智能路侧决策系统总体架构及应用
  10. MySQL 数据库备份与还原
  11. 网络子系统32_网桥设备的开启与关闭
  12. python:16进制转2进制
  13. 通过IMAP方式迁移U-Mail邮件到Exchange 2013之Exchange 2007 升级到Exchange 2013!
  14. 网页上传文件获取地址的问题
  15. POJ_1564_dfs
  16. 给初学者的RxJava2.0教程(八)
  17. 音视频开发大厂面试题(快手、百度、字节)
  18. 计算机上的be无法正常启动,应用程序无法正常启动0xc0000005的三种解决方法
  19. Apple Pay入门
  20. 图像处理:利用相似度处理相似度较大的图像

热门文章

  1. [渝粤教育] 金陵科技学院 面向对象程序设计 参考 资料
  2. 【渝粤教育】国家开放大学2019年春季 0692-22T化工设备机械基础 参考试题
  3. 【sklearn第二十一讲】矩阵分解问题
  4. Pandas库之DataFrame学习笔记
  5. matlab练习程序(模拟退火SA)
  6. 国内外优秀的源码网站
  7. CentOS虚拟机挂载U盘
  8. Redis NOAUTH Authentication required
  9. 【学亮IT手记】Ajax跨域问题精讲--jQuery解决跨域操作
  10. [转]vc++ release 版的生成