不允许使用居中的功能
通过一个循环,完成菱形的输出
主要考查,循环知识,和简单的规纳算法能力
需求为
用户输入一个奇数
这个数,生成一个菱形
先画出菱形图为了推出菱形的一些规律
可以先画出三个菱形作为参考
寻找规律 计算出左边行的公式 计算出每一行应出现的符号数以7行为例
代码的框架单循环
# 初步目标:完成五行的菱形
# 终级目标,任意奇数行的实现
# 中间行
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)