How do you print superscript in Python?
Solution 1
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 sympy.abc import a, b, n
expr = (a*b)**n
pp(expr) # default
pp(expr, use_unicode=True)
print(latex(expr))
print(expr.evalf(subs=dict(a=2,b=4,n=5)))
Output
n
(a*b)
n
(a⋅b)
$\left(a b\right)^{n}$
32768.0000000000
Solution 2
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 {}cm\u00b2".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.
Solution 3
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.
Example:
f'\N{GREEK SMALL LETTER GAMMA}={density:.2f} t/m\N{SUPERSCRIPT THREE}'
yields something like
γ=1.20 t/m³
Solution 4
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(
''.join(superscript_map.keys()),
''.join(superscript_map.values()))
'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(
''.join(subscript_map.keys()),
''.join(subscript_map.values()))
'The quick brown fox jumps over the lazy dog'.translate(sub_trans)
# 'ₜₕₑ ૧ᵤᵢ꜀ₖ ♭ᵣₒwₙ բₒₓ ⱼᵤₘₚₛ ₒᵥₑᵣ ₜₕₑ ₗₐ₂ᵧ ᑯₒ₉'
Again, not perfect, but workable.
Solution 5
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.
Kage93
Updated on November 19, 2021Comments
-
Kage93 over 2 years
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} print(expression) confirmation = input(str("Is this correctt? Y/N "))
This prints (2x4)^5, whereas I'd prefer the index to be printed as superscript. How can this be done?
-
Kage93 over 12 yearsThanks for the reply, but no, I intend to write the barebones of the program without a GUI then once I am satisfied that everything works, I will create a GUI for it. I plan on using tkinter for my GUI, would it be possible using tkinter then? If not, which module would be suitable?
-
skrx about 6 yearsThis actually works since Python 3.3.
-
jake77 about 6 yearsNo, it doesn't: since 3.6
-
skrx about 6 yearsNot the f-strings, the \N{name} escape sequence.
-
Jongware over 5 yearsThis must be for some single platform only. Windows? If it is: you can only find those characters in fonts that support them (and I'd then advise using Arial MS Unicode). But since OP wants to create a console based program, those same characters must also be available in the console font.
-
TheSHETTY-Paradise over 5 yearsI use Ubuntu 18.04 and it works here, I'm unaware of windows
-
Eduardo Pignatelli about 4 years> You can change the large 2 at the end to other numbers for a different result. This is not true. While
\u00b3
returns³
,\u00b4
returns´
,\u00b5
returnsµ
. -
Daniel almost 4 yearsThe number superscripts are written at different heights. For example 0 is higher than 1 (at least when using ipycanvas)
-
norok2 almost 4 years@Daniel The numbers are actually supported by UTF-8. So, if there is a rendering issue, it is likely to be with the fonts. Perhaps you could try different fonts.
-
norok2 almost 4 yearsI see them in line here in the normal text: ⁰¹²³⁴⁵⁶⁷⁸⁹ but not in the code:
⁰¹²³⁴⁵⁶⁷⁸⁹
where123
seems slightly larger than the others. -
Zanoldor almost 4 yearsLovely. Thanks @norck2
-
Daniel over 3 years@norok2, strangely, I don't see the normal text symbols you posted in line (1, 2 and 3 are a bit lower). Probably a font issue as you said.
-
frakman1 over 3 yearsHow do I make both subscript and superscript text appear in the same spot? i.e. one character directly above the other.
-
norok2 over 3 years@frakman1 UTF-8 was not really designed for this. While some fonts may support this via OpenType using the unicode private area, you should really look into another option. See also en.wikipedia.org/wiki/Subscript_and_superscript
-
frakman1 over 3 years@norok2. Thanks. I just thought this would be a common use-case for scientific formulas and chemistry elements
-
Tomerikoo almost 3 yearsThis seems like a good way but is there a way to use variables with this? i.e. if I have
power = 5
how can I make it printγ=5.00 t/m⁵
? -
Admin over 2 yearsAs it’s currently written, your answer is unclear. Please edit to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center.
-
Yunnosch over 2 yearsI recommend against rhetoric questions in answers. They risk being misunderstood as not an answer at all. You are trying to answer the question at the top of this page, aren't you? Otherwise please delete this post.