Input als Listenaufruf

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
Eliazz
User
Beiträge: 46
Registriert: Samstag 6. Juli 2013, 01:56
Wohnort: Göttingen

Hallo, eigentlich eine kurze und einfache Frage: Ich habe n verschiedene Listen, nehmen wir Einfachheitshalber mal 2
Die Listen haben namen z.B hallo und test... Jetzt schreibe ich ein: a = input('Mit welcher liste soll gearbeitet werden')
Wie sorge ich jetzt dafür das python versteht was ich meine wenn ich hallo oder test als input eingebe also kann ich ihm sowas änliches sagen wie print(lis(a)) und dann printet er liste hallo oder test je nach dem was man eingegeben hat?
liebe grüße :)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo. Das Stichwort lautet "Dictionary".
Das Leben ist wie ein Tennisball.
Eliazz
User
Beiträge: 46
Registriert: Samstag 6. Juli 2013, 01:56
Wohnort: Göttingen

nein nicht wirklich ich suche was anderes: jemand gibt was ein, das wird gespeichert, jenachdem was eingegebn wurde soll dementsprechen die liste mit dem selben namen "angesprochen" werden... GEHT DAS?
BlackJack

@Eliazz: Ja das geht mit Wörterbüchern, a.k.a. Dictionaries, also dem Datentyp `dict`, und das ist genau das was Du suchst. Das was Du anscheinen *willst* hat nicht viel mit sauberer Programmierung zu tun. Bei nur zwei Alternativen könnte man noch mit einem ``if``/``else``-Arbeiten, aber wenn es mehr werden, dann sind Wörterbücher der übliche Weg das zu lösen.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

@Eliazz: Kurze Antwort:

Ja, mit einem Dictionary.


Lange Antwort: Wie stellst du dir das vor, dass du zu einem Zeitpunkt t ein Programm schreibst und ein Benutzer zu einem Zeitpunkt t + x, mit x > 0, einen Namen angibt, den du dann zum Zeitpunkt t als Variablennamen verwendest? Oder kurz gesagt: du musst den Variablennamen schon kennen, bevor der Benutzer ihn eingibt, andernfalls könntest du nämlich in deinem Programm diesen nicht verwenden. Man muss also etwa so vorgehen:

Code: Alles auswählen

meine_listen = {'a':[1, 2, 3], 'b':[4, 5, 6], 'c':[7, 8, 9]}
name = input('Bitte a, b oder c eingeben:')
if name not in meine_listen:
    print 'Eingabe kaputt!!'
    exit()
print meine_listen[name]
In specifications, Murphy's Law supersedes Ohm's.
Eliazz
User
Beiträge: 46
Registriert: Samstag 6. Juli 2013, 01:56
Wohnort: Göttingen

also: ich habe eine Liste mit allen möglichen Objekten meinetwegen das alphabet...
also nennen wir sie basis
und dann habe ich liste1, liste2, liste 3 und liste 4 mit jeweils wilkürlichen elementen aus der "basis"
Das könnte so aussehen:
basis = [a,b,c,d,e,f,g,....., x,y,z]
liste1 = [m, a, c, j]
liste2 = [y, p, j, q, e, l, m, g, f, d, a]
liste3 = [j, d, m]
liste4 = [a, o, i, k, w]
Der Benutzer gibt jetzt ein und soll mit seiner Abfrage festlegen welche Listen miteinander abgeglichen werden sollen,
dabei kann von 1- alle Listen alles dabei sein...
Es soll nun übeberprüft werden welches Element in allen ausgewählten Listen vorkommt, bzw alle auf die das zutrifft...
Wenn der Benutzer hier z.B liste2+ liste 3 auswählt soll das Programm d + m ausgeben... wenn man nun aber liste3 und 4 eingibt soll er sagen das es auf keine zutrifft... so :)
Eliazz
User
Beiträge: 46
Registriert: Samstag 6. Juli 2013, 01:56
Wohnort: Göttingen

ok danke erstmal, und wenn man jetzt a,b oder c eingegeben hat??? also ich meine wie sagt man das er jetzt das von beispielweise a (1,2,3) mit b abgleichen soll wenn beide eingegeben wurden? a + b werden nach eingabe doch als strings behandelt? oder nicht?
BlackJack

@Eliazz: Wenn die „Namen” auch fortlaufende Zahlen sein können, also Du Deine Namen durchnummeriert hast, dann kannst Du statt eines Wörterbuchs auch eine Liste verwenden und den Benutzer den Index in diese Liste eingeben lassen.

Wenn der Benutzer *zwei* Listen auswählen kann, dann muss er halt auch zwei Eingaben machen und Du musst zweimal auf die Datenstruktur zugreifen, welche die Listen enthält.

Und diese Aufgabe hört sich danach an als wenn Du statt Listen vielleicht man einen Blick auf den Datentyp „Menge”, also `set()` werfen möchtest.

Edit (ohne jegliche Fehlerbehandlung):

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-


def main():
    while True:
        samples = [
            ['m', 'a', 'c', 'j'],
            ['y', 'p', 'j', 'q', 'e', 'l', 'm', 'g', 'f', 'd', 'a'],
            ['j', 'd', 'm'],
            ['a', 'o', 'i', 'k', 'w'],
        ]
        i, j = map(int, raw_input('Enter list numbers to compare: ').split())
        result = ' + '.join(sorted(set(samples[i]) & set(samples[j])))
        print result if result else 'No common elements.'


if __name__ == '__main__':
    main()
Testlauf:

Code: Alles auswählen

Enter list numbers to compare: 2 3
No common elements.
Enter list numbers to compare: 1 2
d + j + m
Du hattest in Deinem Beispiel also das 'd' übersehen.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Da BlackJack heute offenbar seine Spendierhosen anhat, hab ich meine auch angezogen:

Code: Alles auswählen

# -*- coding: utf-8

basis = set([1, 2, 3, 4, 5, 6, 7, 8, 9])
meine_listen = {'a':[1, 2, 3, 7],
                'b':[4, 5, 6, 8],
                'c':[7, 8, 9, 2]}

wieviele = int(raw_input('wieviele Listen sollen verglichen werden?'))
if not 0 < wieviele <= len(meine_listen):
    print 'Fehler! Eingabe muss eine ganze Zahl zwischen 1 und {} sein.'.format(len(meine_listen))
    exit()

namen = []
for i in range(wieviele):
    name = raw_input('Bitte eine Liste auswählen aus {}'.format(list(meine_listen)))
    if name not in meine_listen:
        print 'Fehler! Den Namen {} gibt es nicht.'.format(name)
        exit()
    if name in namen:
        print 'Fehler! Der Name {} wurde bereits angegeben.'.format(name)
        exit()
    namen.append(name)

print basis.intersection(*(meine_listen[name] for name in namen))
In specifications, Murphy's Law supersedes Ohm's.
Antworten