你如何在Python中打印上标?

Kag*_*e93 9 python math superscript

我知道python中的\ xb函数,但它似乎对我不起作用.我知道我可能需要下载第三方模块来实现这一目标,如果是这样,哪一个最好?我是Python的菜鸟,因此StackOverflow是我的基本问题.现在有点关于上下文......

我目前正在编写一个二项式扩展求解器,尝试使用我自学的技能.当我尝试将用户输入扩展显示为用于确认时,会出现问题.目前我不得不像这样打印表达式:

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 "))
Run Code Online (Sandbox Code Playgroud)

这打印(2x4)^ 5,而我更喜欢将索引打印为上标.如何才能做到这一点?如果需要,我会提供任何(缺失的)信息.

小智 13

你需要使用'格式'类型的东西.使用{}\u00b2".format(area))" and the{} becomes a²`.这是一个例子:

print("The area of your rectangle is {}cm\u00b2".format(area))
Run Code Online (Sandbox Code Playgroud)

代码的结尾将打印出来cm².您可以将最后的大2更改为其他数字以获得不同的结果.我不知道怎么做较低的下标.

  • > _您可以将末尾的大 2 更改为其他数字以获得不同的结果。_这是不正确的。`\u00b3` 返回 `³`,`\u00b4` 返回 `´`,`\u00b5` 返回 `μ`。 (5认同)

nor*_*ok2 12

对于那些寻找实用(但有点不完美)基于 UTF-8 的解决方案的人,使用简单的字符转换表实现:

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)
# ??? ????? ????? ??? ????? ???? ??? ???? ???
Run Code Online (Sandbox Code Playgroud)

作为奖励,这里是对应的下标:

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? ??? ????? ???? ??? ???? ???'
Run Code Online (Sandbox Code Playgroud)

同样,不完美,但可行。


jfs*_*jfs 9

您可以使用sympy为您执行必要格式化的模块.它支持许多格式,如ascii,unicode,latex,mathml等:

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)))
Run Code Online (Sandbox Code Playgroud)

产量

     n
(a*b) 
     n
(a?b) 
$\left(a b\right)^{n}$
32768.0000000000
Run Code Online (Sandbox Code Playgroud)


小智 8

由于我无法确定,Python 中不存在字符串理解之类的东西,因此我能想到的最直接的解决方案就是加入通过 str() 运行数字而获得的字符列表和查找表。我认为没有理由不只使用上标的 unicode 字符串作为文字。只需减去“0”值的偏移量,您就可以在字符串中找到上标替换的索引。

\n
def superscript(n):\n    return "".join(["\xe2\x81\xb0\xc2\xb9\xc2\xb2\xc2\xb3\xe2\x81\xb4\xe2\x81\xb5\xe2\x81\xb6\xe2\x81\xb7\xe2\x81\xb8\xe2\x81\xb9"[ord(c)-ord('0')] for c in str(n)]) \n
Run Code Online (Sandbox Code Playgroud)\n


jak*_*e77 7

在Python 3.6+中(仅因为示例使用了先前版本中没有的f字符串而提及),命名为Unicode字符提供了一种易于编写,易于阅读的方式来执行此操作。这是清单。

例:

f'\N{GREEK SMALL LETTER GAMMA}={density:.2f} t/m\N{SUPERSCRIPT THREE}'
Run Code Online (Sandbox Code Playgroud)

产生类似

?=1.20 t/m³
Run Code Online (Sandbox Code Playgroud)

  • 这实际上从 [Python 3.3](https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals) 开始起作用。 (2认同)
  • 不,它没有:[自 3.6 起](https://docs.python.org/3/whatsnew/3.6.html) (2认同)
  • 不是f字符串,而是\ N {name}转义序列。 (2认同)

The*_*ise 6

Unicode 字符就是解决方案!

\n
\n

有一种非常简单的方法可以使用 Unicode 字符打印上标和下标。请执行下列操作:

\n
    \n
  • Alt+F2
  • \n
  • 输入“字符映射”
  • \n
\n

这样做时,您将获得大量字符,包括下标、上标等。在窗口的左下角,您会看到类似“U-xxxx”的内容,其中 x 可以是任何字母数字字符(例如 1 ,2,A,B..)。

\n

例如:

\n
    \n
  • 如果你想打印像这样的字符串x\xc2\xb2,你应该将字符串写成:

    \n

    'x\\u00b2',其中 u00b2 是字符映射表中显示的 'U+00B2'。

    \n
  • \n
\n

这就是我在 tkinter 代码片段中使用字符映射表的方式,它工作时没有任何错误。

\n