Comment puis-je utiliser une chaîne f avec logique pour formater un int
en float
? J'aimerais que ppl
soit True
pour formater num
à 2 décimales, et si ppl
est False
pour le reformater comme quoi que ce soit c'est.
Quelque chose comme string = f'i am {num:.2f if ppl else num}'
mais cela ne fonctionne pas. Le code ci-dessous montre le comportement que je veux obtenir avec une f-string plus simple si possible:
ppl = True
num = 3
string = f'I am {num:.2f}' if ppl else f'I am {num}'
print(string)
#if ppl False
#=> i am 3
#if ppl True
#=> i am 3.00
Vous pouvez imbriquer des expressions pour évaluer des expressions internes dans une f-chaîne. Cela signifie que vous pouvez déplacer le ternaire à l'intérieur de votre f-string:
string = f'I am {num:{".2f" if ppl else ""}}'
Notez la paire supplémentaire de croisillons nécessaires pour l'imbrication.
Mais je ne pense pas que ce soit plus propre. Personnellement, j'ai du mal à analyser ce qui se passe ici, contrairement à votre version originale claire. Après tout, simple vaut mieux que complexe; plat est mieux que niché.
Je vous recommande de séparer la fstring en deux lignes
num_str = f'{num:.2f}' if ppl else f'{num}'
str = f'I am {num_str}'
De cette façon, chaque ligne est aussi simple que possible.