Python 如何实现条件字符串格式?

Python 如何实现条件字符串格式?,python,string-formatting,Python,String Formatting,我一直在用Python开发一个基于文本的游戏,我遇到了一个实例,我想根据一组条件对字符串进行不同的格式化 具体来说,我希望显示描述房间中项目的文本。我希望在房间的描述中显示此信息,前提是且仅当相关项目对象位于房间对象的项目列表中。在设置的方式上,我觉得简单地基于条件串接字符串不会像我所希望的那样输出,最好为每种情况使用不同的字符串 我的问题是,是否有任何pythonic方法可以根据布尔条件的结果格式化字符串?我可以使用for循环结构,但我想知道是否有更简单的方法,类似于生成器表达式 我正在寻找类

我一直在用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,但它总体上显示了我所寻找的内容。我想知道是否有类似于上面的布尔字符串格式的有效表达式。 在搜索了一段时间后,我找不到任何与条件字符串格式有关的内容。我确实发现了一些关于格式字符串的帖子,但这不是我想要的

如果确实存在这样的情况,那将非常有用。我也愿意接受任何可能建议的替代方法。提前感谢您提供的任何帮助。

如果删除逗号和冒号这两个字符,您的代码实际上是有效的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.
不过,更现代的风格是:


格式的参数可以是一个dict,你可以用你喜欢的复杂度来构建。

Python中有一个条件表达式,它的形式是

A if condition else B
您的示例可以通过省略两个字符轻松转换为有效的Python:

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]
在Python3.6+上,使用一个带有
if
语句的
if语句(称为f-strings:
f“{2+2}”
生成
“4”
):

print(f"Shut the door{'s' if abs(num_doors) != 1 else ''}.")
要在f字符串的表达式部分转义引号
你必须混合使用双引号(
“”和单引号()。(你仍然可以在f字符串的外部使用反斜杠,例如,
f'{2}\n'
就可以了)

如果你去掉逗号和分号,它就会变成有效的pythons=“至少,{代词}告诉我的那样。”.format(代词=[“她”,“他”][性别=“男性”])有可能在这里压缩一个elif吗?例如,format(代词=“he”if gender==“male”代词=“she”elif gender==“femal”else“notfound”)当我添加(“/{tech}”)时,答案只适用于一个if else语句,我得缴纳残疾综合税Error@HVS这是可能的,看。但是你真的不应该,你应该定义一个函数。很好,但是如果
's'
是一个变量呢?@AhmedHussein然后你传递变量
打印(f“关上门{my_variable if num_doors>1 else'>)
我必须自己解决这个问题-似乎在将其作为条件值时,必须使用else子句来定义默认值!@DavidW。对,这称为(另请参见)我不知道有哪种语言可以让你忽略任何一个结果。你必须计算左侧,即使
if
为False,以确定默认值应该是什么类型。
print(f"Shut the door{'s' if abs(num_doors) != 1 else ''}.")