Как реализовать условное форматирование строки?
Я работаю над текстовой игрой на Python, и я столкнулся с экземпляром, где я хочу отформатировать строку по-разному на основе набора условий.
В частности, я хочу отображать текст, описывающий элементы в комнате. Я хочу, чтобы это отображалось в описании комнаты, если и только если рассматриваемый предмет объекта находится в списке предметов объекта комнаты. Как он настроен, я чувствую, что просто конкатенация строк на основе условных выражений не будет выводиться так, как я хочу, и было бы лучше иметь другую строку для каждого случая.
Мой вопрос в том, есть ли какой-нибудь pythonic метод форматирования строк на основе результата булева условного выражения? Я мог бы использовать структуру for loop, но мне было интересно, было ли что-то проще, подобно выражению генератора.
Я ищу что-то подобное этому в строковой форме
num = [x for x in xrange(1,100) if x % 10 == 0]
Как общий пример того, что я имею в виду:
print "At least, that what %s told me." %("he" if gender == "male", else: "she")
Я понимаю, что этот пример недействителен Python, но он показывает, в общем, то, что я ищу. Мне интересно, существует ли какое-либо допустимое выражение для форматирования булевых строк, похожее на приведенное выше.
После небольшого поиска я не смог найти ничего, относящееся к условному форматированию строк. Я нашел несколько сообщений в строках формата в целом, но это не то, что я ищу.
Если что-то подобное действительно существует, это было бы очень полезно. Я также открыт для любых альтернативных методов, которые могут быть предложены. Заранее благодарим за любую помощь, которую вы можете предоставить.
Ответы
Ответ 1
Фактически ваш код действителен Python, если вы удалите два символа, запятую и двоеточие.
>>> gender= "male"
>>> print "At least, that what %s told me." %("he" if gender == "male" else "she")
At least, that what he told me.
Более современный стиль использует .format
, хотя:
>>> s = "At least, that what {pronoun} told me.".format(pronoun="he" if gender == "male" else "she")
>>> s
"At least, that what he told me."
где аргумент в формате может быть dict
, который вы создаете в любой сложности.
Ответ 2
В Python есть условное выражение, которое принимает форму
A if condition else B
Ваш пример можно легко превратить в действительный Python, опуская только два символа:
print ("At least, that what %s told me." %
("he" if gender == "male" else "she"))
Альтернативой, которую я часто предпочитаю, является использование словаря:
pronouns = {"female": "she", "male": "he"}
print "At least, that what %s told me." % pronouns[gender]
Ответ 3
В Python 3. 6+ используйте форматированный строковый литерал formatted string literal (они называются f-strings: f"{2+2}"
создает "4"
) с оператором if
:
print(f"Shut the door{'s' if num_doors > 1 else ''}.")
Вы не можете использовать обратную косую черту для экранирования кавычек в части выражения f-строки, поэтому
Вы должны смешивать двойные кавычки "
и одинарные '
. (Вы все еще можете использовать обратную косую черту во внешней части строки f, например, f'{2}\n'
хорошо)