Printing subscript and superscript in Python

Subscript and superscript are important when you are dealing with different types of formulas. They are useful in math, chemistry, etc.

In Python, there is a method called maketrans. It creates a one to one mapping table with characters and their replacements.

replace = str.maketrans("123", "ABC")

This method will replace 1 to A, 2 to B, and 3 to C. Let’s take a look.

numbers_to_letters = str.maketrans("123", "ABC")
print("Question 1, point 2 and 4".translate(numbers_to_letters))

In this case, numbers 1 and 2 are going to be replaced, but 4 doesn’t have a replacement, so it will stay 4.

Question A, point B and 4

Printing subscript

Similarly, you can convert numbers to subscript. Let’s use this formula for ethanol:

subscript = str.maketrans("0123456789", "₀₁₂₃₄₅₆₇₈₉")
print("C2H5OH".translate(subscript))

This code will replace all numbers to subscript, as it should be in the chemical formula.

C₂H₅OH

Printing superscript

You can also convert a number to superscript. In this case, we are going to use a formula to calculate the area of a circle.

πr²

In our example, the formula is written this way:

PIr2

We are going to convert 2 to superscript, and PI to π. We can’t convert PI with maketrans because the first two maketrans arguments should be the same length. In this case, let’s use the replace function.

superscript = str.maketrans("0123456789", "⁰¹²³⁴⁵⁶⁷⁸⁹")
print("PIr2".translate(superscript).replace('PI', 'π'))

The result is:

πr²

Unicode subscripts and superscripts

Another way to achieve the same result is to use the Unicode subscripts and superscripts.

For subscripts

U+207x

The letter “x” represents a subscript number.

For superscripts

U+208x

The letter “x” represents a superscript number.

This is the full table of Unicode characters:

 0123456789ABCDEF
U+00Bx             
U+207xx⁰xⁱ  x⁴x⁵x⁶x⁷x⁸x⁹x⁺x⁻x⁼x⁽x⁾xⁿ
U+208xx₀x₁x₂x₃x₄x₅x₆x₇x₈x₉x₊x₋x₌x₍x₎ 
U+209xxₐxₑxₒxₓxₔxₕxₖxₗxₘxₙxₚxₛxₜ   
Unicode characters

Let’s implement it into Python.

print(u'C\u2082H\u2085OH')

The result is the same as before:

C₂H₅OH

Now, let’s create the second formula:

print(u'\u03C0r\u00B2')

U+03C0 is a Unicode character for the greek letter PI and U+00B2 for square root. As you can see from the table, the power of 2 and 3 have different notation than numbers from 4 to 9.

The result:

πr²