Как реализовать условное форматирование строк? - PullRequest
57 голосов
/ 12 февраля 2012

Я работал над текстовой игрой на Python, и мне попался случай, когда я хочу по-разному форматировать строку в зависимости от набора условий.

В частности, я хочу отобразить текст, описывающий предметы в комнате.Я хочу, чтобы это отображалось в описании комнаты, если и только если рассматриваемый объект предмета находится в списке предметов предмета комнаты.Как это настроено, я чувствую, что простая конкатенация строк, основанных на условных выражениях, не будет выводиться так, как я хочу, и было бы лучше иметь разные строки для каждого случая.

У меня такой вопрос, есть ли какой-нибудь питонный метод для форматирования строк, основанный на булевом условном результате?Я мог бы использовать структуру цикла 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, но в целом показывает, что я ищу.Мне интересно, есть ли какое-либо допустимое выражение для форматирования логической строки, подобное приведенному выше.После небольшого поиска я не смог найти ничего, относящегося конкретно к условному форматированию строк.Я нашел несколько сообщений по форматным строкам в целом, но это не то, что я искал.

Если что-то подобное действительно существует, это было бы очень полезно.Я также открыт для любых альтернативных методов, которые могут быть предложены.Заранее благодарим за любую помощь, которую вы можете предоставить.

Ответы [ 3 ]

89 голосов
/ 12 февраля 2012

Ваш код на самом деле является допустимым 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."

, где аргумент для форматирования может быть dict, который вы строите в любой сложности, какой захотите.

11 голосов
/ 12 февраля 2012

В 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]
5 голосов
/ 12 декабря 2018

В Python 3.6+ используйте строковый литерал в формате (они выглядят как f"something") с оператором if:

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

Вы не можете использовать обратную косую черту , чтобы экранировать кавычки в f-строке, поэтому Вы должны смешать " и ' цитаты.

...