我必须像这样建造一个空心钻石:
x(t,u,v) = ((cos(u)+2)cos(v))cos(a) + ((sin(u)+2)cos(t))sin(a)
y(u,v) = (cos(u)+2)sin(v)
z(t,u) = (sin(u)+2)sin(t)
这是我到目前为止所拥有的,
{{1}}
然而,使用我拥有的代码,我只获得了一半的钻石。
{{1}}
我应该使用代替循环而不是能够完成钻石吗?
答案 0 :(得分:1)
你已经想出如何为每一行打印第一组星号;到目前为止工作很好。现在,您需要确定要打印的空间数量。让我们进行第一个循环,在 w 行的网格中打印 h 星号。
左侧需要 h 星号,右侧需要 h ;总共 2 * h 星号。这会在中间留下 s = w - 2 * h 空格。
因此,对于每一行,您需要打印...
这是否会让您对当前代码进行有用的更新?
答案 1 :(得分:0)
如你所说,建造一个空心钻石意味着可能如下:
0
个空格)2
个空格的行4
个空格的行l-2
个空格的行l-2
个空格的行l-4
个空格的行l-6
个空格的行l-l
个空格) n
是“步骤”,或者在每次迭代中“丢失”了多少个星号。 l
是您广场的大小。
因此,您的算法由两部分组成,即增加的空间和减少的空间。
所以,你的算法应该是这样的
for (spaces = 0; spaces < size/2 ; spaces = spaces + 1 )
for (asterisk = 0; asterisk < size/2 - spaces; asterisk = asterisk + 1)
print '*'
for (space = 0; space < spaces*2; space = space + 1)
print ' '
for (asterisk = 0; asterisk < size/2 - spaces; asterisk = asterisk + 1)
print '*'
for (spaces = size/2 - 1; spaces >= 0; spaces = spaces - 1)
# The same inner code as above
我的目的是没有把python代码放在那里,所以你可以正确地完成你的功课;),但是一旦你理解了算法,这应该很容易。
答案 2 :(得分:0)
我不会从你那里偷走修理作业的快乐,但是这个练习非常有趣,所以我会给你另一个可能的版本给你一些想法:
def cool_diamond(w):
r = []
for y in range(w):
s = '*' * (w - y)
r.append("{0}{1}{0}".format(s, ''.join(['-' for x in range(2 * y)]), s))
return '\n'.join(r + r[::-1])
for i in range(3, 6):
print cool_diamond(i)
print('-' * 80)
我强烈建议您先花点时间来修理你的!否则你不会从练习中学到任何东西。
一旦你修复了你的工作,你会对付出的努力感到非常满意,然后......就在那时,你可以考虑是否可以改善你的版本或重构。
快乐的编码!
******
**--**
*----*
*----*
**--**
******
--------------------------------------------------------------------------------
********
***--***
**----**
*------*
*------*
**----**
***--***
********
--------------------------------------------------------------------------------
**********
****--****
***----***
**------**
*--------*
*--------*
**------**
***----***
****--****
**********
--------------------------------------------------------------------------------
答案 3 :(得分:0)
在这里,请记住,只有输入的偶数才有效,否则程序将执行比该数字少的数字。我已经为您编写了代码。
n=int(input('Enter a number'))
if n%2==0:
pass
else:
n-=1
print("Works only for even number,so decremented the number by 1")
k=n//2
print(a*n)
for i in range(1,k):
print(a*(k-i),end='')
print(b*(c),end='')
print(a*(k-i),end='')
print()
c=c+2
c=c-2
for i in range(1,k):
print(a*(i),end='')
print(b*(c),end='')
print(a*(i),end='')
print()
c-=2
print(a*n)
您也可以将其用作功能。您可以轻松地进行转换。您可以同时使用while和for循环。
查看while循环。
a='*' ; b=' ';c=2
n=int(input('Enter a number'))
if n%2==0:
pass
else:
n-=1
print("Works only for even number,so decremented the number by 1")
k=n//2
print(a*n)
i=1
while i<k:
print(a*(k-i),end='')
print(b*c,end='')
print(a*(k-i),end='')
print()
c=c+2
i+=1
c-=2
i=1
while i<k:
print(a*i,end='')
print(b*c,end='')
print(a*i,end='')
print()
c-=2
i+=1
print(a*n)
希望有帮助。