我一直在使用 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.
不过,更现代的风格使用 .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
,您可以根据自己喜欢的复杂程度构建。
在 Python 3.6+ 上,使用带有 conditional expression 的 f-string(if
/else
语句的单行版本):
print(f'Shut the door{"s" if num_doors != 1 else ""}.')
You can't use backslashes 转义 f 字符串表达式部分中的引号,因此您必须混合使用双 "
和单 '
引号。需要明确的是,您仍然可以在 f 字符串的外部使用反斜杠,因此 f'{2+2}\n'
很好。
's'
是一个变量呢?
print(f"Shut the door{my_variable if num_doors > 1 else ''}.")
Python 中有一个 conditional expression,它采用以下形式:
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]
else
/if
statements to simulate an inlineelif
。但你真的不应该,你应该定义一个函数。