How do you print superscript in Python?


I am aware of the xb function in python, but it does not seem to work for me. I am aware that I may need to download a third party module to accomplish this, if so, which one would be best?

I am currently writing a binomial expansion solver, to try and use skills which I am teaching myself. The problem arises when I attempt to display the user input-ed expansion to the use for confirmation. Currently I am having to print the expression like so:

var1 = input("Enter a: ")
var2 = input("Enter b: ")
exponent = input("Enter n: ")

a = int(var1)
b = int(var2)
n = int(exponent)

expression = ('(%(1)dx%(2)d)^%(3)d') %
{'1' : a, '2' : b, '3' : n}


confirmation = input(str("Is this correctt? Y/N "))

This prints (2×4)^5, whereas I’d prefer the index to be printed as superscript. How can this be done?

Asked By: Kage93



Your Python program is probably running as a console application which can only output characters w/o formatting. The simple answer to your question is “you can’t do it”.

Of course it is possible to write a GUI application, our output to a document format which supports formatting (RTF, HTML, TeX, etc), but this is most likely beyond the scope of the homework problem you are working on.

Answered By: MK.

As MK already said, you cannot format output on the command line (besides some colors and bold/blinking depending on the terminal). However, you could write it in a way that is likely to be understood by your users. If they are from the academic sector, you could use the latex-style way to express superscripts, e.g. x^2

Answered By: ThiefMaster

You’re using input(), so I imagine this is console-based. To that end, you have two options, as previously discussed here. One is to use a bit of formatting trickery to display the exponents on the line above the actual expansion. The other is to use these nifty characters, assuming your console supports Unicode:


You’re probably going to have to increase the font size by quite a bit for them to be legible, but it’s certainly a viable option assuming proper support. Aside from that, though, you mentioned this is a personal learning experience; why not combine it with another and learn the simpler aspects of Pygame? It’s very straightforward, text manipulation and keyboard events couldn’t be simpler, and it’s never a wrong step to branch out.

Answered By: ranksrejoined

You could use sympy module that does necessary formatting for you. It supports many formats such as ascii, unicode, latex, mathml, etc:

from sympy import pretty_print as pp, latex
from import a, b, n

expr = (a*b)**n
pp(expr) # default
pp(expr, use_unicode=True)


$left(a bright)^{n}$
Answered By: jfs

