jede Stunde soll die Zahl größer werden

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.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@A1245x: Als angehender Python-Profi (s. deine Signatur) zeigst du leider sehr wenig Interesse daran, zu verstehen, wie vergekaute Codebeispiele genau funktionieren. So wird das wohl nichts mit der Programmierkarriere... ;)
Benutzeravatar
A1245x
User
Beiträge: 28
Registriert: Donnerstag 10. April 2014, 13:02

Ok, Vielen Dank.
Das mit der Signatur werd ich mal ignorieren.
Bin noch Anfänger. Also bitte nicht so kompliziert erklären.
Benutzeravatar
A1245x
User
Beiträge: 28
Registriert: Donnerstag 10. April 2014, 13:02

So, Ich habs halbwegs geschafft...
Allerdings habe ich nun folgendes Problem:

Code: Alles auswählen

import time
TAG = 0 
MONAT = 0 
JAHR = 0 
x = 1
y = 1
z = 1

a = 2014
b = 4
c = 12
d = 0
e = 0
f = 0
g = 0
h = 0
i = 0
A = 2014 + JAHR
B = 5 + MONAT
C = 12 + TAG
D = 0
E = 0
F = 0
G = 0
H = 0
I = 0
dztupel1 = a, b, c, d, e, f, g, h, i
damals1 = time.mktime(dztupel1)
print("Zeit 1:", time.strftime("%d.%m.%Y %H:%M:%S",
                               dztupel1))

dztupel2 = A, B, C, D, E, F, G, H, I
damals2 = time.mktime(dztupel2)
print("Zeit 2:", time.strftime("%d.%m.%Y %H:%M:%S",
                               dztupel2))
diff_sek = damals2 - damals1
diff_min = diff_sek/60
diff_std = diff_min/60
diff_tag = diff_std/24
diff_monat = diff_tag/30
diff_jahr = diff_tag/300
if diff_tag > x:
    print("TAG")
    TAG + 1
else:
    time.sleep(0)

if diff_monat > y:
    print("MONAT")
    MONAT + 1
else:
    time.sleep(0)

if diff_jahr > z:
    print("JAHR")
    JAHR + 1
else:
    time.sleep(0)

print("Schließen:Eingabe")
input()

    
    
    

Nun ist das Problem, dass das + 1 gespeichert werden soll(siehe If bereich).
Versteht ihr was ich meine?
Wie kann ich das machen?
Bin noch Anfänger. Also bitte nicht so kompliziert erklären.
BlackJack

@A1245x: Der Quelltext ist äusserst schlecht. Fang bitte gar nicht erst an mit lauter einbuchstabigen Namen und durchnummerierten Namen. Einbuchstabe Namen sind in sehr begrenzen Gültigkeitsbereichen wie „list comprehensions” und Generatorausdrücken in Ordnung, oder für Zählvariablen mit ganzen Zahlen (`i`, `j`, `k`) und Koordinaten (`x`, `y`, `z`) wo die Leser so etwas aus der Mathematik kennen, aber ansonsten sollte ein Name dem Leser vermitteln was der Wert, der daran gebunden ist, bedeutet. Das ist in dem gezeigten Programm ganz sicher nicht der Fall. Und wenn man anfängt Namen mit angehängten Nummern zu versehen, dann möchte man entweder eine Datenstruktur verwenden, oft eine Liste, oder sich bessere, passendere Namen ausdenken.

Der konkrete Datentyp sollte nicht im Namen stehen. Wenn man den Typ später einmal ändert, und das kommt durchaus vor, muss man entweder an allen Stellen im Programm den oder die Namen anpassen, oder man hat irreführende Namen im Quelltext stehen.

Zum Rechnen mit Datums- und Zeitangaben weise ich jetzt einfach *noch mal* auf das `datetime`-Modul hin.

Die ganzen ``else``-Zweige machen keinen Sinn, die kann man ersatzlos streichen.

