Try this approach using the newer str.format syntax. This uses a width of 12, space padded, right aligned.
line_new = '{:>12} {:>12} {:>12}'.format(words[0], words[1], words[2])
Example with the interpreter:
>>> line = "123 456 789"
>>> words = line.split(' ')
>>> line_new = '{:>12} {:>12} {:>12}'.format(words[0], words[1], words[2])
>>> print(line_new)
123 456 789
And here's how to do it using the old % syntax (useful for older versions of Python that don't support str.format):
line_new = '%12s %12s %12s' % (words[0], words[1], words[2])
Answer from Mark Byers on Stack OverflowTry this approach using the newer str.format syntax. This uses a width of 12, space padded, right aligned.
line_new = '{:>12} {:>12} {:>12}'.format(words[0], words[1], words[2])
Example with the interpreter:
>>> line = "123 456 789"
>>> words = line.split(' ')
>>> line_new = '{:>12} {:>12} {:>12}'.format(words[0], words[1], words[2])
>>> print(line_new)
123 456 789
And here's how to do it using the old % syntax (useful for older versions of Python that don't support str.format):
line_new = '%12s %12s %12s' % (words[0], words[1], words[2])
Here is another way how you can format using 'f-string' format:
print(
f"{'Trades:':<15}{cnt:>10}",
f"{'Wins:':<15}{wins:>10}",
f"{'Losses:':<15}{losses:>10}",
f"{'Breakeven:':<15}{evens:>10}",
f"{'Win/Loss Ratio:':<15}{win_r:>10}",
f"{'Mean Win:':<15}{mean_w:>10}",
f"{'Mean Loss:':<15}{mean_l:>10}",
f"{'Mean:':<15}{mean_trd:>10}",
f"{'Std Dev:':<15}{sd:>10}",
f"{'Max Loss:':<15}{max_l:>10}",
f"{'Max Win:':<15}{max_w:>10}",
f"{'Sharpe Ratio:':<15}{sharpe_r:>10}",
sep="\n"
)
This will provide the following output:
Trades: 2304
Wins: 1232
Losses: 1035
Breakeven: 37
Win/Loss Ratio: 1.19
Mean Win: 0.381
Mean Loss: -0.395
Mean: 0.026
Std Dev: 0.56
Max Loss: -3.406
Max Win: 4.09
Sharpe Ratio: 0.7395
What you are doing here is you are saying that the first column is 15 chars long and it's left-justified and the second column (values) is 10 chars long and it's right-justified.
If you joining items from the list and you want to format space between items you can use `` and regular formatting techniques.
This example separates each number by 3 spaces. The key here is f"{'':>3}"
print(f"{'':>3}".join(str(i) for i in range(1, 11)))
output:
1 2 3 4 5 6 7 8 9 10
How do I right-justify strings with dollar signs and percentages?
How to align text with formatting?
f-string alignment
Why doesn't my code align, when using escape characters?
I have an intro Python assignment that asks me to list out a series of numbers with two decimal places and align all the decimal points.
Someone please tell me how I can line these numbers up. Formatting doesn't seem to do literally anything at all.
This is a very basic question, I am in a beginner python course. I am trying to figure out how to align text in print results, but can not for the life of me figure out how to do it properly.
print('\tBoat Repair Program')
#Get input from user.
boatprice = float(input('\nWhat was the initial cost of the boat? $'))
hourfix = float(input('How many hours were spent fixing the boat? $'))
payrate = float(input('What is the hourly pay rate? $'))
partcost = float(input('What was the cost of repair parts for the boat? $'))
#Calculate total repair cost.
totalcost = (hourfix * payrate) + partcost
#Calculate the final value.
finalvalue = boatprice + totalcost
#Print results.
print(f'\nInitial purchase price: ${boatprice:,.2f}'),
print(f'The total cost of repairs: ${totalcost:,.2f}'),
print(f'The final value of boat: ${finalvalue:.2f}')
print('\nGoodbye')
I am trying to line up the results for the final 3 values. I am not sure if I should be using an f string, or alternatively "format(boatprice, '.2f')". I know the value and alignment should go between the colon and comma ${boatprice:HERE,.2f}'), I just cannot figure out how to put the values in so all three are in alignment. I've tried left, center, and right. I apologize for the basic question, I've just lost out on marks on three assignments already. Any help would be greatly appreciated!