要说的全在代码里面了,很详细,应该能看懂额
'''中国慕课——数据结构课程—— 自测第一题打印沙漏
思路:现将输入的数字和字符分开放到两个变量中;
利用18 = [5,3,1,3,5]+1 构造出需要的列表;
再利用for循环打印出来
'''
#输入如 17 * 用空格分割给到a
a = input('').split()
num ,string= int(a[0]),a[1]
#构造list1来装沙漏的每一行
list1 = [1]
# n 用来记录当前还剩下多少
n = num-1
# k 沙漏的第一层和第三层是3个
k = 3
while n>0:
n = n -2*k
if n<0:
break
#分别在列表的前面和后面插入要打印的沙漏个数
list1.insert(0,k)
list1.append(k)
k+=2
#for循环打印前一般的沙漏,注意空格
for i in range(0,len(list1)//2+1):
print(' '*i+list1[i]*string)
#将剩下的一半放在列表list2中;并打印
list2 = list1[len(list1)//2+1:]
for j in range(0,len(list2)):
print((len(list2)-j-1)*' '+list2[j]*string)
#打印剩余的个数
print(num-sum(list1))