string als namen für eine variable einlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kontrapunktstefan
User
Beiträge: 4
Registriert: Dienstag 26. Januar 2016, 11:01

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?
Zuletzt geändert von Anonymous am Dienstag 26. Januar 2016, 11:31, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
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()`. :-)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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])
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()
kontrapunktstefan
User
Beiträge: 4
Registriert: Dienstag 26. Januar 2016, 11:01

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!
Antworten