Mein erstes kleines Programm...

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.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

EyDu hat geschrieben:Und nun denkst du noch einmal über die Sinnhaftigkeit der for-Schleife in deinem letzten Beitrag nach. Du hast schon wieder so lange geändert, bis es irgendwie funktioniert hat. Du musst schon verstehen, *warum* das so funktioniert und was an der Schleife falsch ist.
Hallo EyDu, danke für den Hinweis.

Code: Alles auswählen

def zeichen_umwandeln(str_zahlen):
     zeichen_ersetzt = [float(eintraege.replace(',', '.')) for eintraege in str_zahlen]
     for gleitkommazahl in zeichen_ersetzt: # Falscher Fehler:-)
          return zeichen_ersetzt
Ich habe hier zwei Mal die For-Schleife angewendet, was natürlich unsinnig ist. Ich habe die zweite Zeile gänzlich missachtet. :-)
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Sophus hat geschrieben:Wie ist es möglich alle Einträge zu bekommen?
Wenn man doch nur alle Einträge in eine Datenstruktur packen könnte, zB. eine Liste, und dann diese Liste zurückgeben könnte...
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Also, Python scheint mit den importierten Modulen ein Problem zu haben.

Code: Alles auswählen

# -*- coding: utf-8 -*-
import sys
import Bestandteile.Beschaffungskalkulation_Vorwaerts
[...]
def main():
    print "=================== Programmauswahl ======================="
    print ""
    menu = [
        ["Beschaffungskalkulation(Vorwaerts)", Bestandteile.Beschaffungskalkulation_Vorwaerts.BKV],
        ["Beschaffungskalkulation(Rueckwaerts)", BKVR],
        ["Differenzkalkulation", DK],
        ["Absatzkalkulation", AK],
        ["Beenden", quit]
    ]
    
    handle_menu(menu)


if __name__ == "__main__":
    main()
Wir sehen oben im Import, dass das Modul Beschaffungskalkulation_Vorwaerts aus dem Ordner Bestandteile importiert wird. Soweit alles in Ordnung. Wenn ich mir aber Zeile 9 ansehe, könnte ich kreischen. Wieso muss man jedesmal den kompletten Pfad mit angeben, genauso wie im Import? Man stelle sich vor, die Verzeichnis-Struktur wäre noch verzwickter. Dann würde man ja allein für die Pfad-Angabe beschäftigt sein. In PHP ist es wesentlich erträglicher. Sobald eine Datei inkludiert wurde, kann man mit den Variablen und Funktionen aus den anderen Dateien arbeiten. Ich hatte auch die Idee, den Import-Pfad in eine Konstante zu verlegen, so dass ich dann mit der Konstante arbeiten kann. Aber soweit ich informiert bin, gibt es in Python nicht ohne weiteres eine Konstante, bzw. kann man eine Variable nicht in eine Konstante deklarieren. Gibt es Mittel und Wege den Rattenschwanz zu verkürzen?
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sophus hat geschrieben:Gibt es Mittel und Wege den Rattenschwanz zu verkürzen?

Code: Alles auswählen

from Bestandteile.Beschaffungskalkulation_Vorwaerts import BKV
Wenn alles geklappt hat, ist anschließend der Name `BKV` im globalen Namensraum des importierenden Moduls verfügbar.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sophus hat geschrieben:Ich hatte auch die Idee, den Import-Pfad in eine Konstante zu verlegen, so dass ich dann mit der Konstante arbeiten kann. Aber soweit ich informiert bin, gibt es in Python nicht ohne weiteres eine Konstante, bzw. kann man eine Variable nicht in eine Konstante deklarieren.
Konstanten und Variablen sind in Python rein über Konventionen bei der Benennung geregelt. Seitens der Sprache gibt es da keine Unterstützung. Mir persönlich macht das auch nichts aus.

Aliase für verschachtelte Namensräume kann man aber genau so gut als Variable anlegen. Falls es sich dabei um Module handelt, sollte man jedoch lieber den von mir bereits gezeigten Weg über die "from ... import ..."-Anweisung gehen.

