String gelb ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Hallo,

ich suche schon eine halbe Stunde nach einer Antwort, wie ich Text farbig ausgeben kann.
Wie ich den ersten Buchstaben eines Strings von einem kleinen Buchstaben in einen großen umwandeln und ausgeben kann, habe ich herausgefunden. Es geht so:

Code: Alles auswählen

text=("hallo welt")
print (text)
print (text.capitalize()) 
Wie kann ich diesen Text anstatt blau gelb ausgeben? Muss ich ein Modul installieren? Wenn ja welches?

Ich möchte den Text einfach nur gelb ausgeben. RGB-Farben will ich nicht verwenden.
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

Bill987654321 hat geschrieben: Donnerstag 19. März 2020, 18:19 Wie kann ich diesen Text anstatt blau gelb ausgeben? Muss ich ein Modul installieren? Wenn ja welches?
Wenn du ein Unix-artiges System verwendest, kannst du direkt mit ANSI Escape Codes arbeiten (https://en.wikipedia.org/wiki/ANSI_escape_code#Colors). Unter Windows kannst du ein Modul wie z.B. colorma (https://pypi.org/project/colorama/ ) nehmen.
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

nezzcarth hat geschrieben: Donnerstag 19. März 2020, 18:27
Bill987654321 hat geschrieben: Donnerstag 19. März 2020, 18:19 Wie kann ich diesen Text anstatt blau gelb ausgeben? Muss ich ein Modul installieren? Wenn ja welches?
Wenn du ein Unix-artiges System verwendest, kannst du direkt mit ANSI Escape Codes arbeiten (https://en.wikipedia.org/wiki/ANSI_escape_code#Colors). Unter Windows kannst du ein Modul wie z.B. colorma (https://pypi.org/project/colorama/ ) nehmen.
Geht das nicht einfacher?
Falls nein - wie bekomme ich das Modul ins Programm? Mit import Colorama? Wenn ich "import colorama" eingebe, erscheint:

Code: Alles auswählen

import colorama
ModuleNotFoundError: No module named 'colorama'
Gibt es kein Modul in Python, das man einfach mit "import" importieren kann?
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

Warum funktioniert das Programm mit Ansi-Code nicht?

import os
os.system("cls")
print ("\u001b[33m.Haus")
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@Bill987654321: nezzcarth hat doch bereits geschrieben, dass Ansi-Codes nur bei unixoiden Sysemen gehen. os.system sollet man nicht mehr verwenden. Für Aufrufe entfernter Programme verwendet man subprocess. Aber in diesem Fall: ein Progamm sollte nicht den Inhalt des Terminals löschen. Mich würde das nerven. Ich bestimme, was auf dem Terminal steht, kein Programm.

Module unter Python installiert man mit dem Programm "pip". Die Dokumentation hat ein ganzes Kaptiel darüber.
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

sparrow hat geschrieben: Donnerstag 19. März 2020, 19:20 @Bill987654321: nezzcarth hat doch bereits geschrieben, dass Ansi-Codes nur bei unixoiden Sysemen gehen. os.system sollet man nicht mehr verwenden. Für Aufrufe entfernter Programme verwendet man subprocess. Aber in diesem Fall: ein Progamm sollte nicht den Inhalt des Terminals löschen. Mich würde das nerven. Ich bestimme, was auf dem Terminal steht, kein Programm.

Module unter Python installiert man mit dem Programm "pip". Die Dokumentation hat ein ganzes Kaptiel darüber.
Danke für die zeitnahe Antwort.

Ich bin vorerst zufrieden, wenn ich einen String gelb, grün oder orange ausgeben kann.
Da müsste es doch eine einfache Möglichkeit geben ohne Importe, Installationen wie bei "Capitalize".?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bill987654321: `colorama` kann man auch unter Linux verwenden, das heisst man kann dann Programme damit schreiben die unter Windows und Linux laufen. (Ich vermute mal unter MacOS auch.)

Allerdings ist das für Konsolenprogramme die in der Konsole ausgeführt werden. Das erwähne ich weil Du schreibst der Text ist sonst blau — was beispielsweise in IDLE in der Python-Shell der Fall ist. Das ist aber keine Konsole vom Betriebssystem, dort funktioniert weder das Windows-Command-Shell Kommando ``cls`` noch ANSI-Escape-Sequenzen.

Wenn man ANSI-Escape-Sequenzen verwendet, sollte man kein betriebssystemabhängiges Programm wie ``cls`` verwenden, denn auch das leeren der Konsole kann man mit dem entsprechenden Escape-Sequenzen erledigen. Zudem: Finger weg von `os.system()`, dafür gibt es das `subprocess`-Modul.

`colorama` kann man natürlich nur importieren wenn man es vorher auch installiert hat. Man *braucht* das unter Windows weil dort die Konsole normalerweise keine ANSI-Escape-Codes versteht. In aktuellen Windowsversionen kann man das aber wohl in der Konsole oder in der PowerShell-Konsole irgendwo aktivieren. Da müsste vielleicht mal ein Windows-Nutzer was zu sagen.

Grundsätzlich ist Farbe halt nicht vorgesehen weil die Schnittstelle für Konsolenprogramme als kleinsten gemeinsamen Nenner die drei Dateien `sys.stdin`, `sys.stdout`, und `sys.stderr` hat. Da kann man Text einlesen beziehungsweise schreiben. Von welchem Programm auch immer das damit verbunden ist. Das muss ja auch gar keine Konsole sein, man kann die Ein- und Ausgaben ja auch aus/in Dateien umgeleitet haben, oder das Programm wurde von einem anderen Programm gestartet das die Dateien auf seiner Seite der Verbindung liest/beschreibt.

Bei Unix ist es bei Terminalemulatoren üblich, dass die mindestens einen Teil der ANSI-Escape-Sequenzen interpretieren. Früher unter DOS konnte man sich einen Treiber dafür installieren der bei DOS dabei war. Unter Windows ist das in der Konsole dann irgendwann aus der Mode gekommen, weil die Leute wenn sie mehr als einfachen Text haben wollten, dann eher eine GUI-Anwendung geschrieben haben.

Wenn ich in Konsolenanwendungen etwas farbig ausgeben will, dann meistens über das `click`-Modul wenn ich das sowieso schon in dem Programm verwende. Das funktioniert betriebssystemübergreifend, und hat unter Windows `colorama` als Abhängigkeit. Wenn es eher ein interaktives Konsolenprogramm werden soll, könnte man auch einen Blick auf das `prompt_toolkit` werfen. Das steckt unter anderem hinter IPython in der Konsole. Falls mir Windows nicht wichtig ist, habe ich auch schon mal das `blessings`-Modul für etwas Buntes in der Konsole verwendet.

Falls die Ausgabe bei Dir tatsächlich in IDLE stattfindet würde ich sagen es lohnt nicht dafür farbige Ausgaben zu hacken. Das funktioniert dann nur dort, und wer führt schon Programme mit IDLE aus…
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

__blackjack__ hat geschrieben: Donnerstag 19. März 2020, 19:38 @Bill987654321: `colorama` kann man auch unter Linux verwenden, das heisst man kann dann Programme damit schreiben die unter Windows und Linux laufen. (Ich vermute mal unter MacOS auch.)

Allerdings ist das für Konsolenprogramme die in der Konsole ausgeführt werden. Das erwähne ich weil Du schreibst der Text ist sonst blau — was beispielsweise in IDLE in der Python-Shell der Fall ist. Das ist aber keine Konsole vom Betriebssystem, dort funktioniert weder das Windows-Command-Shell Kommando ``cls`` noch ANSI-Escape-Sequenzen.

Wenn man ANSI-Escape-Sequenzen verwendet, sollte man kein betriebssystemabhängiges Programm wie ``cls`` verwenden, denn auch das leeren der Konsole kann man mit dem entsprechenden Escape-Sequenzen erledigen. Zudem: Finger weg von `os.system()`, dafür gibt es das `subprocess`-Modul.

`colorama` kann man natürlich nur importieren wenn man es vorher auch installiert hat. Man *braucht* das unter Windows weil dort die Konsole normalerweise keine ANSI-Escape-Codes versteht. In aktuellen Windowsversionen kann man das aber wohl in der Konsole oder in der PowerShell-Konsole irgendwo aktivieren. Da müsste vielleicht mal ein Windows-Nutzer was zu sagen.

Grundsätzlich ist Farbe halt nicht vorgesehen weil die Schnittstelle für Konsolenprogramme als kleinsten gemeinsamen Nenner die drei Dateien `sys.stdin`, `sys.stdout`, und `sys.stderr` hat. Da kann man Text einlesen beziehungsweise schreiben. Von welchem Programm auch immer das damit verbunden ist. Das muss ja auch gar keine Konsole sein, man kann die Ein- und Ausgaben ja auch aus/in Dateien umgeleitet haben, oder das Programm wurde von einem anderen Programm gestartet das die Dateien auf seiner Seite der Verbindung liest/beschreibt.

Bei Unix ist es bei Terminalemulatoren üblich, dass die mindestens einen Teil der ANSI-Escape-Sequenzen interpretieren. Früher unter DOS konnte man sich einen Treiber dafür installieren der bei DOS dabei war. Unter Windows ist das in der Konsole dann irgendwann aus der Mode gekommen, weil die Leute wenn sie mehr als einfachen Text haben wollten, dann eher eine GUI-Anwendung geschrieben haben.

Wenn ich in Konsolenanwendungen etwas farbig ausgeben will, dann meistens über das `click`-Modul wenn ich das sowieso schon in dem Programm verwende. Das funktioniert betriebssystemübergreifend, und hat unter Windows `colorama` als Abhängigkeit. Wenn es eher ein interaktives Konsolenprogramm werden soll, könnte man auch einen Blick auf das `prompt_toolkit` werfen. Das steckt unter anderem hinter IPython in der Konsole. Falls mir Windows nicht wichtig ist, habe ich auch schon mal das `blessings`-Modul für etwas Buntes in der Konsole verwendet.

Falls die Ausgabe bei Dir tatsächlich in IDLE stattfindet würde ich sagen es lohnt nicht dafür farbige Ausgaben zu hacken. Das funktioniert dann nur dort, und wer führt schon Programme mit IDLE aus…
Ich :) führe Programme mit IDLE aus. Wie sollte ich sie denn ausführen? (Bin leider ein Anfänger, der mit vielen Fachbegriffen (noch) nichts anfangen kann.)

Werde wohl auf die farbige Darstellung der Strings verzichten.

Welche "Befehle" gibt es außer "Capitalize" noch? Gibt es einen, mit dem ich einen Text komplett in Großbuchstaben umwandeln kann, also nicht nur den ersten?
Benutzeravatar
noisefloor
User
Beiträge: 4193
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Welche "Befehle" gibt es außer "Capitalize" noch? Gibt es einen, mit dem ich einen Text komplett in Großbuchstaben umwandeln kann, also nicht nur den ersten?
Ja, die Methode heißt "upper()". Das steht aber auch alles in der Python-Doku...

BTW: hast du schon mal das Python Tutorial auf docs.python.org durchgearbeitet?

Bzgl. IDLE: das benutzt eigentlich kaum einer außer Einsteiger. Weil: es gibt wenig Gründe, IDLE zu nutzen. Der "normale" Weg ist: Skript im Editor schreiben, speichern und dann via `python3 mein_skript.py` bzw. `python mein_skript.py` im Terminal ausführen.

Gruß, noisefloor
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

Bill987654321 hat geschrieben: Donnerstag 19. März 2020, 19:58 Welche "Befehle" gibt es außer "Capitalize" noch? Gibt es einen, mit dem ich einen Text komplett in Großbuchstaben umwandeln kann, also nicht nur den ersten?
Um das herauszufinden eignet sich (neben der offiziellen Pythondoku, die immer die erste Anlaufstelle sein sollte bei solchen Fragen), der interaktive Interpreter sehr gut. Dort gibt es die Befehle 'dir()' und 'help()' mit denen du ei4vdie Methoden und Attribute eines Objekts sowie Hilfen anzeigen lassen kannst.

z.B.:

Code: Alles auswählen

>> dir('foo')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> help('foo'.zfill)
Die Erklärungen von help sind jedoch nicht ganz so ausführlich wie die in der Doku.
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

nezzcarth hat geschrieben: Donnerstag 19. März 2020, 21:14
Bill987654321 hat geschrieben: Donnerstag 19. März 2020, 19:58 Welche "Befehle" gibt es außer "Capitalize" noch? Gibt es einen, mit dem ich einen Text komplett in Großbuchstaben umwandeln kann, also nicht nur den ersten?
Um das herauszufinden eignet sich (neben der offiziellen Pythondoku, die immer die erste Anlaufstelle sein sollte bei solchen Fragen), der interaktive Interpreter sehr gut. Dort gibt es die Befehle 'dir()' und 'help()' mit denen du ei4vdie Methoden und Attribute eines Objekts sowie Hilfen anzeigen lassen kannst.

z.B.:

Code: Alles auswählen

>> dir('foo')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> help('foo'.zfill)
Die Erklärungen von help sind jedoch nicht ganz so ausführlich wie die in der Doku.
Ist der interaktive Interpreter in der in der Python-IDLE enthalten?

Wenn nein - wo ist er?
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bill987654321: Du siehst doch die drei ">", woher kommt Dir das denn bekannt vor‽ Probier es doch einfach mal aus.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

__blackjack__ hat geschrieben: Donnerstag 19. März 2020, 19:38 @Bill987654321: `colorama` kann man auch unter Linux verwenden, das heisst man kann dann Programme damit schreiben die unter Windows und Linux laufen. (Ich vermute mal unter MacOS auch.)

Allerdings ist das für Konsolenprogramme die in der Konsole ausgeführt werden. Das erwähne ich weil Du schreibst der Text ist sonst blau — was beispielsweise in IDLE in der Python-Shell der Fall ist. Das ist aber keine Konsole vom Betriebssystem, dort funktioniert weder das Windows-Command-Shell Kommando ``cls`` noch ANSI-Escape-Sequenzen.

Wenn man ANSI-Escape-Sequenzen verwendet, sollte man kein betriebssystemabhängiges Programm wie ``cls`` verwenden, denn auch das leeren der Konsole kann man mit dem entsprechenden Escape-Sequenzen erledigen. Zudem: Finger weg von `os.system()`, dafür gibt es das `subprocess`-Modul.

`colorama` kann man natürlich nur importieren wenn man es vorher auch installiert hat. Man *braucht* das unter Windows weil dort die Konsole normalerweise keine ANSI-Escape-Codes versteht. In aktuellen Windowsversionen kann man das aber wohl in der Konsole oder in der PowerShell-Konsole irgendwo aktivieren. Da müsste vielleicht mal ein Windows-Nutzer was zu sagen.

Grundsätzlich ist Farbe halt nicht vorgesehen weil die Schnittstelle für Konsolenprogramme als kleinsten gemeinsamen Nenner die drei Dateien `sys.stdin`, `sys.stdout`, und `sys.stderr` hat. Da kann man Text einlesen beziehungsweise schreiben. Von welchem Programm auch immer das damit verbunden ist. Das muss ja auch gar keine Konsole sein, man kann die Ein- und Ausgaben ja auch aus/in Dateien umgeleitet haben, oder das Programm wurde von einem anderen Programm gestartet das die Dateien auf seiner Seite der Verbindung liest/beschreibt.

Bei Unix ist es bei Terminalemulatoren üblich, dass die mindestens einen Teil der ANSI-Escape-Sequenzen interpretieren. Früher unter DOS konnte man sich einen Treiber dafür installieren der bei DOS dabei war. Unter Windows ist das in der Konsole dann irgendwann aus der Mode gekommen, weil die Leute wenn sie mehr als einfachen Text haben wollten, dann eher eine GUI-Anwendung geschrieben haben.

Wenn ich in Konsolenanwendungen etwas farbig ausgeben will, dann meistens über das `click`-Modul wenn ich das sowieso schon in dem Programm verwende. Das funktioniert betriebssystemübergreifend, und hat unter Windows `colorama` als Abhängigkeit. Wenn es eher ein interaktives Konsolenprogramm werden soll, könnte man auch einen Blick auf das `prompt_toolkit` werfen. Das steckt unter anderem hinter IPython in der Konsole. Falls mir Windows nicht wichtig ist, habe ich auch schon mal das `blessings`-Modul für etwas Buntes in der Konsole verwendet.

Falls die Ausgabe bei Dir tatsächlich in IDLE stattfindet würde ich sagen es lohnt nicht dafür farbige Ausgaben zu hacken. Das funktioniert dann nur dort, und wer führt schon Programme mit IDLE aus…
Danke für die ausführliche Erklärung. Habe sie heute mal in aller Ruhe gelesen und das Meiste verstanden.
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

noisefloor hat geschrieben: Donnerstag 19. März 2020, 20:37 Hallo,
Welche "Befehle" gibt es außer "Capitalize" noch? Gibt es einen, mit dem ich einen Text komplett in Großbuchstaben umwandeln kann, also nicht nur den ersten?
Ja, die Methode heißt "upper()". Das steht aber auch alles in der Python-Doku...

BTW: hast du schon mal das Python Tutorial auf docs.python.org durchgearbeitet?

Bzgl. IDLE: das benutzt eigentlich kaum einer außer Einsteiger. Weil: es gibt wenig Gründe, IDLE zu nutzen. Der "normale" Weg ist: Skript im Editor schreiben, speichern und dann via `python3 mein_skript.py` bzw. `python mein_skript.py` im Terminal ausführen.

Gruß, noisefloor
Ich habe gerade mal "Pyhon 3.8 (32 bit)" geöffnet. Ist das der Editor? Wozu braucht man das?
Warum gibt es hier keine Register, Laschen usw.?
Wie kann man z.B. speichern?


Bild
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Bill987654321: *Das* ist Python. Das braucht man um Python-Code auszuführen. Wenn man kein Modul angibt was ausgeführt werden soll, dann landet man im interaktiven Interpreter. Es gibt keine Register/Laschen usw. weil das keine GUI-Anwendung ist. Das ist ein Konsolenfenster in dem eben nur die Konsolenanwendung Python drin läuft. Speichern kann man den Inhalt des Fensters nicht, jedenfalls nicht von Python aus. Es kann sein, dass das Konsolenfenster in dem das läuft eventuell solche Funktionalität zur Verfügung stellt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
noisefloor
User
Beiträge: 4193
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

arbeite mal _dringend_ das oben genannten Tutorial durch. Das sind die ganzen Sache auch erklärt.

Grundsätzlich: wer programmiert muss sich früher oder später auch mit der Kommdozeile im Terminal anfreunden. Auch als Windows.Nutzer, wo man das im "normalen" Betrieb eher selten braucht.

Gruß, noisefloor
Benutzeravatar
Bill987654321
User
Beiträge: 136
Registriert: Sonntag 8. März 2020, 10:56

__blackjack__ hat geschrieben: Freitag 20. März 2020, 17:37 @Bill987654321: *Das* ist Python. Das braucht man um Python-Code auszuführen. Wenn man kein Modul angibt was ausgeführt werden soll, dann landet man im interaktiven Interpreter. Es gibt keine Register/Laschen usw. weil das keine GUI-Anwendung ist. Das ist ein Konsolenfenster in dem eben nur die Konsolenanwendung Python drin läuft. Speichern kann man den Inhalt des Fensters nicht, jedenfalls nicht von Python aus. Es kann sein, dass das Konsolenfenster in dem das läuft eventuell solche Funktionalität zur Verfügung stellt.
Was ist der Sinn einer Konsole bzw. eines Konsolenfensters?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kannst du mal bitte aufhören jeden Beitrag in Gänze zu zitieren?

Eine Konsole ist schon lange vor Graphischen Oberflächen der Weg gewesen, einem Computer zu sagen was man von ihm will.
Antworten