localtime variable in Pickle Dateinamen nutzen

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.
BlackJack

@Newcomer: Erst forderst Du uns auf uns mit Kritik nicht zurück zu halten, und wenn wir es dann tun, genügt es Dir plötzlich, dass er irgendwie funktioniert und Du beschwerst Dich, das wir ihn tatsächlich kritisieren. Wie unverschämt von uns. ;-)

Und wieso sollten *wir* besseren Code für Dich schreiben? Ist ja schliesslich Deine Aufgabe.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Newcomer hat geschrieben:...und wenn ihrs besser könnt postet doch mal n code der wirklich besser ist, sodass wir etwas lernen können.
Nun ja, Du klappst ja schon beim ersten Anflug von Kritik zusammen. Abgesehen davon, dass Dein Ton völlig unpassend ist und Du damit kaum jemanden motivierst, Dir zu helfen, stehst Du Dir damit selbst im Weg und wirst sicherlich nicht über kleinere Codeschnippsel, die ab und zu mal irgendwie funktionieren, hinauskommen.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Also erstens habe ich das Thema nicht angefangen, sondern nur einen konstruktiven Verbesserungsvorschlag liefern wollen. Zweitens habe ich nicht geschrieben, dass ihr kritisieren sollt, wie BlackJack fälschlicherweise annahm. Und drittens, wenn irgendeiner irgendwelche Emotionen in meinen Ton projiziert, kann ich nichts dafür, denn dieser Satz sollte lediglich eine Aufforderung an euch darstellen, ebenso wie ich einen Verbesserungsvorschlag zu liefern, der nicht "unterirdisch" oder in sonst irgendeiner Form unzureichend ist, sodass wir etwas davon lernen könnten. Denn kritisieren kann ich auch, aber zu zeigen, dass man etwas kann fällt dann vielen schwerer. 8)
BlackJack

@Newcomer: Entschuldigung, dass ich Dich mit dem Fragesteller verwechselt habe.

Was sollte Dein Beitrag denn eigentlich bringen, wenn Du doch schon selber gewusst hast, dass der Code nur funktioniert, vom Entwurf aber nicht gut ist? Was soll der OP daraus denn lernen?
Micky2010
User
Beiträge: 34
Registriert: Donnerstag 19. Mai 2011, 17:06
Wohnort: Hessen

Frage Geschlossen

__________________________________________________________________________________________________________________________________________________________________________________________________________
Errare humanum est, in errore perseverare stultum (Irren ist menschlich, im Irrtum verbleiben ist dumm)
Manus manum lavat (Eine Hand wäscht die andere)
BlackJack

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import division
import Tkinter as tk
from functools import partial
from itertools import izip, starmap, tee
from operator import mul

MARKS = xrange(1, 7)


def calculate_average(mark2count):
    return (
        sum(starmap(mul, mark2count.iteritems())) / sum(mark2count.itervalues())
    )


def set_focus_to_entry(entry):
    entry.focus_set()
    entry.select_range(0, tk.END)


def create_mark_frame(parent, marks):
    mark_frame = tk.LabelFrame(parent, text='Noten')
    tk.Label(mark_frame, text='Note').grid(row=0, column=0)
    tk.Label(mark_frame, text='Anzahl').grid(row=0, column=1)
    mark2entry = dict()
    for i, mark in enumerate(marks):
        tk.Label(mark_frame, text=str(mark)).grid(row=i + 1, column=0)
        entry = tk.Entry(mark_frame, width=5)
        entry.insert(0, '0')
        entry.grid(row=i + 1, column=1)
        mark2entry[mark] = entry
    return mark_frame, mark2entry


def create_result_frame(parent):
    result_frame = tk.LabelFrame(parent, text='Ergebnis')
    result_entry = tk.Entry(result_frame)
    result_entry.pack(expand=True, fill=tk.BOTH)
    
    def set_result_entry(value):
        result_entry.config(state=tk.NORMAL)
        result_entry.delete(0, tk.END)
        result_entry.insert(0, value)
        result_entry.config(state='readonly')
    
    return result_frame, set_result_entry


def do_average(mark2entry, set_result_entry):
    try:
        mark2count = dict()
        for mark, entry in mark2entry.iteritems():
            count = int(entry.get())
            if count < 0:
                set_result_entry('Negative Anzahl!?')
                set_focus_to_entry(entry)
                return
            mark2count[mark] = count
    except ValueError:
        set_result_entry(u'Keine gültige Anzahl.')
        set_focus_to_entry(entry)
    else:
        try:
            set_result_entry(calculate_average(mark2count))
        except ZeroDivisionError:
            set_result_entry(u'Keine Arbeiten → kein Durchschnitt.')


def main():
    root = tk.Tk()
    
    mark_frame, mark2entry = create_mark_frame(root, MARKS)
    mark_frame.pack(expand=True, fill=tk.BOTH)
    
    button = tk.Button(root, text='Schnitt berechnen')
    button.pack(expand=True, fill=tk.BOTH)
    
    result_frame, set_result_entry = create_result_frame(root)
    result_frame.pack(expand=True, fill=tk.BOTH)
    set_result_entry(u'Anzahlen eingeben…')
    
    button.config(command=partial(do_average, mark2entry, set_result_entry))
    root.mainloop()


if __name__ == "__main__":
   main()
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Danke, genau das habe ich gemeint. Zwar kenn ich die Hälfte der Module nicht, versteh aber den Quellcode.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Newcomer hat geschrieben:Denn kritisieren kann ich auch, aber zu zeigen, dass man etwas kann fällt dann vielen schwerer.
Es fällt nicht unbedingt schwerer - wobei auch das in manchen Fällen zutreffen mag -, aber ist doch meist mit mehr Arbeit verbunden (auch das trifft nicht immer zu - bei einem kleinen Snippet ist es manchmal weniger Arbeit, eine gute Lösung zu posten, als zu beschreiben, warum der gezeigte Code in der Form nicht gut ist).

Mit meiner "Kritik" wollte ich nur darauf hinweisen, dass man ein Programm nicht vorschnell als "funktionsfähig" bezeichnen sollte, weil es bei bestimmten Eingaben anscheinend korrekt funktioniert. Sicher, man kann sich auf den Standpunkt stellen, dass ein "normaler Anwender" (im konkreten Fall wird das wahrscheinlich außer dir selbst niemand sein) die Felder mit zulässigen Werten befüllt und man das darum gar nicht zu prüfen braucht. Konsequenterweise hättest du dann die Prüfung auf leere Felder auch gleich weglassen sollen.

Ein "ordentliches" Programm ist aber so konstruiert, dass es mit JEDER denkbaren Eingabe irgendetwas anzufangen weiß und keinen Laufzeitfehler produziert. Im konkreten Fall wäre es für dich ja auch - so denk ich - problemlos möglich gewesen, eine Überprüfung der noch verbleibenden Fälle unzulässiger Eingaben in deinem Code zu ergänzen.
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Ok OK ich entschuldige mich ja. Ich hab aber nicht dich mit der Kritik gemeint, sondern EyDu (-;
Antworten