Übrigens: Falls man ein paar Sachen, von denen man glaubt, dass sie die meistgenutzten Objekte sein werden, für so eine Art "Simple API" freigeben möchte, dann kann man auch ein gesondertes Modul erstellen, welches für die nötigen "from-Importe" sorgt, damit das Leben für den Anwender durch solche Abkürzungen erleichtert wird. Dann muss man sich nur noch mit der tatsächlichen Package-Struktur beschäftigen, wenn man sehr spezielle Anpassungen oder Erweiterungen vornehmen möchte.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Sophus hat geschrieben:Entschuldigt, wenn ich keine englischen Begriffe verwende. [...] Solange es nicht nötig ist, englisch zu sprechen bzw. zu schreiben, kommuniziere ich auch in meiner Muttersprache.
Ich (ebenfalls Hobbyprogrammierer) hatte anfangs auch gehofft, ohne diese ganzen englischen (Fach-)Begriffe durchzukommen, weil ich programmieren und nicht Englisch lernen wollte. Den Zahn musste ich mir aber sehr bald ziehen. Es macht einfach in aller Regel keinen Sinn, bei der Namensgebung auf deutsche Begriffe zu beharren.

Bestes Beispiel ist doch das `prompt` Argument meiner `float_input` Funktion. Ich habe den Eindruck, Du hast letztlich nicht verstanden, was hinter diesem Argument steckt, weil Dir der Begriff 'prompt' (noch) nicht so richtig geläufig ist. Jetzt hast Du 2 Möglichkeiten:
  1. Du verwendest ebenfalls in Zukunft den Begriff 'prompt'. Somit weiß jeder Programmierer dieser Welt, was Du damit meinst, Missverständnisse entstehen erst gar nicht, Du kommst schneller ans Ziel.
  2. Du beharrst auf Deine Muttersprache und verwendest sowas wie 'eingabeaufforderungstext' und kürzst diesen womöglich noch in 'eat' ab, weil auch einfache Dinge in Deutsch oftmals sehr sperrig zu beschreiben sind. Somit werden andere Programmierer nach kurzer Zeit schon keine Lust mehr haben, sich durch Deinen unnötigerweise verkomplizierten Code durchzuarbeiten.
Glaub' einem wie mir, der ständig auf 'dict.cc', 'linguee.de' oder 'leo.org' rumhängt, um nach passenden englischen Namen für sein Zeugs zu suchen... :)

Mir macht es richtig Spaß, Python zu lernen. Mir macht es keinen Spaß, Englisch zu lernen. Aber beides gehört unweigerlich zusammen.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@pillmuncher: Weil das ein wenig unterging: Sehr schöner Beitrag! :)

(Daraus sollte man mal ein Tutorial machen... 8) )
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hyperion hat geschrieben:Daraus sollte man mal ein Tutorial machen...
Ich bitte darum... :)

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

mutetella hat geschrieben:
Sophus hat geschrieben:Entschuldigt, wenn ich keine englischen Begriffe verwende. [...] Solange es nicht nötig ist, englisch zu sprechen bzw. zu schreiben, kommuniziere ich auch in meiner Muttersprache.
Ich (ebenfalls Hobbyprogrammierer) hatte anfangs auch gehofft, ohne diese ganzen englischen (Fach-)Begriffe durchzukommen, weil ich programmieren und nicht Englisch lernen wollte. Den Zahn musste ich mir aber sehr bald ziehen. Es macht einfach in aller Regel keinen Sinn, bei der Namensgebung auf deutsche Begriffe zu beharren.

Bestes Beispiel ist doch das `prompt` Argument meiner `float_input` Funktion. Ich habe den Eindruck, Du hast letztlich nicht verstanden, was hinter diesem Argument steckt, weil Dir der Begriff 'prompt' (noch) nicht so richtig geläufig ist. Jetzt hast Du 2 Möglichkeiten:
  1. Du verwendest ebenfalls in Zukunft den Begriff 'prompt'. Somit weiß jeder Programmierer dieser Welt, was Du damit meinst, Missverständnisse entstehen erst gar nicht, Du kommst schneller ans Ziel.
  2. Du beharrst auf Deine Muttersprache und verwendest sowas wie 'eingabeaufforderungstext' und kürzst diesen womöglich noch in 'eat' ab, weil auch einfache Dinge in Deutsch oftmals sehr sperrig zu beschreiben sind. Somit werden andere Programmierer nach kurzer Zeit schon keine Lust mehr haben, sich durch Deinen unnötigerweise verkomplizierten Code durchzuarbeiten.
Glaub' einem wie mir, der ständig auf 'dict.cc', 'linguee.de' oder 'leo.org' rumhängt, um nach passenden englischen Namen für sein Zeugs zu suchen... :)

