Seite 1 von 2
jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 11:17
von A1245x
Hallo,
Ich möchte gerne wissen, wie ich eine Zahl um jede Stunde vergrößere.
Also zum Beispiel:
K = 30
K soll jede Stunde zum Beispiel um 1 vergrößert werden.
Danke im vorraus

Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 11:46
von cofi
Statt den Wert zu aendern wuerde ich den neuen Wert berechnen:
Code: Alles auswählen
import datetime
class TimeDependantValue(object):
def __init__(self, initial, change, time_delta, start_time=None):
self.start = start_time if start_time is not None else datetime.datetime.now()
self.initial = initial
self.change = change
self.time_delta = time_delta
@property
def value(self):
current = datetime.datetime.now()
times = 0
while current > self.start:
times += 1
current -= self.time_delta
return self.initial + (self.change * times)
k = TimeDependantValue(30, 1, datetime.timedelta(hours=1))
k.value # => 30
# 3 stunden spaeter ...
k.value # => 33
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 11:52
von mutetella
Vielleicht so:
Code: Alles auswählen
import time
class TimedValue(object):
def __init__(self, value, seconds):
self._value = value
self._seconds = seconds
self._creation = time.time()
@property
def value(self):
current = time.time()
return self._value + int((current - self._creation) / self._seconds)
Code: Alles auswählen
>>> K = TimedValue(30, 10)
>>> K.value
30
>>> # after 10 seconds...
>>> K.value
31
>>> # after 20 seconds...
>>> K.value
32
mutetella
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 11:56
von A1245x
Bei mir kommt folgender Fehlercode:
Traceback (most recent call last):
File "G:/Informatik/Python/Python Programme/Programme/Anderes/zeit änderung.py", line 20, in <module>
k.value # => 30
File "G:/Informatik/Python/Python Programme/Programme/Anderes/zeit änderung.py", line 17, in value
return intial + (change * times)
NameError: name 'intial' is not defined
Könnt ihr mir helfen?
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 11:59
von mutetella
@A1245x
Das ist ein weit verbreiteter 'copy&paste' Error, da kann man kaum was gegen unternehmen...
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 12:04
von A1245x
@mutetella
Dein Code funktioniert, aber was muss Ich ändern, damit es sich zum Beispiel jede 30s statt 10s ändert?
Und ändert das weiter wenn das Programm "offline" ist?
Ich brauch nämlich sowas.
EDIT: Nein, leider nicht. Weiss jemand, wie sich dass auch offline ändert? So jede 24h. Ich hätte eine Idee, weiss aber nicht wie ich das umsetzen kann, nämlich mit dem Befehl time.localtime.würde das gehen?Und wenn ja, wie?
Vielen Dank
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 12:11
von mutetella
A1245x hat geschrieben:Dein Code funktioniert, ...
Cofi's Code funktioniert auch...
A1245x hat geschrieben:aber was muss Ich ändern, damit es sich zum Beispiel jede 30s statt 10s ändert?
Das erschließt sich doch sehr einfach aus den Argumenten, die beim Erstellen eines `TimedValue` Exemplares verwendet werden.
A1245x hat geschrieben:Und ändert das weiter wenn das Programm "offline" ist?
Was meinst Du mit 'offline'? Ab dem Moment, ab dem das `TimedValue` Exemplar (in diesem Beispiel an den Namen 'K' gebunden) nicht mehr existiert, kannst Du darauf auch nicht mehr zugreifen und Du erhältst demnach auch keine Werte mehr. Wenn Du also das Programm, innerhalb dessen Du mit `TimedValue` Exemplaren arbeitest, beendest, musst Du diese natürlich abspeichern.
mutetella
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 12:18
von A1245x
Mit offline meine ich den Pc ausschalten bzw. Programm beenden.
Ps: Mein Edit oben beachten
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 12:24
von mutetella
@A1245x
Wenn Du eine Idee hast, dann setz' das doch mal um und wenn Probleme auftauchen, dann frag'. Zum Thema "offline" hab' ich Dir ja schon geantwortet.
mutetella
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 12:52
von A1245x
Code: Alles auswählen
lt2 = time.localtime()
lt = lt2[1:2]
K = 30
#Und hier fängt mein Problem an:
if lt > 30:
K + 1
print(K)
print("Schließen:Eingabe")
input()
else:
print(K)
print("Schließen:Eingabe")
input()
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 12:54
von cofi
mutetella hat geschrieben:A1245x hat geschrieben:Dein Code funktioniert, ...
Cofi's Code funktioniert auch...
Ja, wenn man das fehlende `self.` ergaenzt und den Tippfehler korrigiert ..
@A1245x: Wenn "offline" beeinhaltet, dass sich das Programm schliesst, musst du eben dafuer sorgen, dass du die Startzeit ausserhalb, zB in einer Datei, speicherst.
Bei meinem Code gibt es den `start_time` Parameter um einen anderen Startwert zu setzen und mutetellas Code laesst sich auch einfach entsprechend anpassen.
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 13:05
von mutetella
A1245x hat geschrieben:Und hier fängt mein Problem an
Ich glaube, Dein Problem fängt schon früher an...
Du bindest `lt2` an ein `struct_time` object der aktuellen Zeit und `lt` an ein tuple, das als einzigen Wert die Zahl des aktuellen Monats enthält. Was möchtest Du also mit ``if lt > 30`` erreichen und sollte diese Bedingung zutreffen, was soll ``K + 1`` bewirken?
mutetella
P.S. Und bitte setze Deine Codebeispiele in die dafür vorgesehen Codetags, damit erleichterst Du das Lesen ungemein...
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 15:58
von A1245x
Ok, Jetzt mal die Sachen beiseite:
Kann ich mit den if Befehl es so machen, sodass am Ende des monats bzw. Jeden Tag die Zahl K mit 1 addiert wird?
Wenn ja, wie?
Ich will den Code in vielen Programmen einprogrammieren, also soll K hier eigentlich (noch) nichts bewirken.
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 16:09
von BlackJack
@A1245x: Das geht mit den „Sachen” die Du gerne beiseite lassen möchtest. Und da ist bei beiden Lösungen kein ``if`` dabei gewesen. Mit einem einfachen ``if`` und einem ``+ 1`` wäre es alleine ja auch nicht getan, denn dann hätte man ja immer den Wert K oder den Wert K + 1. Die sinnvolle Vorgehensweise, die ja auch von beiden gezeigten Lösungen umgesetzt wurde, ist einen Nullpunkt bestimmen, und dann auszurechnen wie viele Intervalle, also zum Beispiel Tage, man von diesem Nullpunkt entfernt ist, und das dann auf K drauf addieren. Eigentlich relativ einfache Mathematik, und mit dem `datetime`-Modul hat man auch einfache Möglichkeiten mit Datums- und Zeitangaben zu rechnen.
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 16:13
von mutetella
@A1245x
Ja, das ``if``-Statement könnte Dir dabei helfen. Aber ich glaube, Du solltest jetzt einfach mal die beiden Lösungen genau anschauen und verstehen. Du versuchst, Dich irgendwie zu einer irgendwie funktionierenden Lösung durchzuhangeln. Du hast bereits definiert, was Du erreichen möchtest und dazu zwei Lösungen erhalten. Aufbauend darauf solltest Du weitermachen und wenn Du etwas konkret nicht verstehst, wird Dir das hier bestimmt gerne erklärt werden.
mutetella
Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 16:21
von snafu
@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...

Re: jede Stunde soll die Zahl größer werden
Verfasst: Samstag 12. April 2014, 16:27
von A1245x
Ok, Vielen Dank.
Das mit der Signatur werd ich mal ignorieren.
Re: jede Stunde soll die Zahl größer werden
Verfasst: Sonntag 13. April 2014, 08:09
von A1245x
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?
Re: jede Stunde soll die Zahl größer werden
Verfasst: Sonntag 13. April 2014, 08:25
von 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.
Re: jede Stunde soll die Zahl größer werden
Verfasst: Sonntag 13. April 2014, 08:41
von Sirius3
@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()