# Python如何打印出菱形
在Python編程中,打印特定圖形是鍛煉邏輯思維和循環控制能力的經典練習。本文將詳細介紹如何使用Python打印出對稱的菱形圖案,包括完整代碼實現、分步解析以及多種變形思路。
## 一、菱形的基本結構分析
菱形由上下兩個對稱的三角形組成:
- **上半部分**:從1開始逐行增加星號數量,呈金字塔形
- **下半部分**:從最大寬度開始逐行減少星號數量,呈倒金字塔形
示例輸出(5行菱形):
*
*
## 二、基礎實現代碼
```python
def print_diamond(n):
# 上半部分
for i in range(1, n+1, 2):
spaces = (n - i) // 2
print(" " * spaces + "*" * i)
# 下半部分
for i in range(n-2, 0, -2):
spaces = (n - i) // 2
print(" " * spaces + "*" * i)
# 示例:打印5行菱形
print_diamond(5)
n
:控制菱形最寬處的星號數量(必須為奇數)for i in range(1, n+1, 2):
spaces = (n - i) // 2
print(" " * spaces + "*" * i)
range(1, n+1, 2)
:生成1,3,5…n的奇數序列(總寬度 - 當前星號數)/2
for i in range(n-2, 0, -2):
spaces = (n - i) // 2
print(" " * spaces + "*" * i)
range(n-2, 0, -2)
:生成n-2,n-4…1的遞減奇數序列def print_diamond(n):
n = n if n % 2 != 0 else n + 1 # 自動轉為奇數
# 剩余代碼不變...
def print_hollow_diamond(n):
n = n if n % 2 else n + 1
# 上半部分
for i in range(1, n+1, 2):
spaces = (n - i) // 2
if i == 1:
print(" " * spaces + "*")
else:
print(" " * spaces + "*" + " " * (i-2) + "*")
# 下半部分
for i in range(n-2, 0, -2):
spaces = (n - i) // 2
if i == 1:
print(" " * spaces + "*")
else:
print(" " * spaces + "*" + " " * (i-2) + "*")
def print_diamond_math(n):
radius = n // 2
for y in range(-radius, radius+1):
for x in range(-radius, radius+1):
if abs(x) + abs(y) <= radius:
print("*", end="")
else:
print(" ", end="")
print()
print("\033[31m" + "*" + "\033[0m") # 紅色星號
with open("diamond.txt", "w") as f:
import sys
sys.stdout = f
print_diamond(7)
sys.stdout = sys.__stdout__
對于超大菱形(n>1000): - 使用字符串緩存代替多次print - 考慮使用生成器逐行生成
def generate_diamond(n):
n = n if n % 2 else n + 1
for i in range(1, n+1, 2):
yield " " * ((n - i) // 2) + "*" * i
for i in range(n-2, 0, -2):
yield " " * ((n - i) // 2) + "*" * i
# 使用示例
for line in generate_diamond(21):
print(line)
通過掌握這些方法,你不僅可以打印基礎菱形,還能根據需求進行各種變形擴展。關鍵是要理解空格與星號的數量關系,以及循環控制的核心邏輯。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。