问题
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 a noob with Python, and with StackOverflow hence my basic question. Now a bit about the context...
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? I will provide any (missing) information if needed.
回答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
回答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.
回答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³
回答4:
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.
回答5:
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.
回答6:
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:
'x\u00b2', 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.
回答7:
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.
回答8:
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
来源:https://stackoverflow.com/questions/8651361/how-do-you-print-superscript-in-python