Was willst denn *eigentlich* machen, denn ich habe immer noch das Gefühl das Du das falsch angehst, wenn ich mir die Texte der Beiträge in diesem und in dem Cäsar-Verschlüsselungsthema so anschaue. Denn dann würdest Du hier versuchen einen Wert kontinuierlich aktuell zu halten während das Programm läuft, und bist auch darauf angewiesen dass das Programm wirklich kontinuierlich läuft und icht für mehr als das Zeitintervall zum Schlüssel änder ausfällt, und das obwohl man den Wert ganz einfach zu jedem Zeitpunkt *berechnen* kann.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@A1245x: so wie ich das verstanden habe, hast Du einen fixen Startzeitpunkt, und einen Zeitpunkt, an dem die Nachricht verschlüsselt wurde, und willst aus diesen zwei Angaben einen zeitabhängigen Schlüssel generieren:

Code: Alles auswählen

import datetime
START_DATE = datetime.datetime(2014,4,12)

def generate_key_values(current_date):
    months, days = divmod((current_date - START_DATE).days, 30)
    years, months = divmod(months, 360)
    return years, months, days

def main():
    current_date = datetime.datetime(2014,5,12)
    print(generate_key_values(current_date))

if __name__ == '__main__':
    main()
Benutzeravatar
A1245x
User
Beiträge: 28
Registriert: Donnerstag 10. April 2014, 13:02

