Variablen Methoden

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
erdfeuer@gmx.ch
User
Beiträge: 3
Registriert: Freitag 16. April 2021, 16:37

Hallo zusammen,

Ich lerne Python und beschäftige mich zur Zeit mit Variablen und Listen. Nun möchte ich gerne ein Programm schreiben, dass Zeit als Dezimalbruch in Stunden, Minuten und Sekunden umrechnet. Ich habe mich nun gefragt, ob es eine Möglichkeit gibt die Ziffern vor dem Komma zu definieren ohne vorher klar zu definieren wie gross der Input sein kann. Das Programm sollte in der Lage sein bei z.b. 22,56 oder 234, 345 oder 35943, 3453 die Ziffern vor dem Komma als Stunden zu erkennen. Ich möchte die Ziffern vor dem Komma als Stunden definieren und den Rest dann in Minuten und Sekunden umrechnen. Hat mir jemensch einen Tipp?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

wenn die Zahl wirklich im Format "123,456" vorliegt, also mit Komma, dann sollte das für Python ein String sein, weil ja bei Python (wie den allermeisten anderen Programmiersprachen auch) der Punkt . das Trennzeichen bei Zahlen vom Typ `float` ist.

Für String kennt Python die split-Methode, mir dem du den String an einem Zeichen (wie dem Komma) trennen kannst. Wenn du einen Float-Wert hast (also so was wie 123.456) dann kannst du die Zahl mittels der `modf` Methode aus dem `math` Modul zerlegen.

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei ja nur ein Komma in der Zeichenkette stehen sollte, da würde ich dann `partition()` statt `split()` verwenden.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
erdfeuer@gmx.ch
User
Beiträge: 3
Registriert: Freitag 16. April 2021, 16:37

ok, Besten Dank. Die rsplit-Methode scheint eine gute Lösung zu sein. Habe ich das richtig verstanden, mit dieser Methode teile ich einen String mit Punkt oder Komma in eine Liste mit 2 Elementen? Dies wiederum erlaubt mir meinen Code mit dem 2. Element Index1 weiterzuführen?

Liebe Grüsse
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Für Punkt oder Komma benutzt man, wie __blackjack__ schon geschrieben hat, partition.

Code: Alles auswählen

vor_komma, komma, nach_komma = text.partition(",")
Wenn beides möglich sein soll, brauchst du reguläre Ausdrücke, mit z.B. re.split.
Warum heißt dein zweites Element Index1?
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@erdfeuer@gmx.ch: `split()` und `rsplit()` ohne das `maxsplit`-Argument teilt eine Zeichenkette in Null bis mehrere Elemente, abhängig davon wie oft der angegebene Trenner in der Zeichenkette vorkommt und auch ob ein Trenner angegeben wurde.

Das hättest Du in der Dokumentation nachlesen und auch mal ausprobieren können:

Code: Alles auswählen

In [171]: "".split(",")                                                         
Out[171]: ['']

In [172]: "a".split(",")                                                        
Out[172]: ['a']

In [173]: "a,b".split(",")                                                      
Out[173]: ['a', 'b']

In [174]: "a,b,de".split(",")                                                   
Out[174]: ['a', 'b', 'de']

In [175]: "a,b,de, ef ,g".split(",")                                            
Out[175]: ['a', 'b', 'de', ' ef ', 'g']
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
erdfeuer@gmx.ch
User
Beiträge: 3
Registriert: Freitag 16. April 2021, 16:37

cool, besten Dank für die Infos. Ich habe bereits etwas experimentiert, war mir aber nicht sicher ob das so stimmt, deshalb die Frage. @Sirius3 dachte die Indexzählung beginnt bei 0. Wenn ich mein Programm hab, werde ich es euch vorführen :D
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@erdfeuer@gmx.ch: Ja die Indexzählung beginnt bei 0 aber man nummeriert keine Namen. Zudem ist das ja auch gar kein Index was du an den Namen `index1` bindest, sondern etwas das am Index 1 steht. Nur will das der Leser ja überhaupt gar nicht wissen. Der Name sollte dem Leser verraten was der Wert im Kontext des Programms bedeutet.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten