Variablen erzeugen


  • si tacuisses, philosophus mansisses

    hamyam ist vielleicht Mathematiker, seine Antwort war richtig aber unbrauchbar :)

    ich weiss von Python leider nichts.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Beschreib' mal genau, was du machen willst. Das ergibt so wenig Sinn und ist nicht wirklich pythonic. Gehen tut's, ja.
    jar: _leider_ muss nicht sein und lässt sich ändern ;)

    Edit: dass ich nicht auch als Mathematiker abgestempelt werde (aber schön ist das wie gesagt nicht! Es gibt bestimmt einen viel sinnvolleren Weg!):

    Code
    >>> a
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined
    >>> globals()['a'] = 1
    >>> a
    1
    >>>

    LG


  • for i = 1 to 5
    a=str(i)
    b%a = i
    next

    Erzeugte die Variablen b1,b2,b3 usw.

    Blöde Frage: Wieso sollte man sowas wollen?

    Mir ist keine Programmiersprache bekannt wo man solche Variablen haben wollen würde... Nicht nur das sowas "automatisiert" erzeugen zu lassen ein ziemlich dirty Vorgehen wäre, sondern auch für spätere Nutzung eher umständlich... "b1=1", "b2=2", "b3=3" usw erzeugen lassen ist doch Schwachsinn :s
    Wenn, dann nutzt mag sog. Arrays. Oder man benennt seine Variablen vernünftig ihrem Sinn und Zweck entsprechend - wenn man weiß dass man 5 Variablen benötigt, dann definiert man die eben selbst.

    Was willst Du machen?

  • Wieso wollt Ihr mir vorschreiben was ich brauche?
    Ihr solltet mal lieber überlegen wo der Trick liegt!

    Der Trick ist a%b
    gleich a1
    Diese Variablen Zuweisung!

    Nun habe ich z. B. in einem Programm, warum auch immer, 892 Variablen mit den Namen a1 bis a892.

    Die möchte / muss ich nun bearbeiten, z. B. jeder Variablen einen Wert aus einem File zuweisen.

    Kann man manuell machen, a1 = gestern ( Zeile 1 aus File ), a2 = morgen ( Zeile 2 aus File )

    Dann ginge aber:
    for i = 1 to 892
    b=str(i)
    a%b = zeile i
    next

    Da wollte ich hin.
    Das Wort Excel lass ich mal weg.

    Und wenn das wie behauptet in Python geht, warum zeigt es mir keiner?
    Wenn es doch so EINFACH ist!


  • Und wenn das wie behauptet in Python geht, warum zeigt es mir keiner?
    Wenn es doch so EINFACH ist!

    Es geht nicht darum ob und wie es in Python geht (geht so, wie du es forderst, nicht), sondern dass das ganz schlechter Stil ist:

    Wie meigrafd schon schrieb, benutzt man dafür Arrays oder auch Dictionaries.

    Dieses "implizite" Erzeugen von Variablen verschlechtern die Programmübersicht erheblich, vom Debuggen/Fehlersuche mal ganz zu schweigen.

    Nicht alles, was bestimmte Sprachen an Features anbieten und als "super-duper" anpreisen ist geeignet, für ernsthafte Zwecke nutzbar zu sein.

    Du kannst natürlich machen (programmieren) was du willst...

  • Ich habe mehrmals gesagt, dass das völliger Blödsinn ist, aber gehen tut es. Man kann das globals dictionary bearbeiten, oder einem anderen Objekt ein neues Attribut zuweisen. Siehe #5 und das in eine Schleife und string formatting packen. Nichtsdestotrotz gibt es Listen und dicts für sowas, aber es geht. Das möchte ich hier festhalten.

    LG

  • Ist Dir der Begriff 'array' denn vertraut? Und falls ja, gibt es einen bestimmten Grund, warum Du keinen verwenden möchtest? Python kennt nativ keinen Variablentyp 'array', wohl aber die 'list', die dem schon recht nahe kommt. Damit könnte man Deinen Code so umsetzen:

    Code
    a = []                # erzeugt eine leere Liste
    for i in range(892):  # zählt i von 0 bis 891 durch
     a.append(str(i+1))   # hängt str(i+1) an die Liste an

    Auf die einzelnen Elemente könntest Du dann als 'a[0]' bis 'a[891]' zugreifen.

  • Darum geht es doch garnicht.
    Es geht darum VARIABLEN indirekt über einen Zähler anzusprechen, ähnlich wie ein array.
    Die sind einfach da, warum auch immer, soll es ja geben!

    Wie bearbeitest Du denn die variablen von a1 bis a829?


  • Ihr solltet mal lieber überlegen wo der Trick liegt!

    Der Trick ist a%b
    gleich a1
    Diese Variablen Zuweisung!

    Nun habe ich z. B. in einem Programm, warum auch immer, 892 Variablen mit den Namen a1 bis a892.

    Sorry aber das ist definitiv kein Trick.


    Und wenn das wie behauptet in Python geht, warum zeigt es mir keiner?
    Wenn es doch so EINFACH ist!

    Um dich vor schlimmen Fehlern zu bewahren? Vermutlich weißt du es blos nicht besser aber meinst nun das solch ein Vorgehen nötig wäre... :no_sad:

    In jeder anderen Programmiersprache erzeugt man ein oder mehrere Array's.
    In PHP könnte sowas zum Beispiel wie folgt aussehen - da finde ich das am einfachsten zu verstehen:
    [code=php]
    $settings = array();
    $settings["email"] = "bla@blub.com";
    $settings["server"] = "gmail.com";
    [/php]
    Das heißt man hat sozusagen nur eine Variable über die man aber verschiedene Elemente/Schlüssel abrufen kann.

    Für Python gibt es sowas natürlich auch. Nennt sich dort dann nur Dictionary:
    [code=php]
    settings = dict()
    settings["email"] = "bla@blub.com"
    settings["server"] = "gmail.com"
    [/php]..natürlich gibt es wie auch in php mehrere Möglichkeiten/Wege sowas zu erzeugen oder zu befüllen, muss man IMHO hier jetzt aber nicht alle erwähnen, kannste auch nach googlen.

    Nicht zu verwechseln mit list() oder tuple() die man auch nutzen könnte.

    Um das noch mal aufzugreifen:


    Nun habe ich z. B. in einem Programm, warum auch immer, 892 Variablen mit den Namen a1 bis a892.

    Mit einem Array / Dictionary hättest du dann halt a[1] bis a[892]
    Aber weißt du was das beste daran ist? Du kannst später wieder automatisiert da drüber latschen, sprich mit einer Schleife. Mit deinem dirty Vorgehen ginge das nur extrem umständlich oder Hardcoded und letzteres wäre wiederum Schwachsinn wieso das dann zuvor "automatisiert" erzeugt wurde... Also entweder man erleichtert sich das Leben und automatisiert sowas, oder man lässt es lieber gleich bleiben ;)

    [code=php]
    for key in settings:
    print "{}: {}" . format(key, settings[key])
    [/php]


    Allerdings hört sich "a1 bis a892" irgendwie nach Zeilen-Nummern einer Datei an....
    Wenn dem so ist wäre es sinnvoller sowas zu machen:
    [code=php]
    lines = open(filename).read().splitlines()
    [/php]
    Und dann kannst du später wieder "automatisiert" über die Zeilen wandern oder dir gezielt die Zeilennummer raus holen: lines[0] für die erste Zeile.


    Spoiler anzeigen

    Übrigens ergibt sich daraus dann erst der "Trick" wenn man von unterschiedlichen Arrays gleiche Schlüssel verwenden kann.
    [code=php]
    $DATEIEN["config.php"] = "/var/www/html/include/config.php";
    $DATEIEN["syslog"] = "/var/logs/syslog";
    #spaeter
    $ZUGRIFF["config.php"] = True;
    $ZUGRIFF["syslog"] = False;
    #spaeter
    foreach ($DATEIEN AS $DATEI => $PFAD) {
    if ($ZUGRIFF[$DATEI]) { echo "jo"; }
    }
    [/php]
    Oder mit Multidimensionalen Arrays kann man richtig zaubern:
    [code=php]
    $lang['de']['loadfile'] = 'Datei laden:';
    $lang['en']['loadfile'] = 'Load file:';

    # und kann dann ganz einfach die Sprache seiner Webseite switchen:
    $USE_lang = "de";

    echo $lang[$USE_lang]['loadfile'];
    [/php](...is natürlich php...)


    PS: Wir wollen dir nichts vorschreiben sondern helfen. Gute Hilfe sieht für gewöhnlich so aus dass auf mögliche Fehler hingewiesen wird.

  • villamarinella

    Code
    a1 = 'heute'
    a2 = 'morgen'
    a3 = 'safdsadf'
    
    
    for i in range(3):
        print(locals()['a{}'.format(i + 1)]) # nicht globals() oder vars()


    So etwas benutzt niemand. Auch wenn du es nicht einsehen möchtest.

    Ein Array ist in Python schlicht weg eine Liste und kein Wörterbuch etc. (Manul hat das oben schon erwähnt)


  • Darum geht es doch garnicht.
    Es geht darum VARIABLEN indirekt über einen Zähler anzusprechen, ähnlich wie ein array.
    Die sind einfach da, warum auch immer, soll es ja geben!

    Falls sich das auf mich bezieht: Die Ähnlichkeit zum Array habe ich verstanden - den Unterschied noch nicht. Wo kommen die Variablen denn her? Erzeugst Du die nicht selbst? Ich denke, wenn Du genauer beschreiben würdest, was eigentlich Dein Anwendungsfall ist, könnte man Dir auch besser helfen. Ich zumindest würde auch gerne verstehen, welche Problemstellung dahintersteckt. Also: Warum ist ein Array/eine Liste keine Lösung für Dich?


  • Darum geht es doch garnicht.
    Es geht darum VARIABLEN indirekt über einen Zähler anzusprechen, ähnlich wie ein array.
    Die sind einfach da, warum auch immer, soll es ja geben!

    Wie bearbeitest Du denn die variablen von a1 bis a829?

    Aber genau deshalb wär es doch besser die Daten in eine Liste zu speichern

  • Hallo Villamarinella,

    meinst Du sowas? Ist allerdings in Icon...

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    2 Mal editiert, zuletzt von Andreas (18. Oktober 2017 um 21:16)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!