Strings mit einer Variablen abrufen - oder so ähnlich
weil man daraus auch etwas lernen kann und weil die Lösung in eine ganz andere Richtung geht
the more they change the more they stay the same
ok... jetzt hab ich es verstandenice2k3 hat geschrieben:Ganz kurz: ``input()`` stellt eine mögliche Sicherheitslücke dar (bei Python 2.x).Code: Alles auswählen
>>> a = raw_input() 5 >>> a = int(a) >>> type(a) <type 'int'>
dann werde ich das wohl nochmal umbauen.
Vielen Dank für eure Hilfe.
Daraus kann man nur lernen, wie man es NICHT machen sollte. Und wenn das nicht ausdrücklich und deutlich dabei steht, wird so ein Schrott auch noch von anderen aufgegriffen.Dav1d hat geschrieben:weil man daraus auch etwas lernen kann und weil die Lösung in eine ganz andere Richtung geht
Code: Alles auswählen
print ['a', 'b', 'c'][int(raw_input()) - 1]
@maaax: Wenn du nur input verwendest, kann der User gültigen Python-Code eingeben. exit() ist eine Funktion, mit der du Python beenden kannst. Wenn der User das nun schreibt, beendet sich das Programm.
Dehalb lieber raw_input. Damit würdest du dann einen String erhalten, den du auswerten kannst.
Um eine Zahl als Eingabe zu bekommen ist der Ansatz ``int(raw_input())`` der Beste, wie es sma gemacht hat.
Dehalb lieber raw_input. Damit würdest du dann einen String erhalten, den du auswerten kannst.
Um eine Zahl als Eingabe zu bekommen ist der Ansatz ``int(raw_input())`` der Beste, wie es sma gemacht hat.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Kann sein, allerdings kann man z.B. lernen wie man eval() einetzten kann, wenn man dann bei raw_input() ein int drum rum macht int(raw_input()) und mit dem try...except noch nen ValueError abfängt, ist es sogar einigermasen sicher trotz eval()!numerix hat geschrieben:Daraus kann man nur lernen, wie man es NICHT machen sollte. Und wenn das nicht ausdrücklich und deutlich dabei steht, wird so ein Schrott auch noch von anderen aufgegriffen.Dav1d hat geschrieben:weil man daraus auch etwas lernen kann und weil die Lösung in eine ganz andere Richtung geht
the more they change the more they stay the same
Statt eval(raw_input()) kannst du dann gleich input nehmen...
eval ist evil und sollte peinlichst vermieden werden
eval ist evil und sollte peinlichst vermieden werden
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Wo ist da denn noch ein `eval`? Das Problem mit `eval` ist, dass es nur dann Exceptions schmeisst, wenn es _gar nichts_ (und erst dann!) mit dem uebergebenen String anfangen kann.Dav1d hat geschrieben:Kann sein, allerdings kann man z.B. lernen wie man eval() einetzten kann, wenn man dann bei raw_input() ein int drum rum macht int(raw_input()) und mit dem try...except noch nen ValueError abfängt, ist es sogar einigermasen sicher trotz eval()!
Bei `int(raw_input())` weiss man, dass es den `ValueError` schmeisst, wenn es keine passende String Repraesentation einer Zahl ist.
Fuer einen Anfaenger gilt wie jbs schon sagte "eval is evil", erst wenn man `eval` und den Input ganz genau kennt, kann man anfangen das anders zu sehen. Aber auch dann ist es meist die schlechteste Wahl (sofern nicht gar nichts anderes geht).
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
mit dem eval(), war ne blöde Idee!
Das würd ich nicht nutzen, da es zu Verwirrungen führen kann wenn man 0 eingibt und dann c ausgegeben wirdsma hat geschrieben:StefanCode: Alles auswählen
print ['a', 'b', 'c'][int(raw_input()) - 1]
the more they change the more they stay the same
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Dann bliebe - allerdings auch nur fuer positive zahlen:Dav1d hat geschrieben:Das würd ich nicht nutzen, da es zu Verwirrungen führen kann wenn man 0 eingibt und dann c ausgegeben wird
Code: Alles auswählen
a = ['a', 'b', 'c']
a[(int(raw_input()) - 1) % len(a)]
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Guter Punkt. Hatte ich gar nicht bedacht. Ich nenne das ein Feature :)Dav1d hat geschrieben:... Das würd ich nicht nutzen, da es zu Verwirrungen führen kann wenn man 0 eingibt und dann c ausgegeben wird
Stefan