Mir macht es richtig Spaß, Python zu lernen. Mir macht es keinen Spaß, Englisch zu lernen. Aber beides gehört unweigerlich zusammen.

mutetella
Hallo mutetella,

meinst du jetzt, dass ich nicht weiß was "prompt" heißt oder meinst du eher, dass ich nicht weiß, dass "prompt" in deiner float_input-Funktion als ein Argument/Parameter diente, und das an Stelle von "prompt" hätte auch ein anderes Wort stehen können? Ich bin zwar kein Profil, aber auch in VB6 verfährt man auf diesem gleichen Weg, um Werte von einem Ort aus an die Funktion zu übergeben, um so später einen Wert zurück zu bekommen. Oder was ist so "magisch" an das Wörtchen "prompt"? Dann erkläre es mir doch mal bitte :-)

Und allgemein: Ich weiß, dass in der Informatik englisch DIE Sprache ist. Ich bin ja selbst ausgebildeter Informatikkaufmann. Aber kein Informatiker mehr, da ich nun was ganz anderes studiere. Aber in meiner Freizeit programmiere ich hin und wieder gerne in Python und in meiner gewohnten Sprache VB6. Das ich mir die englischen Befehle ins Hirn einbrennen muss, daran führt kein Weg vorbei. Oder wenn ich für bestimmte Fälle englische Texte lesen muss, wenn ich ein Problem lösen muss, kann ich auch verstehen. Jedoch bin ich der Meinung, dass man durchaus mit der deutschen Sprache sehr weit kommt. Ich kommentiere zum Beispiel in VB6 sehr oft, damit klar wird, was gemacht werden soll. Aber ich muss jetzt nicht für das Wort "Prozent" oder "Geld" etc. nun englische Wörter suchen - wobei das noch in diesem Fall einfache Wörter sind. Tut mir leid, wenn ich deine Ansicht nicht teile.
BlackJack

@Sophus: Also ich hatte die starke Vermutung Du weisst nicht was `prompt` bedeutet, denn sonst hättest Du für dieses Argument nicht `Zahl`, also den Wert '100,00', an `raw_input()` übergeben und Dich gewundert dass im weiteren Verlauf dieser Wert nicht mehr im Spiel war.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Sophus
Es hat für mich so ausgesehen, als hättest Du die Funktionsweise von `float_input` nicht verstanden, weil Du hinter dem Argument `prompt` etwas anderes vermutet hast, als es tatsächlich war. Hat zumindest so ausgesehen, nachdem Du mit `prompt` Dinge veranstaltet hast, die man mit einem simplen Prompt eigentlich nicht macht. :wink:

Wie auch immer, ich wollte an diesem Beispiel nur aufzeigen, dass man sich meist leichter tut, wenn man sich an Namenskonventionen hält. Ob man diese nun gut oder nicht gut findet ist der Welt da draußen ziemlich egal. :wink:

Aber wie meine Frau gerne zu sagen pflegt: "Isch ja jetzt au Wurschd..." :)

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

BlackJack hat geschrieben:@Sophus: Also ich hatte die starke Vermutung Du weisst nicht was `prompt` bedeutet, denn sonst hättest Du für dieses Argument nicht `Zahl`, also den Wert '100,00', an `raw_input()` übergeben und Dich gewundert dass im weiteren Verlauf dieser Wert nicht mehr im Spiel war.
Bedauerlicherweise ist "prompt" mittlerweile eingedeutscht. Aber letztendlich kann man für das Argument jedes beliebige Wort verwenden, da kommt es nicht auf "prompt" an. Wie gesagt, ich trenne Sprachen wo es nur geht. Darüber diskutiere ich auch nicht :-) Nicht das ich andere Sprache vermeide oder für unnütz halte. Ich sage mir, entweder komplett deutsch oder komplett englisch. Aber wir sind in einem deutschen Forum, wieso also englisch? Mein Bruder ist Deutscher und Amerikaner. Wir reden auch nicht englisch miteinander, nur weil englisch "schneller" und prägnanter ist, und man vieles kürzer zum Ausdruck bringen kann :-)
Zuletzt geändert von Sophus am Freitag 27. Februar 2015, 16:23, insgesamt 1-mal geändert.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

mutetella hat geschrieben:@Sophus
Es hat für mich so ausgesehen, als hättest Du die Funktionsweise von `float_input` nicht verstanden, weil Du hinter dem Argument `prompt` etwas anderes vermutet hast, als es tatsächlich war. Hat zumindest so ausgesehen, nachdem Du mit `prompt` Dinge veranstaltet hast, die man mit einem simplen Prompt eigentlich nicht macht. :wink:

