Python 打印变量改变字符的位置

Python 打印变量改变字符的位置,python,symbols,Python,Symbols,我正在编写一个游戏项目,并正在通过代码来完成代码中的一些小错误和功能。我在用文字符号组成的图形框打印用户统计数据时遇到问题。 这是密码 当代码在游戏中运行时,看起来是这样的 ⚜================== Player 1 City ==================⚜ ⚜BaseHP = 1000 ⚜Troops = 20 ⚜Archers = 30 ⚜Food = 500 ⚜=============================================

我正在编写一个游戏项目,并正在通过代码来完成代码中的一些小错误和功能。我在用文字符号组成的图形框打印用户统计数据时遇到问题。 这是密码

当代码在游戏中运行时,看起来是这样的

⚜================== Player 1 City ==================⚜
⚜BaseHP  =  1000
⚜Troops  =  20
⚜Archers =  30
⚜Food    =  500
⚜===================================================⚜
⚜================== Player 1 City ==================⚜
⚜BaseHP  =  1000                                    ⚜
⚜Troops  =  20                                      ⚜
⚜Archers =  30                                      ⚜
⚜Food    =  500                                     ⚜
⚜===================================================⚜
但是我真的很想把用户的统计数据放在一个盒子里,就像这样

⚜================== Player 1 City ==================⚜
⚜BaseHP  =  1000
⚜Troops  =  20
⚜Archers =  30
⚜Food    =  500
⚜===================================================⚜
⚜================== Player 1 City ==================⚜
⚜BaseHP  =  1000                                    ⚜
⚜Troops  =  20                                      ⚜
⚜Archers =  30                                      ⚜
⚜Food    =  500                                     ⚜
⚜===================================================⚜
我知道这很挑剔,但我想把整个游戏做好,而不是让游戏中的一些东西看起来没有完成。问题是,4个列表在整个游戏中都会根据用户的行为改变值,因此无法预测,这意味着当值打印出来时,框右侧的符号不对齐。我如何保持角色在同一个位置,无论4个列表中的p1_basehp、p1_军队、p1_弓箭手和p1_食物是什么。
代码中没有错误,它只是一个查询。

因此,您需要做的是增加这么多空间,因为
=
的差异是str值的底线和长度

print ("⚜BaseHP  =  " + str (p1_basehp),' '*(40 - len(str(p1_basehp))),'*')
print ("⚜Troops  =  " + str (p1_troops),' '*(40 - len(str(p1_troops))),'*')
print ("⚜Archers =  " + str (p1_archers),' '*(40 - len(str(p1_archers))),'*')
print ("⚜Food    =  " + str (p1_food),' '*(40 - len(str(p1_food))),'*')
print ("⚜===================================================⚜")

因此,您需要做的是增加这么多的空间,因为
=
的差值是str值的底线和长度

print ("⚜BaseHP  =  " + str (p1_basehp),' '*(40 - len(str(p1_basehp))),'*')
print ("⚜Troops  =  " + str (p1_troops),' '*(40 - len(str(p1_troops))),'*')
print ("⚜Archers =  " + str (p1_archers),' '*(40 - len(str(p1_archers))),'*')
print ("⚜Food    =  " + str (p1_food),' '*(40 - len(str(p1_food))),'*')
print ("⚜===================================================⚜")

