Ausgabe in Form einer Tabelle

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
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Hey,
ich habe folgende Liste vorliegen:

Code: Alles auswählen

Mittwoch 18:25 False
Montag 17:20 True
Freitag 13:30 False
Montag 17:25 True
Dienstag 16:20 False
Montag 17:20 False
Dienstag 16:30 True
Mittwoch 17:25 False
Donnerstag 19:20 False


So soll die Ausgabe aussehen:

Code: Alles auswählen

11:00  12:00  13:00  14:00  15:00
          
06.40  52.30  20.00  18.25  65.21   Montag
80.26  12.63  25.00  09.56  31.21   Dienstag
...


Oben die Uhrzeiten in einer Reihe nebeneinander und darunter die Prozentanzahl für jeden Tag pro Uhrzeit


Ich lese jede Zeile ein und ordne die Werten zwei Listen zu pro Tag. Bei denen True dahinter steht kommen in die liste_true, die anderen in liste_false.
Dann soll jede Uhrzeit die in der Liste vorkommt, oben in der Zeile nur einmal ausgegeben werden. Das mache ich mit

Code: Alles auswählen

for time in list(set(liste_true + liste_false)):
    print(f"{time:05.2f} ", end= "")

Dann stehen die alle nebeneinander.

Dann möchte ich den Tag ausgeben und dahinter den Prozentwert aus liste_true.count(time)/(liste_true.count(time)+ liste_false.count(time))*100 für jede Uhrzeit.
Das mit dem berechnen klappt alles schön und gut, allerdings bekomme ich das nicht so schön formatiert und ich müsste für jeden Tag zwei extra Listen erstellen, kann mir bitte jemand helfen?

Code: Alles auswählen

liste_true = [17.20, 18.20, 19.20, 20.20]
liste_false = [17.20, 18.20, 19.20, 20.20, 21.20]

for time in list(set(liste_true + liste_false)):
    print(f"{time:05.2f} ", end= "")
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich sehe da verschiedene Minutenzeiten? Du willst also alle Minuten-Einträge pro Stunde accumulieren?
Dann mach genau das.
Statt also die Werte in Listen aufzutrennen, mußt Du zusammengehörige Daten zusammenbehalten und so aufbereiten, wie Du später auf sie zugreifen willst.

Da die Einträge in wilder Reihenfolge zu kommen scheinen, eigenet sich ein Wörterbuch (hier `collections.defaultdict`) am besten, weil es sich automatisch mit den Inputs nacheinander aufbaut.
Der Key ist ein Tuple aus Wochentag und Stunde, der Wert ist jeweils eine Liste, in der Du einfach alle True- und False-Werte speicherst, die Du dazu findest.

Damit ist die Ausgabe ganz einfach: Du gehst in einer doppelten Schleife Montag bis Freitag und 11Uhr bis 19Uhr durch, liest die Liste aus dem Wörterbuch und berechnest daraus die Prozente (`statistics.mean`).
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Die Minutenanzeigen sind verschieden, da die Tabelle nur als Beispiel der Formatierung dienen sollte. Also ich habe es jetzt hinbekommen, dass die Tabelle so dargestellt wird wie ich es möchte.

Code: Alles auswählen

WOCHENTAGE = {0: "Montag",
              1: "Dienstag",
              2: "Mittwoch",
              3: "Donnerstag",
              4: "Freitag",
              5: "Samstag",
              6: "Sonntag"}

liste_true = [17.20, 18.20, 19.20, 20.20]
liste_false = [17.20, 18.20, 19.20, 20.20, 21.20]


for time in list(set(liste_true + liste_false)):
    print(f"{time:05.2f} ", end= "")
print("\n")    
    
    
for day in list(WOCHENTAGE.values()):
    for time in list(set(liste_true + liste_false)):
        print("{0:05.2f} ".format(liste_true.count(time)/(liste_true.count(time) + liste_false.count(time))*100), end = "")
    print(f"{day}", end = "")
    print()
jetzt muss ich nur noch das hinbekommen, dass ich nicht für jeden Tag zwei extra Listen erzeugen muss. Also soll ich dann ein dict erstellen was z.B. so aussieht (vom Aufbau):