Wie auch immer, ich wollte an diesem Beispiel nur aufzeigen, dass man sich meist leichter tut, wenn man sich an Namenskonventionen hält. Ob man diese nun gut oder nicht gut findet ist der Welt da draußen ziemlich egal. :wink:

Aber wie meine Frau gerne zu sagen pflegt: "Isch ja jetzt au Wurschd..." :)

mutetella
Ich hatte tatsächlich einige Probleme mit der Funktion. Aber mir war durchaus klar, dass meine Variable "Zahl" bei deiner Funktion im Argument "prompt" landet, und dieses Argument von der Funktion dann genommen wird. Aber deine Frau hat völlig Recht :-)
BlackJack

@Sophus: Man kann für das Argument nicht jedes beliebige Wort nehmen. „Käsekuchen” nicht, „Zahl” nicht, und auch nicht jedes beliebige englische Wort. Es muss schon eines sein was die Bedeutung des Arguments wiederspiegelt.

Komplett Deutsch geht ja schon deswegen nicht weil sowohl die Schlüsselworte der Programmiersprache als auch alle Bezeichner aus der Standardbibliothek auf Englisch sind. Genau so wie jede auch nur im Ansatz nennenswerte Bibliothek von Drittanbietern (und auch alle nicht Nennenswerten). Wenn Du also kein Gemisch von zwei Sprachen haben möchtest, dann müsstest Du konsequenterweise Englisch bei Quelltexten verwenden. Hah! :-D

Wir sind hier in einem deutschsprachigen Forum, und die Beiträge sind fast immer in Deutsch verfasst, aber Programme sind kein Prosatext sondern eine Fachsprache. Genau wie sich Mathematiker und Physiker international für viele Grössen und Platzhalter auf Standardbezeichner geeinigt haben, ist das bei Programmierern genau so und eben Englisch. Geh mal in ein deutschsprachiges Mathematiker-Forum und beharre darauf in Formeln und Diskussionen keine griechischen Symbole mehr zu verwenden weil die nicht Deutsch sind. ;-)

In gesprochener oder auch als Fliesstext niedergeschriebener Sprache kommt es nicht so sehr auf die Wortlänge an. Bei Programmen dagegen schon, denn egal welche natürliche Sprache man für die Bezeichner verwendet, die Länge hat Auswirkungen darauf wie gut man einen Quelltext lesen/erfassen kann, weil auch sehr kurze Symbole wie Operatoren eine entscheidene Bedeutung haben, und die nicht in superlangen und sperrigen Bezeichnern ”untergehen” dürfen. Und gerade Deutsch, mit dem Hang zu zusammengesetzten Begriffen, ist meiner Meinung nach keine besonders gut geeignete Sprache für aussagekräftige aber trotzdem nicht zu lange Bezeichner.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Sophus hat geschrieben:Aber letztendlich kann man für das Argument jedes beliebige Wort verwenden, da kommt es nicht auf "prompt" an.
Eben nicht. In der ursprünglichen Version von mutetella hatte das Wort "prompt" eine ganz bestimmte Bedeutung, so dass jeder, der mit diesem Begriff vertraut ist und nur die Parameterdefinition von float_input liest, weiß, was er als Argument übergeben muß und was damit passiert. In Deiner Version von float_input widersprach sich der Name des Arguments mit dem, was dann tatsächlich in der Funktion damit gemacht wurde. Das sorgt für ebenso große Verwirrung, wie im ersten Fall die Namensgebung für Klarheit gesorgt hat. Ich kann zwar alles Currywurst nennen, aber dann ist die Currywurst einer Currywurst nicht mehr zu vercurrywursten.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Code: Alles auswählen

def get_greeting_for(tanga):
    return "Hallo, {}".format(tanga)
Also hier ist ja so was von klar, was da übergeben werden muss! :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Sirius3 hat geschrieben:
Sophus hat geschrieben:Aber letztendlich kann man für das Argument jedes beliebige Wort verwenden, da kommt es nicht auf "prompt" an.
Eben nicht. In der ursprünglichen Version von mutetella hatte das Wort "prompt" eine ganz bestimmte Bedeutung, so dass jeder, der mit diesem Begriff vertraut ist und nur die Parameterdefinition von float_input liest, weiß, was er als Argument übergeben muß und was damit passiert. In Deiner Version von float_input widersprach sich der Name des Arguments mit dem, was dann tatsächlich in der Funktion damit gemacht wurde. Das sorgt für ebenso große Verwirrung, wie im ersten Fall die Namensgebung für Klarheit gesorgt hat. Ich kann zwar alles Currywurst nennen, aber dann ist die Currywurst einer Currywurst nicht mehr zu vercurrywursten.