You need to use a ‘format’ type thing. Use {}u00b2".format(area))" and the{}becomes a²`. Here is an example:

print("The area of your rectangle is {}cmu00b2".format(area))

The end of the code will print cm². You can change the large 2 at the end to other numbers for a different result.
I do not know how to do a lower subscript though.

Answered By: James

In Python 3.6+ (mentioned only because the example uses f-strings that are not available in previous versions) named Unicode characters provide an easy to write, easy to read way to do this. Here is a list.



yields something like

γ=1.20 t/m³
Answered By: jake77

Unicode character is the solution!

There is a very easy way to print superscripts and subscripts using Unicode characters. Do the following:

  • Press alt+f2
  • Type “charmap”

On doing so, you’ll get tons of characters including subscripts, superscripts, etc. On the bottom left end of the window, you’d see something like ‘U-xxxx’ where x can be any alpha-numeric character(e.g 1,2,A,B..).

For example:

  • If you want to print a string x^2, you should write the string as:

    ‘xu00b2’, where u00b2 is ‘U+00B2’ shown in the Character Map.

This is how I used Character Map in my tkinter code snippet and it worked without any errors.

Answered By: TheSHETTY-Paradise

For those looking for a practical (but a bit imperfect) UTF-8-based solution, implemented using a simple character translation table:

import string

superscript_map = {
    "0": "⁰", "1": "¹", "2": "²", "3": "³", "4": "⁴", "5": "⁵", "6": "⁶",
    "7": "⁷", "8": "⁸", "9": "⁹", "a": "ᵃ", "b": "ᵇ", "c": "ᶜ", "d": "ᵈ",
    "e": "ᵉ", "f": "ᶠ", "g": "ᵍ", "h": "ʰ", "i": "ᶦ", "j": "ʲ", "k": "ᵏ",
    "l": "ˡ", "m": "ᵐ", "n": "ⁿ", "o": "ᵒ", "p": "ᵖ", "q": "۹", "r": "ʳ",
    "s": "ˢ", "t": "ᵗ", "u": "ᵘ", "v": "ᵛ", "w": "ʷ", "x": "ˣ", "y": "ʸ",
    "z": "ᶻ", "A": "ᴬ", "B": "ᴮ", "C": "ᶜ", "D": "ᴰ", "E": "ᴱ", "F": "ᶠ",
    "G": "ᴳ", "H": "ᴴ", "I": "ᴵ", "J": "ᴶ", "K": "ᴷ", "L": "ᴸ", "M": "ᴹ",
    "N": "ᴺ", "O": "ᴼ", "P": "ᴾ", "Q": "Q", "R": "ᴿ", "S": "ˢ", "T": "ᵀ",
    "U": "ᵁ", "V": "ⱽ", "W": "ᵂ", "X": "ˣ", "Y": "ʸ", "Z": "ᶻ", "+": "⁺",
    "-": "⁻", "=": "⁼", "(": "⁽", ")": "⁾"}

trans = str.maketrans(

'The quick brown fox jumps over the lazy dog'.translate(trans)
# ᵀʰᵉ ۹ᵘᶦᶜᵏ ᵇʳᵒʷⁿ ᶠᵒˣ ʲᵘᵐᵖˢ ᵒᵛᵉʳ ᵗʰᵉ ˡᵃᶻʸ ᵈᵒᵍ

As a bonus, here is the subscript counterpart:

subscript_map = {
    "0": "₀", "1": "₁", "2": "₂", "3": "₃", "4": "₄", "5": "₅", "6": "₆",
    "7": "₇", "8": "₈", "9": "₉", "a": "ₐ", "b": "♭", "c": "꜀", "d": "ᑯ",
    "e": "ₑ", "f": "բ", "g": "₉", "h": "ₕ", "i": "ᵢ", "j": "ⱼ", "k": "ₖ",
    "l": "ₗ", "m": "ₘ", "n": "ₙ", "o": "ₒ", "p": "ₚ", "q": "૧", "r": "ᵣ",
    "s": "ₛ", "t": "ₜ", "u": "ᵤ", "v": "ᵥ", "w": "w", "x": "ₓ", "y": "ᵧ",
    "z": "₂", "A": "ₐ", "B": "₈", "C": "C", "D": "D", "E": "ₑ", "F": "բ",
    "G": "G", "H": "ₕ", "I": "ᵢ", "J": "ⱼ", "K": "ₖ", "L": "ₗ", "M": "ₘ",
    "N": "ₙ", "O": "ₒ", "P": "ₚ", "Q": "Q", "R": "ᵣ", "S": "ₛ", "T": "ₜ",
    "U": "ᵤ", "V": "ᵥ", "W": "w", "X": "ₓ", "Y": "ᵧ", "Z": "Z", "+": "₊",
    "-": "₋", "=": "₌", "(": "₍", ")": "₎"}

sub_trans = str.maketrans(

'The quick brown fox jumps over the lazy dog'.translate(sub_trans)
# 'ₜₕₑ ૧ᵤᵢ꜀ₖ ♭ᵣₒwₙ բₒₓ ⱼᵤₘₚₛ ₒᵥₑᵣ ₜₕₑ ₗₐ₂ᵧ ᑯₒ₉'

Again, not perfect, but workable.

Answered By: norok2

Use pow to make power of something

For example:

emi = (p * r * pow(1 + r, t)) / (pow(1 + r, t) - 1)
Answered By: Piyush Verma

You can use this:

def conv_to_super(n):
    for i in str(n):

Answered By: Supriyo Halder

Since, for no reason I can determine, there is no such thing as a string comprehension in Python, the most straightforward solution I can think of is just joining a list of chars obtained by running your number through str() and a lookup table. I see no reason not to just use the unicode string of superscripts as a literal. Just subtract the offset of the value of ‘0’ and you have index into the string for your superscript replacement.

def superscript(n):
    return "".join(["⁰¹²³⁴⁵⁶⁷⁸⁹"[ord(c)-ord('0')] for c in str(n)]) 
Answered By: Greg Conner

You can, instead of using console text, use tile bitmaps. Make an array of tiles. Then do the computations on the back end. If console text is rigid, switch screen modes and use your own character set. Just a late night thought.

Answered By: Damon

This will convert superscripts of any size to unicode characters:
(p is supposed to be an int)

    def superscript(p):
        superscripts = ["⁰", "¹", "²", "³", "⁴", "⁵", "⁶", "⁷", "⁸", "⁹"]
        return ''.join([superscripts[int(char)] for char in str(p)])
Answered By: Jakub Orsula
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.