Seite 1 von 1

string als namen für eine variable einlesen

Verfasst: Dienstag 26. Januar 2016, 11:24
von kontrapunktstefan
Hallo zusammen,
für ein bestimmtes Vorhaben brauche ich ein Programm, dass einen Ausschnitt aus einer bestimmten Liste ausspuckt, wobei eine große Anzahl an Listen zur Auswahl stehen soll.
Aus Gründen der Übersichtlichkeit, habe ich folgendes Kurzbeispiel kreiert, das leider nicht funktioniert:

Code: Alles auswählen

#!/usr/bin/env python3
namen = "Anna Bernd Cäsar Dagobert Emil Franz"
namen = namen.split()
obst = "Apfel Birne Clementine Dattel Erdeere Feige"
obst = obst.split()
ausschnitt = [ ] # leere liste, in die spaeter die Sachen geschrieben werden
wahl = input("Willst Du namen oder obst?\n")
wasauchimmer = wahl
ersterstring  = input("Was kommt zuerst?\n")
ersterstring = wasauchimmer.index(ersterstring)
letzterstring  = input("Was kommt zuletzt?\n")
letzterstring = wasauchimmer.index(letzterstring)
i = ersterstring
while i <=letzterstring:
	ausschnitt.append(wasauchimmer[i])
	i += 1

for i in ausschnitt:
    print(i,end=", ")
print("\n")
Leider funktioniert der Code nicht, ich denke, weil die eingelesene Variable "wahl" ein String ist und nicht so einfach als Name für die Variable wasauchimmer verstanden wird.
Ich habe schon herausgefunden, dass ich mir mir

Code: Alles auswählen

if (wahl =="namen"):
		wasauchimmer = namen
if (wahl =="obst"):
		wasauchimmer = obst
helfen könnte, da ich aber eine recht große Zahl von Listen brauche, wäre dieser Weg doch recht aufwändig.
Gibt es eine elegantere Lösung?

Re: string als namen für eine variable einlesen

Verfasst: Dienstag 26. Januar 2016, 11:39
von BlackJack
@kontrapunktstefan: Du suchst Wörterbücher (Datentyp `dict`). Und ich glaube mit der Slicing-Syntax bei Listen (und anderen Sequenztypen) möchtest Du Dich auch beschäftigen. Und vielleicht auch mit Zeichenkettenoperationen wie `join()`. :-)

Re: string als namen für eine variable einlesen

Verfasst: Dienstag 26. Januar 2016, 11:40
von snafu
Es sieht so aus als suchst du ein Dictionary:

Code: Alles auswählen

data = {}
data['namen'] = namen.split()
data['obst'] = obst.split()
wahl = input("Willst Du namen oder obst?\n")
print(data[wahl])

Re: string als namen für eine variable einlesen

Verfasst: Dienstag 26. Januar 2016, 12:14
von BlackJack

Code: Alles auswählen

def ask_for_things(name2things):
    prompt = u'Was willst Du? {0}\n'.format(
        u', '.join(sorted(name2things.keys()))
    )
    while True:
        choice = input(prompt)
        try:
            return name2things[choice]
        except KeyError:
            pass


def ask_for_thing_index(things, prompt):
    while True:
        choice = input(prompt)
        try:
            return things.index(choice)
        except ValueError:
            print(u'{0!r} ist nicht enthalten!'.format(choice))


def main():
    name2things = dict(
        (n, s.split()) for n, s in [
            (u'namen', u'Anna Bernd Cäsar Dagobert Emil Franz'),
            (u'obst', u'Apfel Birne Clementine Dattel Erdeere Feige'),
        ]
    )
    things = ask_for_things(name2things)
    start_index = ask_for_thing_index(things, u'Was kommt zuerst?\n')
    end_index = ask_for_thing_index(things, u'Was kommt zuletzt?\n')
    print(u', '.join(things[start_index:end_index]))


if __name__ == '__main__':
    main()

Re: string als namen für eine variable einlesen

Verfasst: Dienstag 26. Januar 2016, 16:43
von kontrapunktstefan
Vielen Dank für Eure Hilfe!
Der letzte Code bringt das gewünschte Ergebnis.
Ich werde mich nun hinsetzen, um ihn auch wirklich zu verstehen!