Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus

Ich habe es geschrieben, weil ich es vertikal mit der gleichen Schriftbreite ausrichten wollte

Versuchen Sie eine Beurteilung in voller Breite mit Zeichencode

# -*- coding: utf-8 -*-

def width(s):
    return sum([_width(c) for c in s.decode('utf-8')])

def _width(c):
    return 2 if _isMultiByte(c) else 1

def _isMultiByte(c):
    return ord(c) > 255

Funktionsprüfung

assert 0 == width('')

assert 1 == width('a')
assert 1 == width('A')
assert 1 == width('EIN')
assert 1 == width('-')
assert 1 == width('+')
assert 1 == width(' ')
assert 1 == width('\\')
assert 1 == width('\n')
assert 1 == width('\t')

assert 2 == width('aa')
assert 2 == width('AA')
assert 2 == width('Aber')
assert 2 == width('Tsu')
assert 2 == width('Po')
assert 2 == width('ich')
assert 2 == width('!')
assert 2 == width('G')
assert 2 == width('EIN')
assert 2 == width('○')
assert 2 == width('■')
assert 2 == width('、')
assert 2 == width('。')
assert 2 == width('‐')
assert 2 == width('- -')
assert 2 == width(' ')
assert 2 == width('\\\\')
assert 2 == width('\r\n')

assert 4 == width('YY')
assert 4 == width('0w0')
assert 4 == width('OK!')

Nur A ist seltsam ... Es wird als in voller Breite beurteilt ...

[Ostasiatische Breite](https://ja.wikipedia.org/wiki/%E6%9D%B1%E3%82%A2%E3%82%B8%E3%82%A2%E3%81%AE%E6 % 96% 87% E5% AD% 97% E5% B9% 85)

Korrigieren Sie nur "_isMultiByte"

# -*- coding: utf-8 -*-

def width(s):
    return sum([_width(c) for c in s.decode('utf-8')])

def _width(c):
    return 2 if _isMultiByte(c) else 1

def _isMultiByte(c):
    import unicodedata
    return unicodedata.east_asian_width(c) in ['F', 'W', 'A']

Diesmal ist alles in Ordnung! Sieht das gut aus

Ergänzung

Ich gehe von einer Standardeingabe aus

$Echo Howa| python width.py
8

width.py


# -*- coding: utf-8 -*-

import sys
s = sys.stdin.readlines()[0].strip()

print width(s)

Kommandozeilenargumente

$ python width.py howa
8

width.py


# -*- coding: utf-8 -*-

import sys
s = sys.argv[1]

print width(s)

Griechische und arabische Zeichen fallen nicht unter die Betriebsgarantie.

Recommended Posts

Finden Sie die scheinbare Breite einer Zeichenfolge in Python heraus
Python - Ermitteln Sie die Anzahl der Gruppen im regulären Ausdruck
Finden Sie die Eigenwerte einer reellen symmetrischen Matrix in Python
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
Holen Sie sich den Aufrufer einer Funktion in Python
Kopieren Sie die Liste in Python
Finden Sie die Anzahl der Tage in einem Monat
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Ausgabe in Form eines Python-Arrays
[Python] Finden Sie die Translokationsmatrix in Einschlussnotation
Geben Sie eine kurze URL-ähnliche Zeichenfolge in Python aus
Finde Fehler in Python
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
Kennen Sie den Speicherort der Python-Klassendefinitionsdatei.
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Maya | Ermitteln Sie die Anzahl der Polygone im ausgewählten Objekt
Holen Sie sich die Anzahl der spezifischen Elemente in der Python-Liste
[Hinweis] Import von Dateien in das übergeordnete Verzeichnis in Python
Ermitteln Sie die maximale Anzahl von Zeichen in mehrzeiligem Text, die in einem Datenrahmen gespeichert sind
Ich habe Python verwendet, um mich über die Rollenauswahl der 51 "Yachten" in der Welt zu informieren.
Finden Sie heraus, wie viele Zeichen sich in der Zeichenfolge befinden.
Erstellen Sie eine zufällige Zeichenfolge in Python
Wie kann man schnell die Häufigkeit des Auftretens von Zeichen aus einer Zeichenfolge in Python zählen?
Geben Sie die Codierung der Unicode-Zeichenfolge in der Python 2.x-Druckanweisung an
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
So bestimmen Sie die Existenz eines Selenelements in Python
So überprüfen Sie die Speichergröße einer Variablen in Python
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Finden Sie den Rang der Matrix in der XOR-Welt (Rang der Matrix auf F2)
Rufen Sie die Formel in der Excel-Datei als Zeichenfolge in Python ab
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Zeigen Sie eine Liste der Alphabete in Python 3 an
Führen Sie den Python-Interpreter im Skript aus
Das Ergebnis der Installation von Python auf Anaconda
[Python] [Meta] Ist der Python-Typ ein Typ?
Grundlagen zum Ausführen von NoxPlayer in Python
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Die Geschichte der Verarbeitung A von Blackjack (Python)
Memorandum zum Löschen von Python-Strings
Ich habe versucht, den Unterschied zwischen A + = B und A = A + B in Python herauszufinden
Python VBA, um mit Selenium die gesamte WEB-Seite zu erfassen
Wenn Sie einen Singleton in Python möchten, stellen Sie sich das Modul als Singleton vor
Überprüfen Sie die speicherinterne Byte-Zeichenfolge der Gleitkommazahl in Python
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte einen Teil der Excel-Zeichenfolge mit Python einfärben
Erhalten Sie eine Liste der Ergebnisse der Parallelverarbeitung in Python mit Starmap
Die eval () -Funktion, die eine Zeichenfolge als Ausdruck in Python berechnet
Den Namen der Methode, die ihn aufgerufen hat, finden Sie in der Python-Methode
[Einführung in Python] Eine ausführliche Erklärung der in Python verwendeten Zeichenkettentypen!
Holen Sie sich zu jeder Tageszeit eine Datums- / Uhrzeitinstanz in Python