Seite 1 von 1

einzelne Zahl in String hervorheben (nicht mit print)

Verfasst: Donnerstag 8. Februar 2018, 19:10
von TimeMen
Hallo,

Ich sammele Daten in einem String durch eine Schleife der ungefähr so aussieht:
choose = "1: 0:5 1:3 2:15 " usw..
Die Werte vor und nach den Doppelpunkten werden aus Arrays eingelesen. Ich möchte den höchsten Wert hinter dem Doppelpunkt gerne hervorheben. Am Besten farbig. Doch wie kann ich nun nur eine Zahl farbig kennzeichnen, ohne das direkt im im Print Befehl zu definieren?

LG
TimeMen

Re: einzelne Zahl in String hervorheben (nicht mit print)

Verfasst: Donnerstag 8. Februar 2018, 19:19
von pixewakb
print() kann das nicht, weil die print-Ausgabe ist immer in der Farbe, die das Konsolenfenster für Text vorsieht.

Du verwendest m. E. ein falsches Datenformat. Nutze eine Liste, der du die Werte beigibst, dann bestimmst du das größte Element und formatierst das und dann machst du aus der Liste einen String mittels "VERBINDUNGSELEMENT".join(LISTE), z. B. " ".join(liste), wodurch du dann deinen String bekommst. Beim Formatieren ist zu berücksichtigen, dass du das z. B. für die Ausgabe in einem HTML-Dokument o. ä. anpassen musst.

Mit den Werten 1:, 0:5 usw. kann ich nichts anfangen. Falls das Zeitangaben sind, wäre ein geeigneteres Dateiformat zu wählen, so dass das Auffinden des höchsten Wertes nicht eigens implementiert werden muss, sondern du dann max(LISTE) verwenden kannst.

Hilft Dir das?

Code: Alles auswählen

from random import randint

values = []

for i in range(10):
    values.append(randint(1, 20))

values.sort()

max_value = max(values)

output_values = ["**{}**".format(value) if value == max_value else str(value) for value in values]

print("Werte [1]:", values)

print("Werte [2]:", ", ".join(output_values))

Re: einzelne Zahl in String hervorheben (nicht mit print)

Verfasst: Donnerstag 8. Februar 2018, 19:29
von TimeMen

Code: Alles auswählen

1: 0:1 1:10 2:4 3:4 4:8 5:31 6:5 7:1 8:12 9:14 10:0 11:1 12:3 13:3 14:19 15:4 16:3 17:0 18:11 19:16 20:8 21:9 22:0 23:3 24:1 25:0 
Das ist das Format.
Die erste Zahl steht für die Nummer der Operation (die danach folgen soll).
Wie man sieht folgen die nächsten Zahlen (die vor dem ":") einem Muster. (von 0-25), die Zahlen dahinter stellen eine Häufigkeit dar.
Und der höchste Wert dieser Häufigkeit soll eben irgendwie gekennzeichnet werden.

So wird der String aufgebaut:

Code: Alles auswählen

choice = str(i+1) + ": "
	for j in range(0, len(result[i])):
		if result[i][comp[j]] == x:
			choice = choice + str(comp[j]) + ":" + str(result[i][comp[j]]) + " "
		else:
			choice = choice + str(comp[j]) + ":" + str(result[i][comp[j]]) + " "
	os.system('clear')
	print(choice)
	info = str(i+1) + ". Rotation: "
	index = input(info)
Aber wenn sowas nicht geht dann mache ich es eben über irgendwelche Zeichen oder so.

Re: einzelne Zahl in String hervorheben (nicht mit print)

Verfasst: Donnerstag 8. Februar 2018, 19:48
von Sirius3
@TimeMen: Dein Index- und String-Gemetzel kann man kaum anschauen.

Code: Alles auswählen

    counts = result[i]
    choices = []
    for component in comp:
        c = counts[component]
        if c == x:
            choices.append("{}:{}**".format(component, c))
        else:
            choices.append("{}:{}".format(component, c))
    print("{}.: {}".format(i+1, " ".join(choices)))

Re: einzelne Zahl in String hervorheben (nicht mit print)

Verfasst: Donnerstag 8. Februar 2018, 19:56
von noisefloor
Hallo,

das in einem String zu sammeln macht die Sache trotzdem unnötig kompliziert...

Gibt es auch 2: 0:1 1:10 2:4 3:4 4:8 und 3: 0:1 1:10 2:4 3:4 4:8 usw? Dann würde sich eine Dict von Tupeln eher anbieten.

Ob die Farbe verwenden kannst oder nicht hängt vom Ausgabegerät ab - es gibt ja auch monochrome Terminals...Ansonsten kannst du - zumindest unter Linux - `print` ANSI-Sequenzen mitgeben, die die Farbe des Ausgabe ändern.

Gruß, noisefloor

Re: einzelne Zahl in String hervorheben (nicht mit print)

Verfasst: Donnerstag 8. Februar 2018, 20:40
von TimeMen
Das war eine schnelle Lösung die bis dato funktioniert hat.
Da ich Linux nutze und das Skript nur mir dienen soll, langt eine einfache Lösung mit der Farbe.
Das snippet verstehe ich zwar, dennoch funktioniert es nicht so wirklich...
Genauer gesagt sind die Werte hinter dem ":" immer 0, was nicht stimmen kann.