1 Zeile, mehrere Eingaben

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
MightyMike
User
Beiträge: 2
Registriert: Samstag 19. November 2011, 17:56

Guten Abend,
ich hab mir gerade ein kleines Script geschrieben mit dem ich Zeiten subtrahieren kann (Code weiter unten).
Nun wollte ich wissen ob es möglich ist mehrere eingaben/inputs auf einer Zeile zu machen bzw. nach jeder Bestätigung (Enter) kommt die nächste Eingabe nicht eine Zeile weiter unten (wie bei meinem Beispiel) sondern gleich nach der letzten Eingabe auf derselben Seite.
D.h. ich würde den Code so gestalten
erste Zeile:

Code: Alles auswählen

a=input("Eingabe erste Zeit: ")
b=input(":")
c=input(":")
Zweite Zeile:

Code: Alles auswählen

d=input("Eingabe zweite Zeit: ")
e=input(":")
f=input(":")
Die Ausgabe würde Dann so aussehen:
Eingabe erste Zeit: 15:22:13
Eingabe zweite Zeit: 10:34:56

Code: Alles auswählen

a=input("Stunde:")
b=input("Minute:")
c=input("Sekunde:")
d=input("Stunde:")
e=input("Minute:")
f=input("Sekunde:")

a = (a*3600-d*3600) /3600
b = (b*60-e*60) /60
if (b<0):
    a = a-1
    b = b+60
c = c - f
if (c<0):
    b = b-1
    c = c+60
if (b<0):
    a = a-1
    b = b+60

print a,":",b,":",c
Danke im Voraus
Gruss Mike
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo,

mit Python-Boardmitteln geht das nicht. Nachdem ich diese Möglichkeit auch vermisse, arbeite ich momentan an einem Modul, das genau sowas ermöglicht.

Ich denke mal, in 1 - 2 Wochen werde ich mal ein erstes Ergebnis posten.

Vielleicht hilft Dir das dann ja auch weiter...

Gruß
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@MightyMike: Du könntest den Benutzer auch die komplette Zeit mit den Doppelpunkten eingeben lassen.

`input()` solltest Du nicht verwenden, weil da nahezu beliebiger Quelltext vom Benutzer ausgeführt werden kann. Neben der Sicherheitslücke lassen sich Fehleingaben schlecht behandeln, weil wirklich *jede* Ausnahme möglich ist. Also besser `raw_input()` und die eingegebene Zeichenkette dann gezielt in den geünschten Datentyp umwandeln.

Über die Berechung von `a` und `b` nach der Eingabe denkst Du vielleicht noch einmal nach. Schreib Dir das mal als Formel auf ein Blatt Papier und kürze den Bruch mal bitte.

Zum Rechnen mit Zeiten (und auch Datumsangaben) bietet die Standardbibliothek übrigens das `datetime`-Modul.

@mutetella: Ist das was Du entwickelst auch plattformunabhängig? Vielleicht kann MightyMike am Ende damit gar nichts anfangen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn es speziell um diese Zeizteingabe geht, dann kannst du auch die Zeit komplett auf einer Zeile eingeben (aber mit raw_input) und dann die Eingabe per split trennen. Also z.B.:

Code: Alles auswählen

#!c:/Python27

zeit1 = raw_input('Zeit 1:')
zeit1_liste = zeit1.split(':')
print zeit1_liste
Gruß, noisefloor

Edit: BlackJack war schneller...
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@BlackJack:
Im ersten Anlauf wohl noch nicht, aber wir wissen ja auch nicht, unter welchem OS MightyMike arbeitet...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

@MightyMike: Das geht natürlich auch einfacher mit dem datetime Modul.

Code: Alles auswählen

from datetime import datetime

t1 = raw_input()
t1 = datetime.strptime(t1, '%H:%M:%S')

t2 = raw_input()
t2 = datetime.strptime(t2, '%H:%M:%S')

print t2 - t1
Grüße
Gerrit
MightyMike
User
Beiträge: 2
Registriert: Samstag 19. November 2011, 17:56

@ gkuhl
Okay das löst natürlich alle Probleme :lol:

Trotzdem nochmal zu meinem Code
@ BlackJack
Peinlich, ka warum ich die Stunden und Minuten noch in Sekunden umwandeln wollte :roll:
Ich hatte zuerst auch raw_input, aber da hatte ich probleme weshalb ich nur noch input schrieb.
Es kan die Fehlermeldung:
Traceback (most recent call last):
File "C:/Python27/rechner.py", line 8, in <module>
a = (a*3600-d*3600) /3600
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Denke das hat was mit dem zu tun
und die eingegebene Zeichenkette dann gezielt in den geünschten Datentyp umwandeln.
Also wie wandle ich das in Zahlen um (denke mal es leigt daran?)

Gruss
Mike

P.S.
OS: Windows 7 64-bit
BlackJack

@MightyMike: Zeichenketten in Zahlen umwandeln geht mit `int()` oder `float()`, je nach dem welchen Typ Du haben möchtest.
Antworten