簡體   English   中英

如何在 Python 中打印上標?

[英]How do you print superscript in Python?

我知道 python 中的 \xb function,但它似乎對我不起作用。 我知道我可能需要下載第三方模塊來完成此操作,如果是這樣,哪個最好?

我目前正在編寫一個二項式展開求解器,以嘗試使用我正在自學的技能。 當我嘗試顯示用戶輸入的擴展以供確認時出現問題。 目前我必須像這樣打印表達式:

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 "))

這將打印 (2x4)^5,而我更希望將索引打印為上標。 如何才能做到這一點?

您需要使用“格式”類型的東西。 使用{}\²".format(area))" and the {} becomes a ²`。 下面是一個例子:

print("The area of your rectangle is {}cm\u00b2".format(area))

代碼的末尾將打印cm² 您可以將末尾的大 2 更改為其他數字以獲得不同的結果。 我不知道如何做一個較低的下標。

在 Python 3.6+ 中(僅提及此示例是因為該示例使用了以前版本中不可用的 f 字符串)命名的 Unicode 字符提供了一種易於編寫、易於閱讀的方法來執行此操作。 這是一個列表。

例子:

f'\N{GREEK SMALL LETTER GAMMA}={density:.2f} t/m\N{SUPERSCRIPT THREE}'

產生類似

γ=1.20 t/m³

您可以使用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)))

輸出

     n
(a*b) 
     n
(a⋅b) 
$\left(a b\right)^{n}$
32768.0000000000

對於那些尋找實用(但有點不完美) 基於 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)
# ᵀʰᵉ ۹ᵘᶦᶜᵏ ᵇʳᵒʷⁿ ᶠᵒˣ ʲᵘᵐᵖˢ ᵒᵛᵉʳ ᵗʰᵉ ˡᵃᶻʸ ᵈᵒᵍ

作為獎勵,這里是對應的下標:

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ₙ բₒₓ ⱼᵤₘₚₛ ₒᵥₑᵣ ₜₕₑ ₗₐ₂ᵧ ᑯₒ₉'

同樣,不完美,但可行。

因為,我無緣無故地確定,Python 中沒有字符串理解這樣的東西,所以我能想到的最直接的解決方案就是加入通過 str() 和查找表運行您的數字獲得的字符列表。 我認為沒有理由不將上標的 unicode 字符串用作文字。 只需減去 '0' 值的偏移量,您就擁有了用於上標替換的字符串索引。

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

您正在使用input() ,所以我想這是基於控制台的。 為此,您有兩種選擇,如之前在此處討論的。 一種是使用一些格式化技巧來在實際擴展上方的行上顯示指數。 另一種是使用這些漂亮的字符,假設您的控制台支持 Unicode:

⁰¹²³⁴⁵⁶⁷⁸⁹

您可能必須將字體大小增加很多才能使其清晰易讀,但如果有適當的支持,這肯定是一個可行的選擇。 不過,除此之外,您提到這是個人學習經歷; 為什么不將它與另一個結合起來學習 Pygame 的簡單方面呢? 它非常簡單,文本操作和鍵盤事件再簡單不過了,而且分支永遠不會出錯。

Unicode 字符就是解決方案!


有一種非常簡單的方法可以使用 Unicode 字符打印上標和下標。 請執行下列操作:

  • 按 alt+f2
  • 輸入“字符圖”

這樣做時,您將獲得大量字符,包括下標、上標等。在窗口的左下角,您會看到類似“U-xxxx”的內容,其中 x 可以是任何字母數字字符(例如 1 ,2,A,B...)。

例如:

  • 如果你想打印一個字符串 x^2,你應該把字符串寫成:

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

這就是我在我的 tkinter 代碼片段中使用字符映射的方式,它沒有任何錯誤。

你可以使用這個:

def conv_to_super(n):
    super=list(map(chr,[8304,185,178,179,8308,8309,8310,8311,8312,8313]))
    st=""
    for i in str(n):
        st+=super[int(i)]
    return(st)

如果您不使用控制台文本而使用平鋪位圖怎么辦? 制作一組瓷磚。 然后在后端進行計算。 如果控制台文本很僵硬,請切換屏幕模式並使用您自己的字符集。 只是一個深夜的想法。

您的 Python 程序可能作為控制台應用程序運行,它只能輸出沒有格式的字符。 你的問題的簡單答案是“你做不到”。

當然,可以編寫 GUI 應用程序,將我們的輸出轉換為支持格式(RTF、HTML、TeX 等)的文檔格式,但這很可能超出了您正在處理的作業問題的范圍。

正如 MK 已經說過的,你不能在命令行上格式化輸出(除了一些顏色和粗體/閃爍取決於終端)。 但是,您可以以用戶可能理解的方式編寫它。 如果是學術界的,可以用latex風格的方式來表示上標,例如x^2

使用pow使某物變得強大

例如:

emi = (p * r * pow(1 + r, t)) / (pow(1 + r, t) - 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM