是的,这是一项家庭作业。但是,请你,如果你要给我代码,请告诉我你做了多少详细的事情。我对此非常陌生。
因此,任务是根据用户输入的宽度打印ASCII菱形。我可以做钻石的前半部分,而不是下半部分,由于某些原因我只是看不出怎么做。
这是我的代码:
wid = int(input("Width: "))
i = 1
while i <= wid:
print(" " * (wid - i) + "* " * i)
i = i + 1
如果wid = 5,将输出以下内容:
Width: 5
*
* *
* * *
* * * *
* * * * *
答案 0 :(得分:1)
我尝试用注释解释代码。我希望它有所帮助。
wid = int(input("Width: "))
#no. of lines will be double the width
#each loop prints a line.
for i in range(wid *2):
#first half of the diamond
if i<=wid:
no_of_spaces = wid - i
no_of_stars = i
print(" "*no_of_spaces + "* "*no_of_stars)
#next half of the diamond
else:
no_of_spaces = i - wid
no_of_stars = 2*wid - i
print(" "*no_of_spaces + "* "*no_of_stars)
答案 1 :(得分:1)
i=1
j=input("ENTER NO =")
l=0
for i in range(i,j-((j/2)-1),1):
print (' ' * ((j+1)/2-i)+'*' *(i*2-1))
l=(j/2+1)
while (i==l):
i=1
for i in range(i,j,1):
print (' ' *((i*2)-i)+'*' *(j-i*2))
if [i==j-1]:
l=raw_input('<press enter to exit>')
答案 2 :(得分:0)
您从i = 1
开始,直到i > wid
为止。要制作钻石的底部,你必须与你为顶部所做的相反。代码很简单,但除非你要我,否则我不会写它。
答案 3 :(得分:0)
之后
i=i-2
while i>0:
print(" "*(wid-i)+"* "*i)
i=i-1;
答案 4 :(得分:0)
最简单的方法可能是有两个循环;一个计数i
最多width
,另一个计数i
返回1
。
width = int(input("Width: "))
i = 1
while i < width:
print " " * (width-i) + "* " * i
i += 1
while i > 0:
print " " * (width-i) + "* " * i
i -= 1
这有点没吸引力,因为它有点笨拙,但很简单。
另一种方法是让一个循环计数到宽度的两倍,做两件事之一。它的作用取决于i
是否已超过最大宽度点。所以它在同一个循环中“向上”和“向下”,从i
到1
计算width*2
。
width = int(input("Width: "))
i = 1
while i < width*2:
if i < width:
print " " * (width-i) + "* " * i
else:
print " " * (i-width) + "* " * (2*width-i)
i += 1
此:
print " " * (width-i) + "* " * i
...是你的代码。空格从width
到0
,*
从1
一直到width
。
而且:
print " " * (i-width) + "* " * (2*width-i)
......是倒是相同的东西。空格从0
返回到width
,*
从width
返回到1
。当i
超过width
时,这会发挥作用。
Width: 4
* # first half does this onward
* *
* * *
* * * *
* * * # second half does the rest downward
* *
*
另一种更复杂的方法是在列表中使用for循环,该列表包含向上和向下计数的数字。例如:[1, 2, 3, 2, 1]
要制作此列表,必须使用此代码。我知道,这有点难看:
rows = []
for i in range(1, max+1):
rows.append(i)
rows += rows[-2::-1]
然后,你看,我们运行了for循环。
width = int(input("Width: "))
rows = []
for i in range(1, width+1):
rows.append(i)
rows += rows[-2::-1] # takes a reversed list and adds it on to the end: [1, 2, 3, 2, 1]
for i in rows:
print " " * (width-i) + "* " * i
i
遍历rows
列表中的每个数字,类似于[1, 2, 3, 2, 1]
。然后我们只需要一个打印小发明。
在python中,几乎总是有一种更短且更难以理解的for循环方式,在这种情况下,我们可以通过缩短第一个for循环来消除两个额外的行:
width = int(input("Width: "))
rows = [ i for i in range(1, width+1)] # Brain-bending way of doing a for loop
rows += rows[-2::-1]
for i in rows:
print " " * (width-i) + "* " * i
如果你感觉有点疯狂,这里只是整个事情的两行版本!
width = int(input("Width: "))
print "\n".join([ " "*(width-i) + "* "*i for i in [ i for i in range(1, width+1) ]+[ i for i in range(1, width+1) ][-2::-1] ])
但我一般不推荐这种编码方式。
对不起,我最后得到了一点......但我现在能说的最好的事情就是尝试一切并玩弄!
希望有所帮助。 :)
答案 5 :(得分:0)
由于已经解决了一些好的方法,这里有一些有趣的小hacky解决方案。
这是一个使用Python 2.7 string.center
仅用于shits。
import string
width = int(raw_input("Width:"))
for i in range(width):
print string.center(i * " *", width * 2 )
for i in range(width,0,-1):
print string.center(i * " *", width * 2 )
这是一个令人愤慨的人,他们使用HTML来居中。
file = open('file.html','w')
file.write("<div align='center'>")
for i in range(width):
file.write(i * " *")
file.write("<br>")
for i in range(width,0,-1):
file.write(i * " *")
file.write("<br>")
file.write("</div>")
file.close()
import webbrowser
webbrowser.open("file.html")
答案 6 :(得分:0)
检查出(对于python 2.7x):
width = 1
width += int(raw_input('Width : '))
for i in range (1,width):
for j in range (width,i,-1):
print " ",
for j in range (1,i,1):
print " * ",
print
for i in range (width,1,-1):
for j in range (width,i,-1):
print " ",
for j in range (1,i,1):
print " * ",
print
这个有效!!但不是在任何浏览器窗口中。 。