¿Cómo implementar el formato de cadena condicional?

He estado trabajando en un juego basado en texto en Python, y me he encontrado con una instancia en la que quiero formatear una cadena de manera diferente según un conjunto de condiciones.

Específicamente, quiero mostrar el texto que describe los elementos en una habitación. Quiero que esto se muestre, en la descripción de la sala, solo si el objeto objeto en cuestión está en la lista de elementos del objeto sala. La forma en que está configurado, siento que simplemente concatenar cadenas basadas en condicionales no se producirá como deseo, y sería mejor tener una cadena diferente para cada caso.

Mi pregunta es, ¿existe algún método pythonic para formatear cadenas basadas en el resultado de un condicional booleano? Podría usar una estructura de bucle for, pero me preguntaba si habría algo más fácil, similar a una expresión de generador.

Estoy buscando algo similar a esto, en forma de cadena

num = [x for x in xrange(1,100) if x % 10 == 0] 

Como ejemplo general de lo que quiero decir:

 print "At least, that's what %s told me." %("he" if gender == "male", else: "she") 

Me doy cuenta de que este ejemplo no es válido para Python, pero muestra, en general, lo que estoy buscando. Me pregunto si hay alguna expresión válida para el formato de cadena booleana, similar a la anterior. Después de buscar un poco, no pude encontrar nada relacionado específicamente con el formato de cadena condicional. Encontré varias publicaciones sobre cadenas de formato en general, pero eso no es lo que estoy buscando.

Si algo así existe, sería muy útil. También estoy abierto a cualquier método alternativo que pueda ser sugerido. Gracias de antemano por cualquier ayuda que pueda proporcionar.

Su código en realidad es válido para Python si elimina dos caracteres, la coma y los dos puntos.

 >>> 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. 

El estilo más moderno usa .format , sin embargo:

 >>> 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." 

donde el argumento de formato puede ser un dict que construyas en la complejidad que desees.

Hay una expresión condicional en Python que toma la forma

 A if condition else B 

Tu ejemplo se puede convertir fácilmente en Python válido al omitir solo dos caracteres:

 print ("At least, that's what %s told me." % ("he" if gender == "male" else "she")) 

Una alternativa que a menudo prefiero es usar un diccionario:

 pronouns = {"female": "she", "male": "he"} print "At least, that's what %s told me." % pronouns[gender] 

Use un literal de cadena formateada (se ven como f"something" ) con una sentencia if

 print(f"Please close the window{'s' if num_windows > 1 else ''}.") 

Tuve que mezclar " y ' comillas porque no puedes usar barras invertidas para escapar de comillas en una f-string.

Esto funciona en Python 3.6 y versiones posteriores.