目录
一、过程编程
二、面向装饰器和函数的编程
三、二的加强版
一、过程编程
(一)需求:打印菱形
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)