我想在 Python 3.5 中打印以下模式(我是新的编码):
*
***
*****
*******
*********
*******
*****
***
*
但我只知道如何使用的代码打印以下内容,但不知道如何反转它,使其成为一个完整的钻石:
n = 5
print("Pattern 1")
for a1 in range (0,n):
for a2 in range (a1):
print("*", end="")
print()
for a1 in range (n,0,-1):
for a2 in range (a1):
print("*", end="")
print()
*
**
***
****
*****
****
***
**
*
任何帮助都将不胜感激!
由于中间和最大的一排星星有 9 颗星,你应该让n
等于 9 颗。你可以打印出一半的钻石,但现在你必须尝试制作一个函数,打印特定数量的空格,然后是特定数量的星星。所以试着用每行中的空格和星星数开发一个模式,
Row1: 4 spaces, 1 star, 4 spaces
Row2: 3 spaces, 3 stars, 3 spaces
Row3: 2 spaces, 5 stars, 2 spaces
Row4: 1 space, 7 stars, 1 space
Row5: 0 spaces, 9 stars, 0 spaces
Row6: 1 space, 7 stars, 1 space
Row7: 2 spaces, 5 stars, 2 spaces
Row8: 3 spaces, 3 stars, 3 spaces
Row9: 4 spaces, 1 star, 4 spaces
那么你能推断出什么呢?从第 1 行到 (n + 1) / 2,随着星数的增加,空格的数量减少。所以从 1 到 5,# of stars
= (row number
* 2)-1,而# of spaces before stars
= 5-row number
。
从第 (n + 1) / 2 + 1 行到第 9 行,间隔数增加,而星数减少,所以从 6 到 n,# of stars
= ((n + 1-row number
) * 2)-1,而# of spaces before stars
=row number
-5。
根据这些信息,您应该能够创建一个看起来像这样的程序,
n = 9
print("Pattern 1")
for a1 in range(1, (n+1)//2 + 1): #from row 1 to 5
for a2 in range((n+1)//2 - a1):
print(" ", end = "")
for a3 in range((a1*2)-1):
print("*", end = "")
print()
for a1 in range((n+1)//2 + 1, n + 1): #from row 6 to 9
for a2 in range(a1 - (n+1)//2):
print(" ", end = "")
for a3 in range((n+1 - a1)*2 - 1):
print("*", end = "")
print()
请注意,您可以将 n 替换为任何奇数,以创建许多行的完美菱形。
这是一个基于高度等于顶部到中间或高度一半的解决方案。例如,高度输入为的 4 (7) 或 5 (9)。此方法将产生奇数实际高度
h = int(input("please enter diamond's height:"))
for i in range(h):
print(" "*(h-i), "*"*(i*2+1))
for i in range(h-2, -1, -1):
print(" "*(h-i), "*"*(i*2+1))
# please enter diamond's height:4
# *
# ***
# *****
# *******
# *****
# ***
# *
#
# 3, 2, 1, 0, 1, 2, 3 space
# 1, 3, 5, 7, 5, 3, 1 star
# please enter diamond's height:5
# *
# ***
# *****
# *******
# *********
# *******
# *****
# ***
# *
#
# 4, 3, 2, 1, 0, 1, 2, 3, 4 space
# 1, 3, 5, 7, 9, 7, 5, 3, 1 star
这是另一个基于高度等于顶部到底部或实际总高度的解决方案。例如,高度在输入为 7 或 9。当用户输入偶数作为高度时,菱形将稍微倾斜。
h = int(input("please enter diamond's height:"))
for i in range(1, h, 2):
print(" "*(h//2-i//2), "*"*i)
for i in range(h, 0, -2):
print(" "*(h//2-i//2), "*"*i)
# please enter diamond's height:7
# *
# ***
# *****
# *******
# *****
# ***
# *
#
# 3, 2, 1, 0, 1, 2, 3 space
# 1, 3, 5, 7, 5, 3, 1 star
#
# please enter diamond's height:9
# *
# ***
# *****
# *******
# *********
# *******
# *****
# ***
# *
#
# 4, 3, 2, 1, 0, 1, 2, 3, 4 space
# 1, 3, 5, 7, 9, 7, 5, 3, 1 star
正如 Martin Evans 在他的帖子中指出的:https://stackoverflow.com/a/32613884/4779556钻石图案的可能解决方案可能是:
side = int(input("Please input side length of diamond: "))
for x in list(range(side)) + list(reversed(range(side-1))):
print('{: <{w1}}{:*<{w2}}'.format('', '', w1=side-x-1, w2=x*2+1))
我今天学到了一个非常简单的解决方案,想分享一下。:)
num = 9
for i in range(1, num+1):
i = i - (num//2 +1)
if i < 0:
i = -i
print(" " * i + "*" * (num - i*2) + " "*i)
逻辑如下:
(此处空格表示为“0”。)
# i = 1 | new i = 1 - 5 = -4 | * : 9 - 8 = 1 | 0000 + * + 0000
# i = 2 | new i = 2 - 5 = -3 | * : 9 - 6 = 3 | 000 + *** + 000
# i = 3 | new i = 3 - 5 = -2 | * : 9 - 4 = 5 | 00 + ***** + 00
# i = 4 | new i = 4 - 5 = -1 | * : 9 - 2 = 7 | 0 + ******* + 0
# i = 5 | new i = 5 - 5 = 0 | * : 9 - 0 = 9 | *********
# i = 6 | new i = 6 - 5 = 1 | * : 9 - 2 = 7 | 0 + ******* + 0
# i = 7 | new i = 7 - 5 = 2 | * : 9 - 4 = 5 | 00 + ***** + 00
# i = 8 | new i = 8 - 5 = 3 | * : 9 - 6 = 3 | 000 + *** + 000
# i = 9 | new i = 9 - 5 = 4 | * : 9 - 8 = 1 | 0000 + * + 0000
结果如下:
*
***
*****
*******
*********
*******
*****
***
*
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(11条)