我正在开发一个用 Python 打印菱形图案的程序。
下面是我的代码:
a=int(input("Enter the minimum number of stars:"))
b=int(input("Enter the maximum number of stars:"))
rows=(b-a+1)
for i in range(rows):
print(' '*(rows-i-1)+'* '*(i+a))
for j in range(rows-2,-1,-1):
print(' '*(rows-j-1)+'* '*(j+a))
下面是执行代码的输出截图:
我需要打印图案中的星星总数。但是,count() 在这种情况下不起作用。
您能为此建议一种替代方法吗?
最佳答案
首先,您的代码已经计算出在每个 for
循环中需要打印多少颗星:
for i in range(rows):
print(' '*(rows-i-1)+'* '*(i+a))
# ^^^ number of stars on this line
for j in range(rows-2,-1,-1):
print(' '*(rows-j-1)+'* '*(j+a))
# ^^^ number of stars on this line
因此您可以在打印时将这些数字相加。
但是您真的不需要计算或求和任何东西,您可以计算。
您正在构建三角形,因此您可以使用 triangle number formula计算进入三角形的星星数量。对于由 n
行组成的三角形,所需的星数为:
n x (n + 1)
-----------
2
每次将最小星数 a
设置为 1 时,您就会得到两个完整的三角形:一个有 b
行,一个有 b - 1
行;例如对于示例图像,其中 b
设置为 5,顶部三角形中有 5 行:
1. *
2. * *
3. * * *
4. * * * *
5. * * * * *
底部还有 4 个:
4. * * * *
3. * * *
2. * *
1. *
当 a
大于 1 时,您基本上留下了两个较小的三角形,高度均为 a - 1
。假设 a = 3
,您遗漏了第一行和最后两行:
1. . # not printed
2. . . # not printed
3. * * *
4. * * * *
5. * * * * *
4. * * * *
3. * * *
2. . . # not printed
1. . # not printed
所以你可以计算出需要的星星数 b
的三角形数,加上 b - 1
的三角形数,减去 a 的三角形数- 1
,两次。
这是进行计算的代码:
def triangle_number(n):
return n * (n + 1) // 2
total_stars = triangle_number(b) + triangle_number(b - 1) - (2 * triangle_number(a - 1))
对于图像中的示例,a = 1
和 b = 5
,上面计算了 5 行三角形中的星星数 (b
),在一个有 4 行的三角形中(b - 1
,倒三角形),并减去如果 a
更大则必须删除的星星大于 1(所以这里是 0
):
>>> a = 1
>>> b = 5
>>> triangle_number(5)
15
>>> triangle_number(4)
10
>>> triangle_number(0)
0
>>> triangle_number(b) + triangle_number(b - 1) - (2 * triangle_number(a - 1))
25
对于 a = 5
和 b = 9
,输出如下所示:
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
并且该公式正确地告诉您必须打印多少颗星:
>>> a, b = 5, 9
>>> triangle_number(b) + triangle_number(b - 1) - (2 * triangle_number(a - 1))
61
>>> """
... * * * * *
... * * * * * *
... * * * * * * *
... * * * * * * * *
... * * * * * * * * *
... * * * * * * * *
... * * * * * * *
... * * * * * *
... * * * * *
... """.count('*')
61
您可以通过对b
的三角形公式求和来进一步简化这里的公式;将b
和b - 1
代入公式;当 a
为 1 时,您基本上是在创建一个大小为 b
的 正方形:
(b * (b + 1) // 2) + (b - 1) * b // 2) ==
(b * (b + 1)) + ((b - 1) * b) // 2 ==
(b * (b + b)) // 2 ==
(b * 2 * b) // 2 ==
b * b
对 a - 1
三角形做同样的事情:
2 * ((a - 1) * a // 2) ==
(a - 1) * a
那么简化的计算是:
total_stars = b * b - (a - 1) * a
这也产生了正确的值:
>>> a, b = 1, 5
>>> b * b - (a - 1) * a
25
>>> a, b = 5, 9
>>> b * b - (a - 1) * a
61
关于python - 计算菱形图案中星星的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58273088/