Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Printing subscript in python

Tags:

In Python 3.3, is there any way to make a part of text in a string subscript when printed?

e.g. H₂ (H and then a subscript 2)

like image 361
samrobbins Avatar asked Jun 24 '14 16:06

samrobbins


2 Answers

If all you care about are digits, you can use the str.maketrans() and str.translate() methods:

example_string = "A0B1C2D3E4F5G6H7I8J9"

SUB = str.maketrans("0123456789", "₀₁₂₃₄₅₆₇₈₉")
SUP = str.maketrans("0123456789", "⁰¹²³⁴⁵⁶⁷⁸⁹")

print(example_string.translate(SUP))
print(example_string.translate(SUB))

Which will output:

A⁰B¹C²D³E⁴F⁵G⁶H⁷I⁸J⁹
A₀B₁C₂D₃E₄F₅G₆H₇I₈J₉

Note that this won't work in Python 2 - see Python 2 maketrans() function doesn't work with Unicode for an explanation of why that's the case, and how to work around it.

like image 71
Zero Piraeus Avatar answered Sep 17 '22 15:09

Zero Piraeus


The output performed on the console is simple text. If the terminal supports unicode (most do nowadays) you can use unicode's subscripts. (e.g H₂) Namely the subscripts are in the ranges:

  • 0x208N for numbers, +, -, =, (, ) (N goes from 0 to F)
  • 0x209N for letters

For example:

In [6]: print(u'H\u2082O\u2082')
H₂O₂

For more complex output you must use a markup language (e.g. HTML) or a typesetting language (e.g. LaTeX).

like image 36
Bakuriu Avatar answered Sep 17 '22 15:09

Bakuriu