我正在尝试制作一个能够用给定输入绘制领结的代码。
领结:
* *
*** ***
**********
*** ***
* *
我正在研究两种方法。任何人都可以告诉我,如果我在正确的道路上?我好像迷路了......
num = int(input("Enter an odd number greater than 4: "))
row = 1
row_space = row*2-1
space_tot = num*2 - row_space*2
stars = int((num*2 - space_tot)/2)
space = ""
for x in range(num):
print("*"*stars+" "*space_tot+"*"*stars)
row += 1
space_tot -= 2
def triangle(n):
for x in range(n,0,2):
print ('*'*x)
for x in range(n,0,-2):
print ('*'*x)
n -= 1
triangle(num)
答案 0 :(得分:3)
num = int(input("Enter an odd number greater than 4: "))
center = (num - 1)//2
for row in range(num):
nspaces = 2*abs(row - center)
nstars = num - nspaces
print nstars*'*' + 2*nspaces*' ' + nstars*'*'
让我们看一下案例num=5
所需的输出(添加行号):
0 * *
1 *** ***
2 **********
3 *** ***
4 * *
让我们将其视为左半部分和右半部分。观察每一半的中心行有num
个星星。中心行中的空格数为零。对于我们离开中心的每一行,每一半的空间数增加两个。以数学方式表达:
nspaces = 2*abs(row - center)
每一半都是num
列宽。因此,如果一半有nspaces
个空格,那么这一半中的星数是:
nstars = num - nspaces
计算了这两者之后,只需将其全部打印出来:
print nstars*'*' + 2*nspaces*' ' + nstars*'*'
每行都执行一次。
答案 1 :(得分:1)
当你学习Python时,最好查看它的库函数。在Python中,一切都是对象。每个对象都有方法。以下是您需要了解的有关Python中string
的所有信息的链接。
https://docs.python.org/2/library/string.html
您将在此处获得与您的问题直接相关的许多功能。你在Python中使用对象越熟悉,你在Python编程中就越好。这适用于任何语言。如果您想要在特定语言中变得更好,请了解其具体细节。
对于您的问题,您可以了解方法ljust()
,rjust()
和join()
。你是如何使用它们的?
In [126]: '[' + 'abcd'.ljust(10) + ']'
Out[126]: '[abcd ]'
In [127]: '[' + 'abcd'.rjust(10) + ']'
Out[127]: '[ abcd]'
In [134]: '-][-'.join(['A', 'list', 'of', 'strings'])
Out[134]: 'A-][-list-][-of-][-strings'
当然,您可以将'abcd'
替换为'*'
。在这种情况下,你有,
In [129]: ('*'*3).ljust(5) + ('*'*3).rjust(5)
Out[129]: '*** ***'
现在,您只需将3
替换为您选择的计数器即可。请注意,您的数字会以2s递增。在你这样做之前,我希望你知道列表理解。如果没有,你可以在这里了解它:
https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
In [132]: [('*'*i).ljust(5) + ('*'*i).rjust(n) for i in range(1, n+2, 2)]
Out[132]: ['* *', '*** ***', '**********']
现在让我们将其保存在变量中,并将它们连接在一起......
In [135]: l = [('*'*i).ljust(5) + ('*'*i).rjust(n) for i in range(1, n+2, 2)]
In [137]: print '\n'.join(l)
* *
*** ***
**********
当然,你也需要另一半。为此,您需要使用几乎上面创建的所有列表l
。注意:
In [138]: l # Original list
Out[138]: ['* *', '*** ***', '**********']
In [139]: l[:-1] # Original list - the last value in the list
Out[139]: ['* *', '*** ***']
In [140]: l[:-1][::-1] # reverse that one
Out[140]: ['*** ***', '* *']
In [141]: l + l[:-1][::-1] # join the reversed list to the original list
Out[141]: ['* *', '*** ***', '**********', '*** ***', '* *']
最后,我们可以加入这两个列表并组成bwotie:
In [143]: print '\n'.join(l + l[:-1][::-1])
* *
*** ***
**********
*** ***
* *
总而言之,你需要3行打印领结:
n = 5 # Or a user input here ...
l = [('*'*i).ljust(5) + ('*'*i).rjust(n) for i in range(1, n+2, 2)]
print '\n'.join(l + l[:-1][::-1])
希望你能看到用Python完成文档是值得的。您将能够获得许多有用的方法,这可以使编码变得非常容易。使用Python库的人越熟悉,编码就越好。大多数这些库都针对特定系统进行了微调,因此也很难超越它们的效率。所以你获得两倍的优势,同样的努力:)。
祝你的节目顺利。
答案 2 :(得分:0)
def triangle(n):
for x in range(n,0,2):
print ('*'*x)
for x in range(n,0,-2):
print ('*'*x)
n -= 1