如何使用Python在控制台/终端实现动态扩散的菱形星号图案动画
菱形星号逐圈绘制动画实现方案
原代码问题排查
你遇到的清空控制台不生效、看不到逐圈绘制效果的核心原因有两个:
os.system("clear")仅适用于Linux/macOS系统,Windows系统下需要调用os.system("cls")才能完成清屏- 代码没有添加帧间隔,执行速度太快会直接跳转到最终渲染结果,看不到中间动画过程
修复后可运行代码
import os import sys import time import numpy as np def get_string(pattern, num): string = "" for i in range(num): for j in range(num): if pattern[i][j] == 0: string += " " else: string += " * " string += "\n" return string # 跨系统清屏函数 def clear_screen(): os.system('cls' if os.name == 'nt' else 'clear') num = 5 pattern = np.zeros((num, num)) loc = num // 2 # 第一帧:中心星号 pattern[loc, loc] = 1 string = get_string(pattern, num) clear_screen() sys.stdout.write(string) sys.stdout.flush() time.sleep(0.5) # 逐圈向外绘制 for k in range(1, loc+1): for i in range(num): for j in range(num): eclu = abs(i - loc) + abs(j - loc) if eclu == k: pattern[i][j] = 1 string = get_string(pattern, num) clear_screen() sys.stdout.write(string) sys.stdout.flush() time.sleep(0.5)
无系统调用清屏的替代方案
如果不想调用系统命令清屏,可以使用终端通用的ANSI转义序列实现清屏,替换上面的clear_screen函数即可,性能更流畅:
def clear_screen(): # \033[2J 清屏,\033[H 移动光标到左上角 sys.stdout.write("\033[2J\033[H") sys.stdout.flush()
该方案在大部分现代终端(Windows Terminal、PowerShell、macOS终端、Linux各终端)都可正常运行,老版本Windows cmd建议使用系统调用清屏方案。
内容的提问来源于stack exchange,提问作者Vishal T
相关产品推荐
相关产品推荐

