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))