由于每个统计行的第一部分都有固定长度(12个字符),并且标题包含53个字符,因此需要在结尾字符
如果您的值只有一个数字,如果有两个数字,则为38,…依此类推。一、 e:
”*(40-len(str(p1_u))

注意:我使用
random
库来证明不同场景下的正确功能:

⚜===================================================⚜
[Vostro-3350 workspace]$ python so.py 
⚜================== Player 1 City ==================⚜
⚜BaseHP  =  846                                     ⚜
⚜Troops  =  334                                     ⚜
⚜Archers =  685                                     ⚜
⚜Food    =  94                                      ⚜
⚜===================================================⚜
[Vostro-3350 workspace]$ python so.py 
⚜================== Player 1 City ==================⚜
⚜BaseHP  =  70                                      ⚜
⚜Troops  =  8                                       ⚜
⚜Archers =  306                                     ⚜
⚜Food    =  411                                     ⚜
⚜===================================================⚜

由于每个统计行的第一部分都有固定长度(12个字符),并且标题包含53个字符,因此需要在结尾字符
如果您的值只有一个数字,如果有两个数字,则为38,…依此类推。一、 e:
”*(40-len(str(p1_u))

注意:我使用
random
库来证明不同场景下的正确功能:

⚜===================================================⚜
[Vostro-3350 workspace]$ python so.py 
⚜================== Player 1 City ==================⚜
⚜BaseHP  =  846                                     ⚜
⚜Troops  =  334                                     ⚜
⚜Archers =  685                                     ⚜
⚜Food    =  94                                      ⚜
⚜===================================================⚜
[Vostro-3350 workspace]$ python so.py 
⚜================== Player 1 City ==================⚜
⚜BaseHP  =  70                                      ⚜
⚜Troops  =  8                                       ⚜
⚜Archers =  306                                     ⚜
⚜Food    =  411                                     ⚜
⚜===================================================⚜
可以使用填充和对齐选项来完成此操作

In [120]: p1 = 1
In [121]: p2 = 123
In [122]: p3 = 12345
In [123]: print "** BaseHP  =  " + '{:10}'.format(str(p1)) + '*'
In [124]: print "** BaseHP  =  " + '{:10}'.format(str(p2)) + '*'
In [125]: print "** BaseHP  =  " + '{:10}'.format(str(p3)) + '*'
输出:

** BaseHP  =  1         *
** BaseHP  =  123       *
** BaseHP  =  12345     *
尽管变量的len发生变化,但整体对齐方式保持不变。

您可以使用padding和align选项来实现这一点

In [120]: p1 = 1
In [121]: p2 = 123
In [122]: p3 = 12345
In [123]: print "** BaseHP  =  " + '{:10}'.format(str(p1)) + '*'
In [124]: print "** BaseHP  =  " + '{:10}'.format(str(p2)) + '*'
In [125]: print "** BaseHP  =  " + '{:10}'.format(str(p3)) + '*'
输出:

** BaseHP  =  1         *
** BaseHP  =  123       *
** BaseHP  =  12345     *

尽管变量的长度发生了变化,但整体对齐方式保持不变。

为什么要使其如此复杂?只需使用指定宽度的标准字符串格式替换:

print ("⚜================== Player 1 City ==================⚜")
print ("⚜ %-7s = %-39d ⚜" % ("BaseHP", p1_basehp))
print ("⚜ %-7s = %-39d ⚜" % ("Troops", p1_troops))
etc.
或者,如果您要自己对齐标签:

print("⚜BaseHP  = %-39d ⚜" % p1_basehp)
etc.

为什么这么复杂?只需使用指定宽度的标准字符串格式替换:

print ("⚜================== Player 1 City ==================⚜")
print ("⚜ %-7s = %-39d ⚜" % ("BaseHP", p1_basehp))
print ("⚜ %-7s = %-39d ⚜" % ("Troops", p1_troops))
etc.
或者,如果您要自己对齐标签:

print("⚜BaseHP  = %-39d ⚜" % p1_basehp)
etc.

我已经编写了一个模块()来简化这些任务。您可以直接使用它(它也可以在*nix上工作)或查看实现(screen.py的第375行末尾将是相关的)。您可以直接使用它(它也可以在*nix上工作)或查看实现(screen.py的第375行结尾将是相关的)。谢谢您的回答!解决了我的问题。谢谢你的回答!解决了我的问题。您可以进一步缩短
打印”⚜ {:7} ={:10}⚜".格式化('BaseHP',str(p1))
您可以进一步缩短打印时间⚜ {:7} ={:10}⚜.format('BaseHP',str(p1))