[英]Print a 'X' pattern of '*'
我正在嘗試在 Python 中打印此模式:
* *
* *
* *
*
* *
* *
* *
並想出了這個代碼:
size = 7
inner_size = size - 3
space=0
for i in range(inner_size):
print (' ' * space + '*' + ' ' * inner_size + '*')
inner_size -=2
space +=1
print " *"
t_size=7
t_inner_size = 0
space=3
for i in range(inner_size):
print (' ' * space + '*' + ' ' * inner_size + '*')
inner_size +=2
space -=1
但是,它打印了這個:
* *
* *
**
**
*
如何打印所需的圖案? 是否可以在一個循環中完成此操作?
這是一種方法:
def pattern(size):
for i in range(size):
print("".join("*" if j == i or size - 1 - j == i else " "
for j in range(size)))
詳細信息: i
是行索引, j
是列索引(均從零開始)。 j == i
條件生成從左上角到右下角的對角線。 size - 1 - j == i
條件生成從右上角到左下角的對角線。 它們一起產生了 X 形狀。
當調用大小為 7 時:
pattern(7)
它打印:
* *
* *
* *
*
* *
* *
* *
請注意,它適用於偶數和奇數大小。 在大小均勻的情況下,生成的 X 將在中心包含一個 2x2 的星星塊。
解決問題的另一種方法:
for i in range(5):
for j in range(5):
if ((i==j) or j==(5-i-1)):
print " *",
else:
print " ",
print ""
~
我在問題中使用了您現有代碼中的想法,並使用簡單、清晰的代碼在單個循環中進行了一些調整:
def xprint(size):
i,j = 0,size - 1
while j >= 0 and i < size:
initial_spaces = ' '*min(i,j)
middle_spaces = ' '*(abs(i - j) - 1)
final_spaces = ' '*(size - 1 - max(i,j))
if j == i:
print initial_spaces + '*' + final_spaces
else:
print initial_spaces + '*' + middle_spaces + '*' + final_spaces
i += 1
j -= 1
xprint(7)
它打印出:
* * * * * * * * * * * * *
一種線性時間簡單的方法。
您問是否可以通過“單循環”來完成。 所以你去:
n = 3
for i in range(-n, n + 1):
print('{}*{}{}'.format(
(n + 1 - abs(i)) * ' ',
(2 * abs(i) - 1) * ' ',
'' if i == 0 else '*'))
說明:
對於任何給定的行,我們需要 2 組空格。 第一個*
之前的空格和第一個*
之后的空格。 我們將字符串格式化如下: {}*{}
現在我們添加一個額外的占位符,因為每一行都有 2x '*',除了中間的一行。 我們以類似於-3 -2 -1 0 1 2 3
的方式進行計數,中間線的索引為0
。 因此現在我們的字符串格式變成了{}*{}{}
。
現在,第一個*
之前的空間需要n + 1 - abs(i)
否。 的空間。
第一個*
之后的空格需要n + 1 - abs(i)
沒有空格。
輸出(n=3):
* *
* *
* *
*
* *
* *
* *
輸出(n=5):
* *
* *
* *
* *
* *
*
* *
* *
* *
* *
* *
雖然人們使用整個圖案尺寸作為輸入,但我認為使用重復尺寸作為輸入更直觀。 因此,只需根據需要更改n
的值。
PS:這不是最優雅的,也不是最清晰的解決方案。 但它在單個循環中工作。
你也可以這樣做:
pattern_size = 7
for t in range(pattern_size):
pattern = list(" " * pattern_size)
pattern[t] = "*"
pattern[-(t+1)] = "*"
print("".join(pattern))
輸出:
* *
* *
* *
*
* *
* *
* *
上述模式的另一個代碼
i = 0
j = 6
for row in range(7):
for column in range(7):
if(column == i or column == j):
print("*",end="")
else:
print(" ",end="")
print("\n")
i += 1
j -= 1
結果:
* *
* *
* *
*
* *
* *
* *
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.