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
Benutzeravatar
__blackjack__
User
Beiträge: 13006
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
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
sparrow
User
Beiträge: 4165
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