第二课:while循环,打印沙漏图案

第二节课以打印沙漏图案来介绍如何使用while循环。课下自己写了一段代码实现打印沙漏图案。这次练习涉及到以下几个知识点 - while 循环的用法 - 使用“ * ”来表示重复多少次 - 运算符// 和 % - input用法 **打印沙漏图案 规则: 第一行和最后一行*的个数与层数相同,从上到下,下一行比上一行少 两个*,并且在行开头比上一行多1个空格 当打印到中间某一行的*个数为1时,向下的逐行比上一行多两个*,同 时在行开头比上一行少1个空格** **代码** ``` maxStar = int(input("Please input the max stars number:")) totalLine = maxStar if maxStar%2 == 0: #要是第一个行是偶数个*,将会怎样? totalLine += 1 i = 0 middleIndex = 0 while i < totalLine: #小于符号在小象笔记markdown编辑显示上有问题 if(i <= maxStar//2): print(" "*i, "*"*(maxStar - 2*i)) middleIndex = i else: middleIndex -= 1 print(" "*(middleIndex), "*"*(maxStar - 2*middleIndex)) i += 1 ``` 在python2.x上的沙漏代码: ``` import sys strs=[] i = raw_input("please input a number: ") i = int (i) num = i while (i > 0): if (num - (num - i)*2) > 0: _temStr = " " * (num-i) + "*" * (num - (num - i)*2) print _temStr strs.append(_temStr) i -= 1 else: break del strs[-1] #删除最后一行*避免倒序重复打印中间一行 for x in reversed(strs): print x ``` 这两段代码在处理偶数个输入的时候,输出结果是不一样的。

3 个评论

试一下看看评论上对于“小于号”显示上有没有问题。
maxStar = int(input("Please input the max stars number:"))

totalLine = maxStar
if maxStar%2 == 0:
totalLine += 1

i = 0
middleIndex = 0

while i < totalLine:
if(i <= maxStar//2):
print(" "*i, "*"*(maxStar - 2*i))
middleIndex = i
else:
middleIndex -= 1
print(" "*(middleIndex), "*"*(maxStar - 2*middleIndex))

i += 1
评论上显示没有问题。
马丁的codes (Python 2.x)

···
import sys
strs=[]
i = raw_input("please input a number: ")
i = int (i)
num = i
while (i > 0):
if (num - (num - i)*2) > 0:
_temStr = " " * (num-i) + "*" * (num - (num - i)*2)
print _temStr
strs.append(_temStr)
i -= 1
else:
break
del strs[-1]
for x in reversed(strs):
print x
···

要回复文章请先登录注册