Ich habe eine Konsolenanwendung, die den Benutzer auffordert, verschiedene Eingaben einzugeben. Funktioniert gut.

Jetzt möchte ich der aufgerufenen Funktion einige zusätzliche Parameter hinzufügen, damit der Benutzer die Ergebnisse filtern kann. Insbesondere möchte ich, dass der Benutzer einen Datumsbereich eingeben kann, um alle in diesem Zeitraum erstellten Datensätze zurückzugeben.

Ich könnte der Funktion zwei separate Parameter hinzufügen, z. B. lowerDateLimit und UpperDateLimit. Aber es scheint mir ordentlicher, ein Wertepaar als Tupel zu akzeptieren: dateLimits, das die Form haben würde: (lowerDateLimit, UpperDateLimit).

Gibt es eine Möglichkeit für einen Benutzer, der Text in eine Konsole eingibt, seine Eingabe so zu formatieren, dass Python sie als Liste oder Tupel erkennt?

Oder wäre es pythonischer, nur zwei separate Parameter für die unteren und oberen Datumsgrenzen zu verwenden?

0
Simon Tewsi 28 Nov. 2013 im 03:03

3 Antworten

Beste Antwort
>>> ast.literal_eval(raw_input('Foo: '))
Foo: 1,2,3
(1, 2, 3)
2
Ignacio Vazquez-Abrams 27 Nov. 2013 im 23:11

Ich kann noch keinen Kommentar abgeben, aber wenn Sie eine Liste anstelle eines Tupels benötigen, kann ast.literal_eval dies durch Einfügen der Klammern bewältigen:

In [1]: import ast

In [2]: ast.literal_eval('[1,2,3]')
Out[2]: [1, 2, 3]
1
tlm2021 28 Nov. 2013 im 01:02
In [84]: nums = [int(i) for i in raw_input("Enter space separated integers: ").split()]
Enter space separated integers: 1 5 6 7 3 56  2 3 4 2 1

In [85]: nums
Out[85]: [1, 5, 6, 7, 3, 56, 2, 3, 4, 2, 1]
2
inspectorG4dget 27 Nov. 2013 im 23:11