目标

不允许使用居中的功能

通过一个循环,完成菱形的输出

主要考查,循环知识,和简单的规纳算法能力

需求为

用户输入一个奇数

这个数,生成一个菱形

先画出菱形图

为了推出菱形的一些规律

可以先画出三个菱形作为参考

python-循环-打印菱形图案_python

寻找规律

python-循环-打印菱形图案_python_02

计算出左边行的公式

python-循环-打印菱形图案_嵌套循环_03

计算出每一行应出现的符号数

以7行为例

python-循环-打印菱形图案_数据_04

代码的框架

单循环

# 初步目标:完成五行的菱形
# 终级目标,任意奇数行的实现

# 中间行
mid_num = (5+1)/2  # 3

# i从0到4
def print_line(i):
    """
    :param i: 行的索引。 第1行,i为0。第2行,i为1
    :return:
    """
    # 当传入的参数为0的时候,期望 有2个空格,1个符号
    current_num = i + 1  # 当前行
    space_num = get_space_num(current_num)  # 空格的数量
    start_num = get_start_num(current_num)  # 星花的数据
    space = " "*space_num  # 应有的空格数
    start = "*"*start_num  # 星花应有的数量
    # print(space+start)
    print("当前第{}行,行索引{},有{}个左空格,有{}个星星".format(current_num, i, space_num, start_num))


def get_space_num(current_num):
    """根据行的索引,获取空格应有的数量"""
    # mid_num - 当前行号
    # 当i 为 0的时候,只需要返回2就可以了
    # 当i 为1 的时候,返回1
    # print(i)
    num = mid_num - current_num

    return int(abs(num))


def get_start_num(current_num):
    """根据当前的行号,返回应该输出几个星星"""
    num = 0  # 输出星星的数量
    return num

def main(num=5):
    print("主逻辑,打印行数", num)

    for i in range(num):
        # print(i)
        print_line(i)


if __name__ == '__main__':
    main(5)
    # print_line(0)
    # res = get_space_num(5)
    # print(res)

双层嵌套循环

def main(num):
    # 计数器
    counter = 0
    # 中间行
    mid_num = (num+1)/2

    while counter < num:
        counter += 1
        # print(counter)  # 打印行号
        # 遍历打印每一行
        # 计算空格的数量
        space_num = int(abs(mid_num-counter))

        # 计算星星的数量
        start_num = num - 2*space_num
        # print("第{}行,{}空格,{}星星".format(counter, space_num, start_num))

        # space_str = " "*space_num
        inner_count = 0

        start_str = "*"*start_num
        # line_str = space_str+start_str
        # print(line_str)
        m = 0
        while m < space_num:
            print(" ", end="")
            m += 1
        n = 0
        while n < start_num:
            print("*", end="")
            n += 1
        print()



if __name__ == '__main__':
    main(5)