Seite 1 von 1
Input in Variable umwandeln
Verfasst: Samstag 30. April 2022, 07:20
von User12345
Hi, ich, als Python-Anfänger, hätte eine Frage. Wie kann ich einen Input in eine Variable umwandeln?
z.B
wenn man in "eingabe" a=6 eingibt,
dass python eine neue variable "a" anlegt und sie dem Wert 6 zuteilt.
Würde das irgendwie gehen? Ich würde mich freuen.
Re: Input in Variable umwandeln
Verfasst: Samstag 30. April 2022, 07:30
von Dennis89
Hallo,
vllt hilft es dir, wenn du dir mal den Inhalt der Variablen ‚Eingabe‘ ausgeben lässt.
Grüße
Dennis
Re: Input in Variable umwandeln
Verfasst: Samstag 30. April 2022, 08:29
von __deets__
Das geht so nicht und ist auch nicht sinnvoll. Denn Variablen helfen dir nur, wenn du gleichzeitig Code generieren könntest, der etwas mit den Variablen macht.
Wenn man eine unbekannte Anzahl von Werten anlegen und verarbeiten will, nutzt man dazu Wörterbücher. In einem Rutsch kannst du die aber nicht befüllen, eine Eingabe deiner Form musst du zuerst am Gleichheitszeichen zerlegen, und dann den linken Teil als Schlüssel und den rechten als wert behandeln.
Re: Input in Variable umwandeln
Verfasst: Samstag 30. April 2022, 12:38
von __blackjack__
Was __deets__ beschrieben hat als Code, allerdings ohne Fehlerbehandlung:
Code: Alles auswählen
#!/usr/bin/env python3
def main():
variablen = {}
name, _, wert_text = input("Deine Variable: ").partition("=")
variablen[name.strip()] = int(wert_text)
print(variablen)
if __name__ == "__main__":
main()
Testlauf:
Man möchte da natürlich noch darauf reagieren das kein "=" eingegeben wurde, der Text nach dem "=" nicht in eine ganze Zahl gewandelt werden kann, und vielleicht auch den Text vor dem "=" auf Kriterien testen, die ein Name erfüllen soll/muss.
Re: Input in Variable umwandeln
Verfasst: Sonntag 1. Mai 2022, 13:13
von DeaD_EyE
Das ist möglich, aber eigentlich will man nicht.
Ein David Copperfield würde das sicherlich anders sehen...
Wenn man also jemanden ärgern will, lässt man die Begründung einfach weg und liefert dann so ein Beispiel:
Code: Alles auswählen
def input_eval(assignment):
if "=" not in assignment:
raise ValueError("Nur zuweisungen sind zulässig")
if assignment.count("=") > 1:
raise ValueError("Nur ein Gleichheitszeichen ist zulässig")
name, evaluate = assignment.split("=")
globals()[name] = eval(evaluate)
1) Ich würde mich nicht darauf verlassen, dass eval alles herausfiltert, was später genutzt werden kann, um die Anwendung zu kompromittieren.
2) global sollte nicht verwendet werden, da sich dort Fehler einschleichen, die nur schwer zu debuggen sind.
3) Zu Risiken oder Nebenwirkungen zählen sie die Anzahl der globals
Re: Input in Variable umwandeln
Verfasst: Sonntag 1. Mai 2022, 13:32
von Sirius3
@DeaD_EyE: eval ist doch hier gar nicht nötig. Das Du hier globals ins Spiel bringst ist trotz der Warnung schon problematisch genug. Mit exec wird Deine Funktion zum Einzeiler, aber hier nochmal die Warnung: exec bringt noch mehr Probleme, nicht für Benutzereingaben verwenden.
Re: Input in Variable umwandeln
Verfasst: Sonntag 1. Mai 2022, 16:28
von DeaD_EyE
@DeaD_EyE: eval ist doch hier gar nicht nötig.
Besser als exec!
Beispiel mit exec:
Und dann kann man z.B. folgenden Eingabe tätigen: import os; print(os.listdir())
Genauso gut könnte man das Home-Verzeichnis löschen.
Interessant ist das aber erst, wenn der Code z.B. irgendwo unbeobachtet auf einem Server läuft.
Dann wäre es z.B. fatal, wenn man denkt eval/exec sei sicher.
Kinder müssen auf die heiße Herdplatte packen, um zu spüren, dass es eine doofe Idee ist.
Man kann versuchen, den Kindern anhand von Beispielen aufzuzeigen, was dann passiert.
Wenn man den Kindern aber alles einfach nur verbietet und sagt, das ist schlecht, dann hören die Kinder nicht darauf.
Erklärt man dem Kind das warum, dann wird Kind eher auf einen hören.
Um eval und exec sicherzumachen, muss man sich ganz schön anstrengen und Python hervorragend kennen.
Darüber gibt es sogar gute Artikel. Aber das trägt jetzt nicht zur Lösung bei, da die Lösung eine andere ist, wo exec/eval nicht drin vorkommt.
Re: Input in Variable umwandeln
Verfasst: Sonntag 1. Mai 2022, 17:59
von Sirius3
@DeaDEye: und was ist da der Unterschied zwischen `exec` und `eval`?