Code: Alles auswählen

beispiel = {("Montag", "14.20"): [True, False, False, True, False, ...],
            ("Montag", "15.20"): [False, False, False, True, ...],
            ("Montag", "16.20"): [False, True, True, True, ...]
            ("Dientag", "14.20"): [False, True, True, False, ...]
            ...
            }
und werte das dann mit statistics.mean aus?

Und die Tabelle hab ich bisschen unglücklich gezeigt. Mit den Werten meiner Datei die ich auswerten soll würde die Tabelle so aussehen (Prozente sind nur dummys)

Code: Alles auswählen

13:30  16:20  16:30  17:20  17:25  18:25  19:20
          
06.40  52.30  20.00  18.25  65.21  66.66  66.66  Montag
80.26  12.63  25.00  09.56  31.21  66.66  66.66  Dienstag
Also jede Uhrzeit die einmal vorkommt soll auf der X-Achse ausgegeben werden. Es sind nicht nur volle Stunden o.Ä.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Hey, so richtig bekomme ich das nicht wirklich hin.
Bei mir ist immer nur ein status Wert (True/False) dann dem Tupel von (tag, uhrzeit) zugeordnet.

Code: Alles auswählen

def fill_dict():
    testdict = defaultdict()
    with open(FILENAME) as file:
        for item in file:
            if ' ' in item:
                tag,uhrzeit,status = item.split(' ', 2)
                testdict[(tag, uhrzeit)] = status[:-1]
    print(testdict)    

fill_dict()
Ausgabe:

Code: Alles auswählen

