You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python终端文本着色异常求助:FPS百分比显示异常如何修复?

终端输出FPS时颜色格式异常的问题排查与修复

问题描述

运行以下Python代码:

import time

s = time.time_ns()/1000000
en = time.time_ns()/1000000
ma = 0

while True:
    e = time.time_ns()/1000000
    if s - en >= 1000:
        ma = max(ma,int(1/(e-s)))
        hi = int(((1/(e-s))/ma)*100)
        jk = {hi>50:[int(((hi-50)/50)*255)-255, 255], hi<=50:[255, (((hi)/50)*255)]}[True]
        print("\033[A\033[K\033[A{:>5}fps {:>3}%\033[0;0m".format(int(1/(e-s)), "\033[38;2;{};{};0m{}".format(jk[0], int(jk[1]), hi)))
        en = time.time_ns()/1000000
    time.sleep(0.001)
    s = time.time_ns()/1000000

当hi变量大于50时,终端输出异常:

95fps 214.2;255;0m58%

期望输出应为:

75fps 75% (75%是彩色的)

问题原因

  1. ANSI颜色值非法:当hi>50时,计算jk[0]的公式int(((hi-50)/50)*255)-255会得到负数(比如hi=58时,计算得((8/50)*255)-255=40.8-255=-214.2,取整后是-214),而终端的ANSI RGB颜色值范围是0-255,负数会导致终端无法正确解析颜色代码,直接输出原始字符串。
  2. 字典取值逻辑错误:{hi>50:[...], hi<=50:[...]}[True]写法逻辑混乱,字典的键是hi>50和hi<=50的布尔结果,用[True]取值属于侥幸匹配,可读性极差且容易引发逻辑错误。
  3. 输出格式拼接错误:颜色代码没有正确包裹百分比数字,导致部分ANSI代码直接暴露在输出内容中。

修复方案

修正后的代码

import time

s = time.time_ns() / 1000000
en = time.time_ns() / 1000000
ma = 0

while True:
    e = time.time_ns() / 1000000
    if s - en >= 1000:
        current_fps = int(1 / (e - s))
        ma = max(ma, current_fps)
        hi = int((current_fps / ma) * 100)
        
        # 修正颜色值计算,确保RGB值在0-255范围内
        if hi > 50:
            # 从黄色(255,255,0)过渡到红色(255,0,0)
            green = int(255 - ((hi - 50) / 50) * 255)
            red = 255
        else:
            # 从绿色(0,255,0)过渡到黄色(255,255,0)
            red = int((hi / 50) * 255)
            green = 255
        blue = 0
        
        # 正确拼接ANSI颜色代码与输出内容
        color_code = f"\033[38;2;{red};{green};{blue}m"
        reset_code = "\033[0m"
        print(f"\033[A\033[K{:>5}fps {color_code}{hi:>3}%{reset_code}")
        
        en = time.time_ns() / 1000000
    time.sleep(0.001)
    s = time.time_ns() / 1000000

关键修改点

  • 颜色值范围修正:重新设计渐变逻辑,hi>50时绿色从255线性降到0,hi<=50时红色从0线性升到255,确保所有RGB值在0-255合法范围内。
  • 替换错误的字典取值:用清晰的if-else条件判断替代原本混乱的字典取值逻辑,代码可读性更强。
  • 优化输出格式:调整ANSI控制码位置,确保颜色代码正确包裹百分比数字,同时移除多余的光标上移指令,避免输出混乱。

内容的提问来源于stack exchange,提问作者Mohamed Ali Martins Agoussine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:45:58