ChatGPT解决这个技术问题 Extra ChatGPT

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

我一直在使用 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

p
phoenix

如果您删除两个字符,逗号和冒号,您的代码实际上是有效的 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,您可以根据自己喜欢的复杂程度构建。


s = "至少,{pronoun} 是这么告诉我的。".format(pronoun=["she","he"][gender == "male"])
可以在这里挤一个elif吗?例如格式(代词=“他”如果性别==“男性”代词=“她”elif 性别==“女性”否则“未找到”)
当我添加时,答案仅适用于一个 if else 语句 ("/{tech}".format(tech='w' if portfolio=='onshore' else 's' if portfolio=='solar'),我得到 invalidSyntax错误
@HVS 有可能,请参阅 this answer on stringing together else/if statements to simulate an inline elif。但你真的不应该,你应该定义一个函数。
B
Boris Verkhovskiy

在 Python 3.6+ 上,使用带有 conditional expressionf-stringif/else 语句的单行版本):

print(f'Shut the door{"s" if num_doors != 1 else ""}.')

You can't use backslashes 转义 f 字符串表达式部分中的引号,因此您必须混合使用双 " 和单 ' 引号。需要明确的是,您仍然可以在 f 字符串的外部使用反斜杠,因此 f'{2+2}\n' 很好。


很好,但是如果 's' 是一个变量呢?
@AhmedHussein 然后你传递变量 print(f"Shut the door{my_variable if num_doors > 1 else ''}.")
我必须自己解决这个问题 - 似乎当您将其设为条件值时,您必须使用 else 子句来定义默认值!
@大卫W。对,这称为 ternary operator(另请参阅 PEP 308),我不知道有任何语言可以让您省略任一结果。即使 if 为 False,您也必须评估左侧以确定默认应该是什么类型。
m
martineau

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]