1. ホーム
  2. python

[解決済み] 条件付き文字列書式を実装するには?

2023-04-04 15:24:35

質問

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つの文字を削除すれば有効な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 を使いますが。

>>> 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."

ここで、formatの引数は dict で、好きなように複雑なものを組み込めます。