defaultdict(None, {('Montag', '17.30'): 'False', ('Dienstag', '16.30'): 'False',
 ('Mittwoch', '15.30'): 'False', ('Donnerstag', '14.30'): 'False', ('Freitag', '
13.30'): 'False', ('Samstag', '12.30'): 'False', ('Sonntag', '11.30'): 'False',
('Sonntag', '07.30'): 'False'})
Kann mir jemand weiterhelfen oder hat ein gutes Beispiel parat?


#edit:

habe es hinbekommen

Code: Alles auswählen

def fill_dict():
    testdict = defaultdict(list)
    with open(FILENAME) as file:
        for item in file:
            if ' ' in item:
                datum,tag,uhrzeit,status = item.split(' ', 3)
                testdict[(tag, uhrzeit)].append(status[:-1])
    print(testdict) 

Code: Alles auswählen

defaultdict(<class 'list'>, {('Montag', '17.30'): ['False', 'True'], ('Dienstag'
, '16.30'): ['True', 'False'], ('Mittwoch', '15.30'): ['True', 'False'], ('Donne
rstag', '14.30'): ['True', 'False'], ('Freitag', '13.30'): ['True', 'False'], ('
Samstag', '12.30'): ['True', 'False'], ('Sonntag', '11.30'): ['True', 'False'],
('Sonntag', '07.30'): ['False']})
Jetzt hängt es nur noch an der Darstellung der Tabelle
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Sorry für den Doppelpost, aber ich fasse hier noch mal zusammen was ich alles habe und was ich erreichen möchte.

Was ich erreichen möchte ist folgende Darstellung der Werte

Code: Alles auswählen

        Montag  Dienstag  Mittwoch  Donnerstag  Freitag  Samstag  Sonntag
        
07.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66     
11.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
12.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
13.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
14.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
15.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
16.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66
17.30   66.66   66.66     66.66     66.66       66.66    66.66    66.66



x-Achse: jeder Tag der in der Urpsrungsdatei vorkommt, nur 1x und wenn möglich richtige Reihenfolge(Mo-Fr).
y-Achse: jede Uhrzeit die in der Ursprungsdatei vorkommt, nur 1x und wenn möglich richtige Reihenfolge(früh -> spät)

Die 66.66 sind nur Dummy-Werte, dort soll später das Verhältnis von True/False stehen für jeden Tag für jede Uhrzeit


Was ich bisher habe:

Code: Alles auswählen

def fill_dict():
    testdict = defaultdict(list)
    with open(FILENAME) as file:
        for item in file:
            if ' ' in item:
                datum,tag,uhrzeit,status = item.split(' ', 3)
                if status == "True\n":
                    status = True
                else:
                    status = False
                testdict[(tag, uhrzeit)].append(status)
    return testdict
    
    
testdict = fill_dict()    
for k in testdict.keys():
    print(k[0], k[1])
    print(testdict[k])
    print(statistics.mean(testdict[k]))
Ausgabe von dem was ich habe:

Code: Alles auswählen

Montag 17.30
[False, True]
0.5
Dienstag 16.30
[True, False]
0.5
Mittwoch 15.30
[True, False]
0.5
Donnerstag 14.30
[True, False]
0.5
Freitag 13.30
[True, False]
0.5
Samstag 12.30
[True, False]
0.5
Sonntag 11.30
[True, False]
0.5
Sonntag 07.30
[False]
0
Montag 16.30
[False]
0
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

`testdict` ist ein schlechter Name für eine Variable, die gar nichts testet. Außerdem sollte kein expliziter Datentyp im Namen vorkommen. `fill_dict` ist ein schlechter Name für eine Funktion, da viel zu allgemein. Es wird ein Wörterbuch gefüllt? Der Leser will doch wissen, mit was es gefüllt wird. `tag` ist eigentlich der Wochentag.
status sollte gleich in den passenden Datentyp umgewandelt werden. Ein encoding sollte immer explizit angegeben werden. Die Mischung von englischen und deutschen Bezeichnern ist verwirrend.

Code: Alles auswählen

def parse_whatever_file(filename):
    weekday_and_time_to_states = defaultdict(list)
    with open(filename, encoding="ASCII") as lines:
        filtered_lines = filter(bool, map(str.split, lines)) # split lines and remove empty ones
        for date, weekday, time, status in filtered_lines:
            weekday_and_time_to_states[weekday, time].append({"True": True, "False": False}[status])
    return weekday_and_time_to_states 
EDIT: Wenn man über Schlüssel und Wert eines Wörterbuches iterieren möchte benutzt man `dict.items`.
Bei Deinem letzten Post fehlt eine Frage. Daraus schließe ich, dass Du noch selbst über das Problem nachdenkst.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Habe das erstmal nur testdict genannt, weil ich eine extra Python Datei erstellt habe um nur dieses aufüllen des Dictionarys dort zu testen, also es sind noch keine finalen Namen.

Ich bekomme die Schleifen nicht so hin, dass am Ende eine strukturierte Tabelle ensteht, wie ich es mir vorstelle. Eine Konkrete Frage habe ich da nicht, außer: Wie geht das?

Wenn ich z.B. nur die Tage nebeneinander in einer Zeile ausgeben möchte benutze ich:

Code: Alles auswählen

for k, v in testdict.items():
    print(f"{k[0]} ", end = "")
Allerdings werden so auch doppelte Werte doppelt ausgegeben. Ich weiß nur wie ich aus einer Liste jedes Element nur 1x ausgebe, so funktioniert das aber nicht mit testdict.items()
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Ich werde leider aus deiner Erklärung nicht ganz schlau, aber was immer geht:

Einen Schritt zurück treten und die Daten vorher so sortieren, wie du sie brauchst. Zeile für Zeile in eine Liste, deren Elemente wiederum die Spalten sind.
Am Ende brauchst du dann nur einmal durch die Liste laufen und die Daten ausgeben.

Optimieren, weil der Code hässlich ist, kann man hinterher noch immer.

Zeig doch mal wie deine Daten jetzt (in entsprechender Datenstruktur im Programm) aussehen und wie sie hinterher angezeigt werden sollen. Keine Platzhalter und bitte alle Berechnungen schon abgeschlossen.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Jankie: das habe ich Dir schon im ersten Post geschrieben; Du brauchst zwei verschachtelte Schleifen, eine über die Wochentage und eine über die Uhrzeiten. Dazu mußt Du erst alle Wochentage und Uhrzeiten in Sets sammeln, und sortiert über sie iterieren.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jankie: Irgendwie hast Du jetzt ”mitten drin” geändert was Du als Ergebnis haben möchtest – also die Tabelle transponiert. Du könntest/solltest vielleicht auch ein verschachteltes Wörterbuch ins Auge fassen statt Tag und Zeit in einem Schlüssel zusammen zu fassen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Sirius3 hat geschrieben: Dienstag 21. Mai 2019, 10:17 @Jankie: das habe ich Dir schon im ersten Post geschrieben; Du brauchst zwei verschachtelte Schleifen, eine über die Wochentage und eine über die Uhrzeiten. Dazu mußt Du erst alle Wochentage und Uhrzeiten in Sets sammeln, und sortiert über sie iterieren.
Das mit dem Sets erstellen bekomme ich hin, allerdings nicht die verschachtelte Schleife, bei mir gibt er dann für jede Uhrzeit einmal die Tage aus. Er soll aber nur einmal die Tage nebeneinander ausgeben und die Uhrzeiten untereinander. Mit zwei getrennten Schleifen bekomme ich auch das hin, verschachtelt aber leider nicht. Und das mit dem sortiert drüber iterieren verstehe ich auch nicht, soll ich vielleicht vorher das Set wieder in eine Liste umwandeln?

__blackjack__ hat geschrieben: Dienstag 21. Mai 2019, 10:18 @Jankie: Irgendwie hast Du jetzt ”mitten drin” geändert was Du als Ergebnis haben möchtest – also die Tabelle transponiert. Du könntest/solltest vielleicht auch ein verschachteltes Wörterbuch ins Auge fassen statt Tag und Zeit in einem Schlüssel zusammen zu fassen.
Ja ich habe gemerkt, dass ich mehr verschiedene Uhrzeiten als verschiedene Tage habe, da die ausgabe der Uhrzeiten nicht in eine Reihe passt habe ich die Achsen vertauscht.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

So funktioniert programmieren. Du überlegst Dir, was Du haben möchtest, teilst das Problem in kleine Teilprobleme auf, und implementierst diese dann.
Du willst alle Zeiten sortiert ausgegeben haben, dann mußt Du erst alle Zeiten ermitteln und diese dann sortieren, z.B. mit `sorted`.
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

@Jangie: Wie gesagt, zeig reale Daten, so wie sie in deiner Struktur vorliegen, und zeig, wie sie am Ende aussehen in Tabellenform aussehen sollen. Keine Platzhalter oder Dummy-Werte und alle Berechnungen bereits abgeschlossen und in den Daten enthalten.
Denn die Berechnung und die Ausgabe sind zwei unterschiedliche Teilprobleme.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Mal ein Versuch mit verschachtelten `defaultdict`\s:

Code: Alles auswählen

#!/usr/bin/env python3
from collections import defaultdict
from statistics import mean, StatisticsError

DAY_NAMES = [
    'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag',
    'Freitag', 'Samstag', 'Sonntag'
]

LINES = '''\
Mittwoch 18:25 False
Montag 17:20 True
Freitag 13:30 False
Montag 17:25 True
Dienstag 16:20 False
Montag 17:20 False
Dienstag 16:30 True
Mittwoch 17:25 False
Donnerstag 19:20 False
'''.splitlines()


def main():
    time2days = defaultdict(lambda: defaultdict(list))
    for line in LINES:
        day_name, time, flag = line.split()
        time2days[time][day_name].append(bool(flag))
    
    column_gap = 2
    time_column_width = 5
    day_column_width = max(map(len, DAY_NAMES))
    print(' ' * (time_column_width + column_gap), end='')
    print(
        (' ' * column_gap).join(
            day_name.rjust(day_column_width)
            for day_name in DAY_NAMES
        )
    )
    for time, day_name2flags in sorted(time2days.items()):
        row = [time.rjust(time_column_width)]
        for day_name in DAY_NAMES:
            try:
                ratio = mean(day_name2flags[day_name])
            except StatisticsError:
                ratio = 0
            row.append('{0:-{1}.2f}'.format(ratio, day_column_width))
        print((' ' * column_gap).join(row))


if __name__ == '__main__':
    main()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

sparrow hat geschrieben: Dienstag 21. Mai 2019, 10:58 @Jangie: Wie gesagt, zeig reale Daten, so wie sie in deiner Struktur vorliegen, und zeig, wie sie am Ende aussehen in Tabellenform aussehen sollen. Keine Platzhalter oder Dummy-Werte und alle Berechnungen bereits abgeschlossen und in den Daten enthalten.
Denn die Berechnung und die Ausgabe sind zwei unterschiedliche Teilprobleme.
Ich habe folgende Daten in einer .txt vorliegen:

Code: Alles auswählen

Montag 17.30 True
Dienstag 16.30 True
Mittwoch 15.30 True
Donnerstag 14.30 True
Freitag 13.30 True
Samstag 12.30 True
Sonntag 11.30 True
Sonntag 17.30 False
Samstag 16.30 False
Freitag 15.30 False
Donnerstag 14.30 False
Mittwoch 13.30 False
Dienstag 12.30 False
Montag 11.30 False
Donnerstag 16.30 False
Montag 17.30 False
Dienstag 16.30 False
Mittwoch 15.30 False
Donnerstag 14.30 False
Freitag 13.30 False
Samstag 12.30 False
Sonntag 11.30 False
Sonntag 17.30 True
Samstag 16.30 True
Freitag 15.30 True
Donnerstag 14.30 True
Mittwoch 13.30 True
Dienstag 12.30 True
Montag 11.30 True
Donnerstag 16.30 True
Samstag 11.25 True
Samstag 11.25 True

diese lese ich in ein Dictionary ein, eingelesen sieht es folgendermaßen aus:

Code: Alles auswählen

{('Montag', '17.30'): [True, False], ('Dienstag', '1
6.30'): [True, False], ('Mittwoch', '15.30'): [True, False], ('Donnerstag', '14.
30'): [True, False, False, True], ('Freitag', '13.30'): [True, False], ('Samstag
', '12.30'): [True, False], ('Sonntag', '11.30'): [True, False], ('Sonntag', '17
.30'): [False, True], ('Samstag', '16.30'): [False, True], ('Freitag', '15.30'):
 [False, True], ('Mittwoch', '13.30'): [False, True], ('Dienstag', '12.30'): [Fa
lse, True], ('Montag', '11.30'): [False, True], ('Donnerstag', '16.30'): [False,
 True], ('Samstag', '11.25'): [True,True]})
Meine Ausgabe soll folgendermaßen aussehen:

Code: Alles auswählen

Montag Dienstag Mittwoch Donnerstag Freitag Samstag Sonntag  
0      0        0        0          0       100     0        11.25
50     0        0        0          0       0       50       11.30
0      50       0        0          0       50      0        12.30
0      0        50       0          50      0       0        13.30
0      0        0        50         0       0       0        14.30
0      0        50       0          50      0       0        15.30
0      50       0        50         0       50      0        16.30
50     0        0        0          0       0       50       17.30
Auf der X-Achse sind alle Tage die in der .txt vorkommen nebeneinander dargestellt. Das bekomme ich hin mit

Code: Alles auswählen

WOCHENTAGE = {0: "Montag",
             1: "Dienstag",
              2: "Mittwoch",
              3: "Donnerstag",
              4: "Freitag",
              5: "Samstag",
              6: "Sonntag"}

set_for_day = set()

for k, v in testdict.items():
    set_for_day.add(k[0])

order = list(WOCHENTAGE.values())    
for day in sorted(set_for_day, key = lambda x: order.index(x)):
    print(f"{day} ", end ="")
(Das dict WOCHENTAGE habe ich drin, weil ich damit über das Datum den Wochentag ermittle)
Auf der Y-Achse sind die Uhrzeiten die in der .txt vorkommen (es kann auch mal 11:33 Uhr oder 18:48 Uhr sein , also es wird nicht in festen Abständen gemessen) untereinander dargestellt.

In der Zeile 11:30 und der Spalte Montag steht dann 50, weil einmal True und ein mal False vorkommt, also das Verhältnis im Prozenwert (im Vergleich dazu Zeile 11.25 und Spalte Samstag 100, weil dort beide werte True sind, es sind aber nicht immer nur zwei Werte (True/False) sonder eine varaible Anzahl von Werten möglich.

Was ich bis jetzt habe ist, dass ich die Wochentage in der X-Achse nebeneinander ausgeben kann (siehe oben)

Die Uhrzeiten gebe ich untereinander aus mit:

Code: Alles auswählen

set_for_time = set()
for k, v in testdict.items():
    set_for_time.add(k[1])

for times in sorted(set_for_time):
    print(f"                                                            {times}")
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Mit den neuen Beispieldaten und etwas angepasst:

Code: Alles auswählen

#!/usr/bin/env python3
from collections import defaultdict
from statistics import mean, StatisticsError

DAY_NAMES = [
    'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag',
    'Freitag', 'Samstag', 'Sonntag'
]

LINES = '''\
Montag 17.30 True
Dienstag 16.30 True
Mittwoch 15.30 True
Donnerstag 14.30 True
Freitag 13.30 True
Samstag 12.30 True
Sonntag 11.30 True
Sonntag 17.30 False
Samstag 16.30 False
Freitag 15.30 False
Donnerstag 14.30 False
Mittwoch 13.30 False
Dienstag 12.30 False
Montag 11.30 False
Donnerstag 16.30 False
Montag 17.30 False
Dienstag 16.30 False
Mittwoch 15.30 False
Donnerstag 14.30 False
Freitag 13.30 False
Samstag 12.30 False
Sonntag 11.30 False
Sonntag 17.30 True
Samstag 16.30 True
Freitag 15.30 True
Donnerstag 14.30 True
Mittwoch 13.30 True
Dienstag 12.30 True
Montag 11.30 True
Donnerstag 16.30 True
Samstag 11.25 True
Samstag 11.25 True
'''.splitlines()


def main():
    time2days = defaultdict(lambda: defaultdict(list))
    for line in LINES:
        day_name, time, flag = line.split()
        time2days[time][day_name].append(flag == 'True')
    
    column_gap = 2
    time_column_width = 5
    day_column_width = max(map(len, DAY_NAMES))
    print(' ' * (time_column_width + column_gap), end='')
    print(
        (' ' * column_gap).join(
            day_name.rjust(day_column_width)
            for day_name in DAY_NAMES
        )
    )
    for time, day_name2flags in sorted(time2days.items()):
        row = [time.rjust(time_column_width)]
        for day_name in DAY_NAMES:
            try:
                ratio = mean(day_name2flags[day_name])
            except StatisticsError:
                ratio = 0
            row.append('{0:-{1}.2f}'.format(ratio, day_column_width))
        print((' ' * column_gap).join(row))


if __name__ == '__main__':
    main()
Ausgabe:

Code: Alles auswählen

           Montag    Dienstag    Mittwoch  Donnerstag     Freitag     Samstag     Sonntag
11.25        0.00        0.00        0.00        0.00        0.00        1.00        0.00
11.30        0.50        0.00        0.00        0.00        0.00        0.00        0.50
12.30        0.00        0.50        0.00        0.00        0.00        0.50        0.00
13.30        0.00        0.00        0.50        0.00        0.50        0.00        0.00
14.30        0.00        0.00        0.00        0.50        0.00        0.00        0.00
15.30        0.00        0.00        0.50        0.00        0.50        0.00        0.00
16.30        0.00        0.50        0.00        0.50        0.00        0.50        0.00
17.30        0.50        0.00        0.00        0.00        0.00        0.00        0.50
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

1x True für (Tag + Zeit) = 100
1x True 1x False für (Tag + Zeit) = 50

Kann es auch folgendes geben:
1x False für (Tag + Zeit) = ?
4x True 1x False für (Tag + Zeit) = ?
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Vielen Dank an __blackjack__, ich schau mal was ich da für Infos raus ziehen kann um das in mein Programm einzubinden.

@sparrow:
Ja genau, es kann 4x True, 2x False oder 1x True oder 2x False oder 34x False und 1x True (Tag+Zeit) vorkommen. Wenn nur True da steht dann sollte 100 rauskommen, wenn nur False da steht dann 0.
Antworten