Code: Alles auswählen

def zeichen_umwandeln(str_zahlen):
     zeichen_ersetzt = [float(eintraege.replace(',', '.')) for eintraege in str_zahlen]
          return zeichen_ersetzt
Jetzt lese ich mal meine Version. Ich sehe eine Funktion, die zeichen_umwandeln heißt. Ich weiß also schon mal, dass hier Zeichen umgewandelt werden. Welche Zeichen das sind, ist für mich erst einmal unwichtig. Ich sehe im Argument/Parameter, das dort ein String in Form von Zahlen übergeben wird. Gut, ich soll diese Notation str nicht mehr benutzen. Nun sehe ich das Objekt zeichen_ersetzt. Ich weiß also, dass hier Zeichen nach dem Durchlauf ersetzt wurden, und die Zahlen, mit den ersetzten Zeichen in der Variable zeichen_ersetzt gespeichert sind. Innerhalb von zeichen_ersetzt sehe ich, dass eintraege eingelesen werden, und bestimmte Zeichen ersetzt werden. Das verrät mir replace. Einträge findet man oftmals in Form von Listen. Die eintraege werden durch die For-Schleife geschickt. Es werden also so viele und solange eintraege eingelesen, bis die For-Schleife fertig ist. Und die ersetzten Zeichen werden am Ende zurückgegeben und die Funktion ist fertig.

Was die Notation str betrifft: Ich verstehe nicht, was daran "falsch" sei? Ich komme aus der kompilierten Sprachen-Welt, also aus VB6. Dort wird einem von Grund auf beigebracht, dass man Variablen zu einem bestimmten Typ zu deklarieren hat (typesafe). Das heißt, mir muss im Vorfeld klar sein, was ich mit dieser Variable anstellen will. Soll die Variable als Integer, String, Single, Long etc. fungieren? Wenn ich mir nicht sicher bin, wird die Variable zu Variant deklariert. Da kann man dann so ziemlich alles reinspeichern. Vor diesem Hintergrund weiß ich also, was ich mit meiner Variable in Python anstellen will. Wieso ist es also "verwerflich" die Notation str voranzustellen? Sicher, wenn man hinterher alles umstellen muss, weil man die Variable anders benutzen will. Dann muss man sich eben im Vorfeld sicher sein, was man will. So ist es auch in VB6. Ich kann am Ende meines Projektes nicht sagen "Oh, Variable X möchte ich doch nicht mehr als String, sondern als Integer". Da wird man eben dazu angehalten durchdachter zu programmieren, damit man gar nicht erst in diese Verlegenheit kommt.

