我想從一個n
奇數且至少等于 3 的給定中繪制一個星號三角形。到目前為止,我做了以下作業:
def main():
num = 5
for i in range(num):
if i == 0:
print('-' * num '*' * (i 1) '-' * num)
elif i % 2 == 0:
print('-' * (num-i 1) '*' * (i 1) '-' * (num-i 1))
else:
continue
if __name__ == "__main__":
main()
結果是這樣的:
-----*-----
----***----
--*****--
但是我如何編輯代碼,使連字符的數量對應于理想的結果:
-----*-----
----***----
---*****---
--*-----*--
-***---***-
*****-*****
uj5u.com熱心網友回復:
可能有更好的方法,但這似乎有效:
def triangle(n):
assert n % 2 != 0 # make sure n is an odd number
hyphens = n
output = []
for stars in range(1, n 1, 2):
h = '-'*hyphens
s = '*'*stars
output.append(h s h)
hyphens -= 1
pad = n // 2
mid = n
for stars in range(1, n 1, 2):
fix = '-'*pad
mh = '-'*mid
s = '*'*stars
output.append(fix s mh s fix)
pad -= 1
mid -= 2
print(*output, sep='\n')
triangle(5)
輸出:
-----*-----
----***----
---*****---
--*-----*--
-***---***-
*****-*****
uj5u.com熱心網友回復:
想想你正在迭代什么以及你正在用你的回圈做什么。目前,您正在迭代到您想要的最大連字符數,并且您似乎將其視為要列印的星號數量,但是如果您查看 triforce 的邊緣,則連字符的數量每個減少 1行,從 5 到 0。對我來說,這意味著您需要在num-i
每次迭代時列印連字符,迭代行號而不是連字符/星號的最大數量(這些值接近,但區別很重要)。
我建議先嘗試制作一個大的實心三角形,即
-----*-----
----***----
---*****---
--*******--
-*********-
***********
因為這是一個更容易解決的問題,并且與您嘗試做的只是一個修改(這是星號數量和行號之間的區別很重要的地方,因為您的模式會根據您所在的行而改變上)。
我會幫助你開始;對于任何奇數n
,您需要列印的行數將是(n 1)
。如果您將范圍修改為超過此值,您應該能夠計算出每行要列印多少個連字符和星號以形成一個大三角形,然后您可以修改它以切掉中心。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504644.html
上一篇:如何找到最佳