我正在尝试使用* s打印出箭头。 到目前为止,我的代码看起来像这样。
def head(n):
while n > 0:
print n * "*"
n = n - 1
print head(input())
并且它有效,但是如果我输入11,它会打印出来:
***********
**********
*********
********
*******
******
*****
****
***
**
*
但我希望它像这样打印:
*
***
*****
*******
*********
***********
箭头较少,但我无法弄清楚如何做到这一点。
答案 0 :(得分:4)
根据您想要的行数,它使函数更容易思考:
def head(lines):
for n in range(1,lines*2,2): # count 1,3,5...
print(('*'*n).center(lines*2-1))
输出:
>>> head(5)
*
***
*****
*******
*********
这是另一种使用可变长度格式的方法,这种格式不太明显:
def head(lines):
for n in range(1,lines*2,2):
print('{:^{}}'.format('*'*n,lines*2-1))
答案 1 :(得分:2)
使用字符串格式:
def head(size):
n=1
while n < size+1:
stars = n * "*"
print '{:^30}'.format(stars)
n += 2
它会将你的星号放在30个字符宽的场地上。
答案 2 :(得分:1)
def printHead(n):
for l in range(1,n):
print " "*(n-l)+"*"*(1 if l==1 else 2*l-1)
每行有level-1
个空格。然后,如果它是第一级开始,否则它有2*level-1
。
>>> printHead(6)
*
***
*****
*******
*********
答案 3 :(得分:0)
center
函数根据指定的宽度用空格包围字符串。您希望箭头以最长的线为中心,因此您需要2个变量,一个用于跟踪当前线,另一个用于记住最大线。我认为这应该适合你:
def head(total_lines):
for current_line in range(1, total_lines + 1):
print ((2 * current_line - 1) * "*").center(2 * total_lines - 1)
答案 4 :(得分:0)
def head(n):
total = 2 * n - 1
s = ''
for i in xrange(1, n + 1):
k = 2 * i - 1
s += ' ' * ((total - k) / 2) + '*' * k + '\n'
return s