本帖最后由 paypojie 于 2022-5-25 20:35 编辑
题目如下
打印出如下图案(菱形):
*
***
*****
*******
*****
***
*
原文地址 https://www.runoob.com/python/python-exercise-example23.html
刚开始分析这道题目的时候 想到了直接通过print函数输出那个图案 如下
[Python] 纯文本查看 复制代码 print(""" *
***
*****
*******
*****
***
*""")
但是想了一下不能直接这样写 这样体现不出我的智慧 这样写也没啥意义(表情)
于是我想用其他思路来写这道题
分析 这个图形由*和空白组成 而且看起来也有规律可言 于是我定义了两个变量i和s 这两个变量分别代表*和' ' 第一行只有一个* 第二行有三个* 第三行有五个*第
一行*前面的空格是三 第二行前面两个空格 第三行是一个空格 这样看起来是有规律的 从第五行开始 逐渐递减 但是我们先不管后面倒数三行 先把前四行给打印出来
定义一个while循环 行数只要小于七 就执行循环体 也就是if和while子句 用if进行条件判断 l小于等于三 就执行if语句下面的代码 先输出三个空格和一个* 这样
第一行就出来了由于空格和*是由变量控制的我们只要改*和空格的变量 就可以顺利输出第二行到第四行 每进入新的一行 两个相关的变量就发生改变 控制*的变量自增
控制空格的变量自减 然后控制行数的变量自增 这样前四行成功输出
[Python] 纯文本查看 复制代码 i = '*' # 组成菱形的元素之一
s = ' ' # 也是组成菱形的元素之一
u = 1 # 控制*
k = 3 # 控制空格
l = 0 # 控制行数
while l <= 7:
if l <= 3:
print(k * s + u * i)
k -= 1
u += 2
l += 1
什么是前面的部分代码 运行结果如下
*
***
*****
*******
接下来输出后面三行 因为后面和前面的情况相同所以使用逆向思维
[Python] 纯文本查看 复制代码 i = '*'
s = ' '
u = 1
k = 3
l = 0
while l <= 7:
if l <= 3:
print(k * s + u * i)
k -= 1
u += 2
l += 1
# 下面是后面部分 但是输出之后发现不对
else:
k += 1
u -= 2
l += 1
print(k * s + u * i)
输出结果如下
*
***
*****
*******
******* # 多输出的一行
*****
***
*
我测试了代码 发现问题出在变量k和变量u上 执行else区域的代码时 k的初始值为-1 u为9 于是 我将代码写成下面的样子
[Python] 纯文本查看 复制代码 i = '*'
s = ' '
u = 1
k = 3
l = 0
while l <= 7:
if l <= 3:
print(k * s + u * i)
k -= 1
u += 2
l += 1
# print(k)
# print(u)
# 检查程序运行的中间状态
else:
# k的初始值和u的初始值发生改变 看看会发生什么
if k == -1:
k == 0
u -= 2
k += 1
u -= 2
l += 1
print(k * s + u * i)
输出结果如下 最后三行*的数量是正确的 所有 我们只要把后三行的每一行在多添加一个空格就可以了
*
***
*****
*******
*****
***
*
将代码稍微修改一下
[Python] 纯文本查看 复制代码 i = '*'
s = ' '
u = 1
k = 3
l = 0
while l <= 7:
if l <= 3:
print(k * s + u * i)
k -= 1
u += 2
l += 1
else:
if k == -1:
k == 0
u -= 2
k += 1
u -= 2
l += 1
print(' ' + k * s + u * i)
输出如下
*
***
*****
*******
*****
***
*
可以看到已经符号题目要求了
# 这是之后的帖子 https://www.52pojie.cn/thread-1641023-1-1.html |