@Sirius3
Fast so ein Script wollt ich haben, nur dass sich das Startdatum aktualisiert.
Also Startdatum wäre heute das Datum von heute, morgen wäre es das von Datum von morgen...
Ist das Zieldatum erreicht, soll z.b. K mit 1 addiert und gespeichert werden. Bräuchte man eine externe Datei, wäre es trotzdem Ok.
Nun soll sich das Zieldatum um einen Monat verändern (2014,5,12)-->(2014,6,12)
Ich habe es versucht, allerdings bekam ich das nicht hin... :(
Bin noch Anfänger. Also bitte nicht so kompliziert erklären.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@A1245x
So wie BlackJack schon geschrieben hat: Du solltest Dir unbedingt einmal die grundlegenden Datentypen anschauen. Dazu gehören unter anderen unbedingt Listen/Tuples und Dictonaries.

Listen oder Tuples eignen sich z. B. sehr gut, wenn man mehrere zusammengehörende Werte ablegen möchte. Anstatt Dein ``a = ... b = ... c = ...`` sieht das dann mit einer Liste so aus:

Code: Alles auswählen

>>> current_date = [2014, 4, 13]
>>> current_date
[2014, 4, 13]
>>> current_date[0]
2014
>>> current_date[2]
13
Wenn Du diesen Werten dann auch noch weitere (z. B. die Zeit) anfügen möchtest, geht das sehr simpel:

Code: Alles auswählen

>>> current_date.extend((16, 15))
>>> current_date
[2014, 4, 13, 16, 15]
Einen einzelnen Wert (z. B. Sekunden):

Code: Alles auswählen

>>> current_date.append(30)
>>> current_date
[2014, 4, 13, 16, 15, 30]
Und diese Liste kannst Du dann als Argumentbündel weiterverwenden:

Code: Alles auswählen

>>> import datetime
>>> datetime.datetime(*current_date)
datetime.datetime(2014, 4, 13, 16, 15, 30)
Im Gegensatz zur Liste/Tuple, bei der man auf die enthaltenen Werte über einen Index (beginnend beim ersten Element mit der Nummer 0) zugreift, sind die Werte innerhalb eines Dictionaries in keiner festen Reihenfolge enthalten, besitzen dafür allerdings ein Schlüsselwort (key), über das ich gezielt einen bestimmten Wert abfragen kann:

Code: Alles auswählen

>>> current_date = {'year': 2014, 'month': 4, 'day': 13}
>>> current_date
{'month': 4, 'day': 13, 'year': 2014}
>>> current_date['year']
2014
Auch hier kann ich natürlich weitere Werte zufügen:

Code: Alles auswählen

>>> current_date['hour'] = 16
>>> current_date['minute'] = 15
>>> current_date
{'month': 4, 'minute': 15, 'day': 13, 'hour': 16, 'year': 2014}
Die Werte aus einem Dictionary kann ich dann ebenfalls an eine Funktion/Klasse übergeben:

Code: Alles auswählen

>>> datetime.datetime(**current_date)
datetime.datetime(2014, 4, 13, 16, 15)
Spiel damit einfach mal in einer Pythonshell und schau' Dir die Methoden, die Listen, Tuples und Dictionaries besitzen, an. Das wird Dir Dein Leben um ein vielfaches erleichtern :wink: bzw. vieles ist überhaupt erst damit möglich.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
A1245x
User
Beiträge: 28
Registriert: Donnerstag 10. April 2014, 13:02

Ok, vielen Dank.
Allerdings ist mein derzeitiges Problem, dass Ich nicht weiss, wie Ich Variablen in einer exteren Datei abspeichere und wieder aufrufe.
Also:

Code: Alles auswählen

K = 3 #in externer Datei
K = K + 1 #Dies abspeichern
Bin noch Anfänger. Also bitte nicht so kompliziert erklären.
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

A1245x hat geschrieben:Allerdings ist mein derzeitiges Problem, dass Ich nicht weiss, wie Ich Variablen in einer exteren Datei abspeichere und wieder aufrufe.
"Reading and Writing Files" kommt im Tutorial in Kapitel 7. Bis wohin bist du denn schon vorgedrungen? Oder bist du schon daran vorbei und hast noch Fragen dazu?
Benutzeravatar
A1245x
User
Beiträge: 28
Registriert: Donnerstag 10. April 2014, 13:02

Vielen Dank. Das Kapitel hatte ich wohl ausversehen übersprungen :oops: .
Bin noch Anfänger. Also bitte nicht so kompliziert erklären.
Benutzeravatar
A1245x
User
Beiträge: 28
Registriert: Donnerstag 10. April 2014, 13:02

Ich geb auf.
Ich habe alles versucht.
Ich ziehe die Frage zurück, scheint echt schwer zu sein.
Nächstes mal frage ich was einfacheres, damit ich dass auch von selbst hinbekommen kann.
Aber Vielen Dank an euch.
Bin noch Anfänger. Also bitte nicht so kompliziert erklären.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@A1245x
Ich vermute mal, dass nicht Dein Vorhaben zu schwer, sondern Deine Herangehensweise zu konfus bzw. zu ungeduldig ist. Meine Erfahrung ist immer wieder, dass man sich keinen Gefallen tut, einfach darauf los zu programmieren. Joe Armstrong (der, der die Programmiersprache Erlang geschrieben hat) schreibt in 'Coders at Work' sinngemäß:

Am Anfang meiner Programmiertätigkeit musste ich ein Programm erstmal schreiben, um herauszufinden, ob es funktioniert. Heute kann ich mir dasselbe einfach denken. Zeit spare ich mir dadurch keine, die Ausprobierphase dauerte ein Jahr, die Nachdenkphase auch, ich muss nur weniger tippen. :wink: (aus 'Weniger schlecht programmieren', O'Reilly Verlag)

Vielleicht hilft es Dir, einmal die Tastatur beiseite zu schieben und auf einem Blatt Papier zu skiziieren, wie Du Dir Dein Programm grob vorstellst, welche Features es haben soll. Dann hast Du auch gleich mal einen Überblick, welche Funktionen, Module, Frameworks etc. da zum Einsatz kommen. Und so brichst Du das ganze dann Stück für Stück herunter und beginnst dann, eine erste Anforderung zu lösen, z. B. eine Funktion, die aus einer Nutzereingabe ein `datetime.datetime` erstellt, das dann wiederum als Basis für "jede Stunde soll die Zahl größer werden" dient...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
A1245x
User
Beiträge: 28
Registriert: Donnerstag 10. April 2014, 13:02

Ok, Danke für deinen Tipp, mutettella.
So werde ich es in Zukunft machen.
Bin noch Anfänger. Also bitte nicht so kompliziert erklären.
Antworten