2016-10-02 3 views
-1

Ich habe vor kurzem mit der Arbeit an einem Python-Programm begonnen, wie im folgenden Fragment zu sehen ist.Python und time/datetime

# General Variables 
running = False 
new = True 
timeStart = 0.0 
timeElapsed = 0.0 

def endProg(): 
    curses.nocbreak() 
    stdscr.keypad(False) 
    curses.echo() 
    curses.endwin() 
    quit() 

# Draw 
def draw(): 
    stdscr.addstr(1, 1, ">", curses.color_pair(6)) 
    stdscr.border() 
    if running: 
     stdscr.addstr(1, 3, t.strftime("%H:%M.%S", t.ctime(timeStart - timeElapsed))) 

     stdscr.redrawwin() 
    stdscr.refresh() 

# Calculate 
def calc(): 
    if running: 
     timeElapsed = t.clock() - timeStart 

stdscr.border() 
stdscr.addstr(1, 3, t.strftime("%H:%M.%S", t.gmtime(t.clock() - t.clock()))) 

# Main Loop 
while True: 
    # Get Input 
    kInput = stdscr.getch() 

    # Close the program 
    if kInput == ord('q'): 
     endProg() 

    # Stop the current run 
    elif kInput == ord('s'): 
     stdscr.addstr(1, 3, t.strftime("%H:%M.%S", t.gmtime(t.clock() - t.clock()))) 
     running = False 
     new = True 

    # Start a run 
    elif kInput == ord(' ') and new: 
     running = not running 
     new = not new 
     timeStart = dt.datetime.now() 

    # Toggle the timer 
    elif kInput == ord('p') and not new: 
     timeStart = dt.datetime.now() - timeStart 
     running = not running 

    calc() 
    draw() 

Mein Programm ist ein bisschen zwischen Lösungen, die derzeit, sorry, wenn etwas nicht richtig aussehen. Ich werde mehr als glücklich sein zu erklären.

Ich habe die letzten paar Stunden damit verbracht, online über die time- und datetime-Module für Python zu lesen und herauszufinden, wie ich sie nutzen kann, um meine Ziele zu erreichen, aber ich habe versucht, sie zu implementieren .

Im Wesentlichen brauche ich mein Programm, um die verstrichene Zeit seit dem Drücken einer Taste zu messen und in der Lage zu sein, es im Format Stunde: Minute.sekunden anzuzeigen. Die Subtraktion hat es sehr schwierig gemacht, Dinge wie timedelta zu implementieren. Von dem, was ich online gelesen habe, gibt es keine Möglichkeit zu tun, was ich ohne das Datetime-Modul will, aber es gibt mir nur Probleme.

Gibt es eine einfachere Lösung, hat mein Code irgendwelche ausstehenden Fehler, und wie dumm bin ich?

+0

Sie können 'time.time' verwenden, um die verstrichene Zeit zu messen. –

Antwort

0

Mit'time.time`:

import time 

star = time.time() 
# run long processing... 
elapsed = time.time() - start 

Et voilà!

0
def draw(): 
    stdscr.border() 
    if running: 
     stdscr.addstr(1, 1, ">", curses.color_pair(8)) 
     stdscr.addstr(1, 3, t.strftime("%H:%M.%S", t.gmtime(timeElapsed))) 

    if not running: 
     stdscr.addstr(1, 1, ">", curses.color_pair(7)) 

    stdscr.redrawwin() 
    stdscr.refresh() 

# Calculate 
def calc(): 
    if running: 
     timeElapsed = t.time() - timeStart 

stdscr.border() 
stdscr.addstr(1, 3, t.strftime("%H:%M.%S", t.gmtime(t.time() - t.time()))) 

# Main Loop 
while True: 
    # Get Input 
    kInput = stdscr.getch() 

    # Close the program 
    if kInput == ord('q'): 
     endProg() 

    # Stop the current run 
    elif kInput == ord('s'): 
     running = False 
     new = True 

    # Start a run 
    elif kInput == ord(' ') and new: 
     running = not running 
     new = not new 
     timeStart = t.time() 

    # Toggle the timer 
    elif kInput == ord('p') and not new: 
     running = not running 
     timeStart = t.time() - timeStart 

    calc() 
    draw() 

Nun, ich schaffte es, alle Fehler loszuwerden, denen ich begegnete. Die angezeigte Zeit ist jedoch falsch.

Da wir nach der verstrichenen Zeit suchen, sollte sie bei 0 beginnen und zunehmen. Mein Programm beginnt um 12: 21.xx und steigt.

Mit Blick auf meinen Code sehe ich keine Fehler, aber da ist offensichtlich einer drin.