2012-02-11 10 views
39

私はPythonでテキストベースのゲームを開発していましたが、一連の条件に基づいて文字列の書式を変更したい場合があります。Pythonの条件付き文字列の書式設定

具体的には、アイテムを説明するテキストを部屋に表示します。問題のアイテムオブジェクトがルームオブジェクトのアイテムリストにある場合に限り、ルームの説明にこれを表示します。設定されている方法では、条件に基づいて文字列を連結するだけでは私が望むように出力されず、それぞれの文字列が異なる場合があります。

私の質問は、ブール条件の結果に基づいて文字列をフォーマットするためのpythonicメソッドはありますか?私はforループ構造を使うことができましたが、ジェネレータ表現に似た、もっと簡単なものがあるのか​​どうか疑問に思っていました。

私は私が何を意味するかの一般的な例として、文字列形式

num = [x for x in xrange(1,100) if x % 10 == 0] 

で、これに似たものを探しています:

print "At least, that's what %s told me." %("he" if gender == "male", else: "she") 

が、私はこの例では、有効なPythonではないことを認識し、しかし、それは一般的に、私が探しているものを示しています。ブーリアン文字列の書式設定に有効な式があるかどうかは、上記と同様です。 少しでも検索したところ、条件付き文字列の書式設定に特に関連するものは見つかりませんでした。私は一般的に書式文字列に関するいくつかの投稿を見つけましたが、それは私が探しているものではありません。

本当にそういうものが存在すれば、非常に便利です。私はまた、提案されるかもしれない他の方法にも開いています。あなたが提供できる任意のヘルプに事前に感謝します。

+2

カンマとセミコロンを削除すると有効なpythoになりますn – yurib

+0

非コード解法: 'それら'を使用する(あなたが求めているのではなく、この質問はかなり古いと知っています) – poxip

+0

@poxip、代名詞が複数の人物を参照していない限り文法上正しいわけではありません。それを言って、私はいくつかのスタイルのガイドが行って、この想像もできない構造をすでに承認したと信じていますが、私はそれがゴミだと思っています。 – Bobort

答えて

68

実際にコードです。カンマとコロンの2文字を削除すると、有効なPythonになります。

>>> gender= "male" 
>>> print "At least, that's what %s told me." %("he" if gender == "male" else "she") 
At least, that's what he told me. 

もっと現代的なスタイルは、しかし、.format使用しています:フォーマットへの引数は、あなたが好きな複雑に構築dictすることができ

>>> s = "At least, that's what {pronoun} told me.".format(pronoun="he" if gender == "male" else "she") 
>>> s 
"At least, that's what he told me." 

+1

ありがとうございます。私はそのような設定があると思ったが、私は適切な検索条件を使用しなかったと思う。それが可能であることを知り、私が思っていたよりもPythonのスタイルについてもっと知っていたことを知っておいてください。 –

+5

@NiklasR: 'str.format()'は2.7ではなくPython 2.6で導入されました。 –

+2

@SvenMarnachああ、申し訳ありませんが、あなたは正しいです。 –

7

形式をとるPythonでの条件式があり

あなたの例では、簡単にちょうど2文字省略することにより、有効なPythonに変換することができ
A if condition else B 

print ("At least, that's what %s told me." % 
     ("he" if gender == "male" else "she")) 

私は頻繁にしたい代替を

pronouns = {"female": "she", "male": "he"} 
print "At least, that's what %s told me." % pronouns[gender]