Ich brauche also kein "prompt" worauf sich hier viele festhalten, als sei das ein ultimatives Schlagwort schlechthin, wie das Symbol eines Herzens, das für Liebe/Frieden steht :-) Ich will mich nicht stur stellen, nur wird mir nicht klar, was meine Version so verwirrend sein kann?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sophus: ich muß mich entschuldigen, was ich auf den langen Thread schiebe. Du hast als Argument das Wort "Zahl" benutzt, nur der Funktionsname "float_input" war verwirrend, weil die Funktion nichts eingelesen hat. Bei Deinem Beispiel ist "str_zahlen" ein Plural, deutet also darauf hin, dass eine Liste von Zahlen bzw. Zahlstrings erwartet wird. In der Vorschleife wird jedoch "eintraege" verwendet, wo sich jeder fragt, was soll sonst in einer Liste sein, außer ein Eintrag, das Wort hat also null Informationsgehalt. Und zweitens wundert man sich, warum das denn Plural ist, ist das also eine Liste von Listen mit Einträgen? Du hast übrigens ein schönes Beispiel, warum Deutsch manchmal problematisch ist, "zeichen_umwandeln" meint jetzt ein Zeichen oder viele Zeichen? Und in was wird umgewandelt?
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Sirius3 hat geschrieben:@Sophus: ich muß mich entschuldigen, was ich auf den langen Thread schiebe. Du hast als Argument das Wort "Zahl" benutzt, nur der Funktionsname "float_input" war verwirrend, weil die Funktion nichts eingelesen hat. Bei Deinem Beispiel ist "str_zahlen" ein Plural, deutet also darauf hin, dass eine Liste von Zahlen bzw. Zahlstrings erwartet wird. In der Vorschleife wird jedoch "eintraege" verwendet, wo sich jeder fragt, was soll sonst in einer Liste sein, außer ein Eintrag, das Wort hat also null Informationsgehalt. Und zweitens wundert man sich, warum das denn Plural ist, ist das also eine Liste von Listen mit Einträgen? Du hast übrigens ein schönes Beispiel, warum Deutsch manchmal problematisch ist, "zeichen_umwandeln" meint jetzt ein Zeichen oder viele Zeichen? Und in was wird umgewandelt?
Den Namen Einträge nahm ich, weil ich nicht wusste, was ich sonst nehmen soll. Also dachte ich mir "nimm doch Einträge, denn es soll ja sämtliche Einträge einer Liste eingelesen werden." Wie du ja schon sagtest, handelt es sich hierbei um eine Liste, und eine Liste hat nun mal mindestens einen Eintrag, aber in der Regel mehrere Einträge. Und das Zeichen umgewandelt werden, soll als erste Information reichen, denn alles weitere verrät der replace. Ich muss ja nicht alles wiederholen, was im weiteren Verlauf sowieso verraten wird. Du siehst also, dass replace bestimmte Zeichen ersetzt. Damit wäre deine Frage beantwortet. Und ob das Wort "Zeichen" Plural oder Singular ist, könnte man daran erkennen, dass es sich hierbei um eine Liste handelt. Wenn man also wie folgt kombiniert: Einträge --> Liste = viele Zeichen.
BlackJack

@Sophus: Python ist eben nicht statisch typisiert und der Datentyp ist nicht für den Namen festgelegt sondern für den Wert. Natürlich kann man in vielen Fällen statt `str` nicht `int` verwenden, aber in sehr vielen Fällen zum Beispiel `unicode`, oder `UserString`, oder `NavigatableString` vom `BeautifulSoup`-Parser, oder… eben nicht nur `str` sondern alle Typen die sich entsprechend verhalten. Das ist zum Beispiel bei vielen Containertypen so, wenn eine Funktion nur einen bestimmten Aspekt verwendet, der von verschiedenen Typen bedient wird. Darum macht es keinen Sinn im Namen *einen* konkreten Typ (z.B. `*_list`) statt eines „duck types” (`*_iterable`) zu verwenden, oder halt gar keinen Typ sondern einfach die *Bedeutung* des Wertes.

Ansonsten empfinde ich Deine Beiträge gerade zunehmend verwirrend. Du siehst an `str_zahlen` das dort ein „String in Form von Zahlen” übergeben wird? (Warum bitte an der Stelle nicht das Deutsche Wort „Zeichenkette”? :-P) Ähm, da wird keine Zeichenkette erwartet sondern etwas Iterierbares das Zeichenketten mit Zahlendarstellungen liefert. Beziehungsweise Elemente enthält die eine `replace()`-Methode haben, die dann etwas liefert was auf `float()` entsprechend reagiert. `PyQt4.QtCore.QString`-Objekte gehen da genau so wie `unicode`-Objekte, oder was auch immer man sonst vorliegen hat oder selber programmiert und was sich entsprechend verhält. In Python ist was die statische Code-Analyse angeht in VB-Typen ausgedrückt alles ``Variant``, oder eben in Python `object`. Ausser `object`, das ist vom Typ `type` und `type` selbst ist vom Typ `type`. :-)

Und `eintraege` ist grosser Quatsch. An diesen Namen ist immer genau *ein* Eintrag aus dem Iterierbaren Objekt nach dem ``in`` von der ``for``-Anweisung gebunden. Zu keinem Zeitpunkt mehr als ein Eintrag und schon gar nicht alle. Mehrzahl mach an der Stelle nur Sinn wenn die Elemente aus dem iterierbaren Objekt selber von einem Containertyp sind und der dann auch als solcher im Schleifenköper verwendet wird.

`zeichen_ersetzt` ist auch Unsinn. In der Liste sind nicht Objekte enthalten bei denen Zeichen ersetzt wurden, sondern Gleitkommazahlen vom Typ `float`. *Das* erzwingt die CPython-Implementierung sogar. Zumal es überflüssig ist das Zwischenergebnis an einen Namen zu binden.
Antworten