目录

一、过程编程

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

三、二的加强版


一、过程编程

(一)需求:打印菱形

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

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

3、支持循环输入

(二)代码

from sys import stdout

while 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 stdout

def forever(fun):
def inner():
print("循环")
while True:
# nonlocal n
n = input("请输入菱形上部的正三角的行数:")
if n == "q" or n == "exit":
print("程序已退出!")
break
fun(n) return inner def 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 stdout

def 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 inner def 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)

  

python装饰器的应用案例的更多相关文章

  1. Python装饰器使用规范案例详解

    由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25') ... >> ...

  2. Python装饰器由浅入深

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

  3. 关于python装饰器

    关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...

  4. python装饰器通俗易懂的解释!

    1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...

  5. Python 装饰器学习

    Python装饰器学习(九步入门)   这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...

  6. python 装饰器修改调整函数参数

    简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...

  7. python 装饰器学习(decorator)

    最近看到有个装饰器的例子,没看懂, #!/usr/bin/python class decorator(object): def __init__(self,f): print "initi ...

  8. Python装饰器详解

    python中的装饰器是一个用得非常多的东西,我们可以把一些特定的方法.通用的方法写成一个个装饰器,这就为调用这些方法提供一个非常大的便利,如此提高我们代码的可读性以及简洁性,以及可扩展性. 在学习p ...

  9. 关于python装饰器(Decorators)最底层理解的一句话

    一个decorator只是一个带有一个函数作为参数并返回一个替换函数的闭包. http://www.xxx.com/html/2016/pythonhexinbiancheng_0718/1044.h ...

随机推荐

  1. Windows 环境搭建Redis集群

    环境以及引用资料 1.windows server 2008 r2 enterprise  (木有办法,公司的服务器全是如此,就这种环境搭建吧) 2.redis官方资料下载: https://redi ...

  2. Cookie管理工具

    Cookie Editor 是管理 Cookie 的工具,能识别并编辑IE.Firfox.Netscope Cookie 文件,控制个人隐私信息,修改 Cookie 使用期限,删除历史文件,编辑和删除 ...

  3. MathType公式编辑器快捷键操作

    快捷键操作是最常见的操作方式,MathType软件系统提供大量的快捷键操作供用户使用.使用MathType公式编辑器快捷键操作可节省大量的操作的时间,本教程将详解MathType快捷键操作. 放大或缩 ...

  4. C#获取IP信息

    /// <summary> /// 通过IP得到IP所在地省市(Porschev) /// </summary> /// <param name="ip&quo ...

  5. 定义的函数在main中调用时提示找不到标识符

    要把定义的函数放在main函数前,如果放在main函数后了,要在main前做声明.声明就是把函数定义的首部一行加一个分号放在main之前. 在c语言中自定义了一个函数,在main中调用时提示找不到标识 ...

  6. 你真的了解HTML吗?–雅虎面试题

    http://helloweb.wang/jingyan~jiqiao/589.html

  7. Win10 安装msi 提示2502、2503的错误代码 -- 命令提示符(管理员) -- msiexec /package

    前言: 归根到底是权限不够导致的.win7应该不会有这个问题.     解决方法: 方法1:临时安装方法 1.鼠标移到桌面左下角->右键(或者直接: WIN+X键),命令提示符(管理员):2.输 ...

  8. angularjs基础——控制器

    1)当使用非空ng-app和ng-controller时,变量由angularjs控制器来处理 2)控制器接管模型变量后,直接修改模型,模版里的变量还是会自动变的 <!DOCTYPE html& ...

  9. python cx_oracle单个表中批量插入数据

  10. Android SDK更新下载失败以及Studio首次安装取消自动下载SDK

    这是因为,此时Android Studio会去获取 android sdk 组件信息,这个过程相当慢,还经常加载失败,导致Android Studio启动不起开. 解决办法: 不去获取android ...