Using f-string with format depending on a condition

PythonPython 3.xF String

Python Problem Overview


How can I use f-string with logic to format an int as a float? I would like if ppl is True to format num to 2 decimal places, and if ppl is False to rformat it as whatever it is.

Something like string = f'i am {num:.2f if ppl else num}' but this does not work. The below code demonstrates the behaviour that I want to achieve with a simpler f-string if 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

Python Solutions


Solution 1 - Python

You can nest expressions to evaluate inside expressions in an f-string. This means you can move the ternary right inside your f-string:

string = f'I am {num:{".2f" if ppl else ""}}'

Note the additional pair of braces needed for nesting.

But I don't think this is cleaner. Personally I find it harder to parse what's going on here, as opposed to your clear original version. After all simple is better than complex; flat is better than nested.

Solution 2 - Python

I would recommend that you actually separate the fstring into two lines

num_str = f'{num:.2f}' if ppl else f'{num}'
str = f'I am {num_str}'

That way each line is as simple as it can be.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionjacobcan118View Question on Stackoverflow
Solution 1 - PythonAndras Deak -- Слава УкраїніView Answer on Stackoverflow
Solution 2 - PythonGamrixView Answer on Stackoverflow