suche Ausgabe: int(List[index_of_character_*])

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.
Sirius3
User
Beiträge: 17759
Registriert: Sonntag 21. Oktober 2012, 17:20

@rogerb: man muß nicht alles in eine List-Comprehension packen, das ist nur dann sinnvoll, wenn es sich wirklich um einfache Ausdrücke handelt.
Du packst aber den vorhergehende und die nachfolgende Zeile zusammen mit einem Index in einen Ausdruck, wo eine einfache for-Schleife reichen würde.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Sirius3,
ja die Lesbarkeit bei dieser list comprehension, stößt vielleicht schon an die Grenze. Ich persönlich arbeite sehr viel mit ...-comprehensions. Daher währe das mein erster Ansatz.
Aber es ist dann auch irgendwo Geschmacksache.

Wenn es gute Argumente für eine extra Klasse gibt, lasse ich mich gerne überzeugen. Bisher sehe ich die halt nicht.

Es ging mir hier auch nicht darum irgend eine Lösung abzuliefern, sondern eher um die Argumente für die eine oder die andere Methode.
GabrielleChanel
User
Beiträge: 42
Registriert: Dienstag 13. April 2021, 11:54

@__blackjack__ @Sirius3 @rogerb Vielen Dank euch dreien für die weiteren Inputs :) Und ja die Anweisungen im Programm sind viel länger als nur eine Zeile.
Zu deinem Kommentar @__blackjack__ ist es nun besser das "Parsen des Rezeptteile" vor dem __init__() zu machen (also so wie unten im Pseudocode)? Ich komme noch nicht ganz draus, was dann aus der __init__ Methode wird. Fällt sie weg oder was kommt da rein, dann? Also so stelle ich es mir nun vor:

Code: Alles auswählen

class...
    #part1 = des geparsten Rezepts
    #part2  = des geparste Rezepts
    #...
    def __init__(self):
        #? was kommt dann noch im init? Nichts mehr?
    def __iter__(self):
        #Inhalt: siehe vorherige Nachrichten
    def andere_funktionen(self):
        #...

def main():
    ...
    iter(a_receipe_name)
    ...
Und ja genau so sieht ein "verkürztes" example recipe aus, nur enthält sie noch weitere Zeilen wie beispielsweise eine Zeile Titel, eine Zeile Originaltitel, usw. und die hier 2. und 3. Zeile an Zutaten können beliebig viele sein. Die hier letzte Zeile, also Zeile 4, besteht wiederum aus mehreren beliebig vielen Anweisungen (hier auch nur eine Zeile zur Vereinfachung).
EXAMPLE_RECIPE = """\
Preparation time: 1 hour
*\t5\t\tcarrots
*\t1\tpinches\tsalt
Bake for 40 minutes.
"""
"Those who can imagine anything, can create the impossible." Alan Turing
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Also, wenn die __init__() leer ist, frage ich mich, warum du nicht einen generator verwendest. Was spricht dann noch für eine Klasse?

Wahlweise (sorry, muss ich einfach nochmal sagen) könnte man die Zeilen nach all den verschiedenen Kategorien wie Titel, Originaltitel, usw in einen dictionary vorsortieren.
Sirius3
User
Beiträge: 17759
Registriert: Sonntag 21. Oktober 2012, 17:20

@GabrielleChanel: __blackjack__ braucht kein __init__, weil er das attrs-Paket benutzt.
attrs erzeugt automatisch ein __init__, das so aussehen würde:

Code: Alles auswählen

class Recipe:
    def __init__(self, preparation_time, ingredients, instructions):
        self.preparation_time = preparation_time
        self.ingredients = ingredients
        self.instructions = instructions

    def iter_instructions(self):
        return iter(self.instructions)
GabrielleChanel
User
Beiträge: 42
Registriert: Dienstag 13. April 2021, 11:54

@Sirius3 Vielen herzlichen Dank, das wusste ich nicht mit den attr(), die selbst schon ein __init__() aufrufen. Stimmt, dann kann man diese ja weglassen, statt nochmals aufzuschreiben. Jetzt gibt alles Sinn, vielen Dank :)
"Those who can imagine anything, can create the impossible." Alan Turing
Antworten