【问题标题】:python steady distance between signs标志之间的python稳定距离
【发布时间】:2021-03-29 21:25:48
【问题描述】:

在我的代码中,当数字最后增加一个数字时,构成模拟框的字符会移动。当它从 9 到 10,从 99 到 100 时,它希望竖线不要移动。目前,在 {x} 和 | 之间插入空格。我的代码是:

import time
import os
x = 0
y = 0
while True:
    print(f"""
    | -------------------------------------------------------|
    | great quote about life                                 |
    | that  can change every 0.5 sec                         |
    | {x}                                                      |
    | {y}                                                      |
    |                                                        |
    | -------------------------------------------------------|
    """)
    time.sleep(0.5)
    x += 9
    y += 9
    os.system('cls' if os.name == 'nt' else 'clear')

【问题讨论】:

    标签: python loops time operating-system format


    【解决方案1】:

    要打印带有固定空格的数字,您可以使用 .format 方法

    print(f"""
    | -------------------------------------------------------|
    | great quote about life                                 |
    | that  can change every 0.5 sec                         |
    """
    +
    "| {:<55d}|\n    | {:<55d}|".format(x,y)
    +
    """
    |                                                        |
    | -------------------------------------------------------|
    """)
    

    有关更多格式选项,请参阅here

    【讨论】:

      【解决方案2】:

      您可以计算数字后面的填充长度。我发现在您的示例中,总共应该有 55 个字符的空间,包括您显示的数字。

      我创建了一个辅助函数,它使用strlen 组合计算数字的长度,并通过减少数字占用的空间量来计算填充。

      import time
      import os
      
      
      def get_padding(length_of_window, i):
          return (length_of_window - len(str(i))) * ' '
      
      
      def main():
          x = 0
          y = 0
          length_of_window = 55
      
          while True:
              print(f"""
                  | -------------------------------------------------------|
                  | great quote about life                                 |
                  | that  can change every 0.5 sec                         |
                  | {x}{get_padding(length_of_window, x)}|
                  | {y}{get_padding(length_of_window, y)}|
                  |                                                        |
                  | -------------------------------------------------------|
                  """)
              time.sleep(0.5)
              x += 9
              y += 9
              os.system('cls' if os.name == 'nt' else 'clear')
      
      
      if __name__ == '__main__':
          main()
      

      您也可以直接使用String Format Syntax,而无需连接或辅助函数。

      import time
      import os
      
      
      def main():
          x = 0
          y = 0
          length_of_window = 55
      
          while True:
              print(f"""
                  | -------------------------------------------------------|
                  | great quote about life                                 |
                  | that  can change every 0.5 sec                         |
                  | {x:<{length_of_window}}|
                  | {y:<{length_of_window}}|
                  |                                                        |
                  | -------------------------------------------------------|
                  """)
              time.sleep(0.5)
              x += 9
              y += 9
              os.system('cls' if os.name == 'nt' else 'clear')
      
      
      if __name__ == '__main__':
          main()
      

      【讨论】:

      • 我还有一个问题。当我在终端中打开我的程序时,我觉得我的每秒帧数非常低,因为刷新时的窗口感觉就像丢失了一半的帧
      • 我没有这个问题,所以我不能确定。但是,您总是可以增加迭代之间的睡眠时间。