2016-11-24 8 views
0

私はゲームプロジェクトをコーディングしています。コード内でいくつかの小さなバグや機能を完成させるためにコードを実行しています。私はテキストシンボルで構成されたグラフィカルボックスでユーザーの統計情報を印刷しようとすると問題があります。 は、ここでは、コードのコードが、それはこのようになりますゲーム内で実行される印刷された変数が文字の位置を変更します

print ("⚜================== Player 1 City ==================⚜") 
print ("⚜BaseHP = " + str (p1_basehp)) 
print ("⚜Troops = " + str (p1_troops)) 
print ("⚜Archers = " + str (p1_archers)) 
print ("⚜Food = " + str (p1_food)) 
print ("⚜===================================================⚜") 

です。

⚜================== 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_troops、p1_archers、p1_foodであっても、同じ場所にキャラクターを保つことができます。 コードにエラーはなく、単なるクエリです。

+0

私はモジュール(HTTPSを書きました。 org/pypi/dosbox-screen /)を使用すると、このような作業が簡単になります。あなたはそれを直接使うことができます(* nixでも動作します)。または実装を見てください(screen.pyの375行目が関連します)。 – thebjorn

答えて

1

なぜ複雑になるのですか?

print ("⚜================== Player 1 City ==================⚜") 
print ("⚜ %-7s = %-39d ⚜" % ("BaseHP", p1_basehp)) 
print ("⚜ %-7s = %-39d ⚜" % ("Troops", p1_troops)) 
etc. 

をそれとも、ラベルを自分で揃えるうとします:ちょうど指定された幅と標準の文字列フォーマットの置換を使用し//pypi.python:

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

これは少ないコードでうまくいくようです。 – Sam

0

だから、=の違いは、その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 ("⚜===================================================⚜") 
1

あなたは、各統計行(12文字)の最初の部分の長さを固定しているし、あなたのヘッダが53個の文字を取り、あなたはあなたの価値がちょうど一桁を持っている場合は終了文字前に39個の空白を配置する必要がありますので、 2桁の場合38、...など。 I、E:' '*(40 - len(str(p1_<whatever>)))

# -*- coding: utf-8 -*- 

from random import randint 

p1_archers = randint(1, 1000) 
p1_basehp = randint(1, 1000) 
p1_food = randint(1, 1000) 
p1_troops = randint(1, 1000) 

print ("⚜================== Player 1 City ==================⚜") 
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 ("⚜===================================================⚜") 

注:

⚜===================================================⚜ 
[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          ⚜ 
⚜===================================================⚜ 
+0

答えをありがとう!私の問題を解決しました。 – Sam

3

あなたはパディングと整列オプションでこれを行うためにPyFormatを使用することができます。私は、さまざまなシナリオでの証拠の適切な機能にrandomライブラリを利用します。

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)) + '*' 

はOUTPUT:変数のlenが変わる

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

ものの、全体的なアライメントが同じまま。

+1

あなたはさらに多くの 'print 'を短縮することができます。⚜{:7} = {:10}⚜" .format(' BaseHP '、str(p1)) ' – valentin

関連する問題