Strings mit einer Variablen abrufen - oder so ähnlich

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.
maaax
User
Beiträge: 4
Registriert: Freitag 6. November 2009, 14:25

Moin moin...

ich habe mehrere Strings a1 bis an definiert, die ich in einer Schleife und mittels "if" abrufen und ggf. printen will.

Im Prinzip so:

Code: Alles auswählen

a1 = 'string1'
a2 = 'string2'
a3 = 'string3'
a4 = 'string4'

while mencheck==False:
    for x in range(4):
        if n==x:
            print ax
            mencheck = True                  
    else:
        print 'Der gewaehlte Menuepunkt existiert nicht.'
        n = input('Versuchen Sie es noch einmal: ')
wenn also z.B. n= 1 = x erfüllt ist, soll a1 ausgegeben werden.
Wenn n nicht als Menüpunkt (1-4) vorhanden ist, soll erneut die Eingabe Aufgefordert werden.

Lässt sich das in Python irgendwie realisieren?

danke schonmal :)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Wenn du

Code: Alles auswählen

a[1] = 'string1'
nimmst, dann geht es, ja.
Siehe Tutorial.
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Das schreit nach dict()

Code: Alles auswählen

a=dict()
a['1'] = 'string1'
a['2'] = 'string2'
a['3'] = 'string3'
a['4'] = 'string4'

n = None
while n not in a:
  if n:
    print 'Der gewaehlte Menuepunkt existiert nicht.'
  n = input('Menupunkt wählen: ') 
print a[n]
Bottle: Micro Web Framework + Development Blog
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Sollte nicht eher raw_input verwendet werden, da sonst der User '1' eingeben muss? :)
[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]
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

jbs hat geschrieben:Sollte nicht eher raw_input verwendet werden, da sonst der User '1' eingeben muss? :)
Korrekt, außer es handelt sich um Python 3.x.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Da wäre print aber eine Funktion und das ist hier nicht der Fall.
[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]
maaax
User
Beiträge: 4
Registriert: Freitag 6. November 2009, 14:25

@mkallas:

Code: Alles auswählen

a[1] = 'string'  #TypeError: 'type' object is unsubscriptable
@Defnull:

mit

Code: Alles auswählen

a=dict()
a[1]='string'
klappts wunderbar, vielen Dank

@jbs
also input([]) gibt bei mir int und raw_input([]) str
und ich brauch ja int, also in so fern passt das, oder hab ich da was übersehen?

Code: Alles auswählen

>>> raw_input('Test: ')
Test: 1
'1'
>>> input('Test: ')
Test: 1
1
es handelt sich um Python 2.6.4


und so läuft es jetzt wunderbar:

Code: Alles auswählen

a=dict()
a[1]='String1'
a[2]='string2'
a[n]='Stringn'

n = input('Ihre Eingabe: ')

while mencheck==False:
    if n in a:
            print a[n]
            mencheck = True
    else:
        print 'Der gewaehlte Menuepunkt existiert nicht.'
        n = input('Versuchen Sie es noch einmal: ')
ich lass mich aber natürlich gerne eines besseren belehren, mach das ja erst seit 2 Wochen
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

maaax hat geschrieben:@mkallas:

Code: Alles auswählen

a[1] = 'string'  #TypeError: 'type' object is unsubscriptable
Autsch! Du musst schon vorher eine Liste a mit mind. 2 Elementen anlegen, damit das funktioniert ...
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

@maaax
Gib doch mal ``exit()`` statt ``1`` ein.
[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]
maaax
User
Beiträge: 4
Registriert: Freitag 6. November 2009, 14:25

numerix hat geschrieben:
maaax hat geschrieben:@mkallas:

Code: Alles auswählen

a[1] = 'string'  #TypeError: 'type' object is unsubscriptable
Autsch! Du musst schon vorher eine Liste a mit mind. 2 Elementen anlegen, damit das funktioniert ...
ok, das wusste ich nicht. konnte ich aus dem Beispiel jetzt auch nicht so raus lesen. (als jemand der quasi noch keine Ahnung von dem zeug hat zumindest nicht)


jbs hat geschrieben:@maaax
Gib doch mal ``exit()`` statt ``1`` ein.
sry, aber ich check nicht so ganz worauf du hinaus willst.
Warum genau sollte ich raw_input nehmen?

Wenn ich über input Abfrage kann ich nur Zahlen (float) eingeben.

wenn ich es mit n=raw_input mache, kann ich nachher z.B. keine Abfrage im Sinne von n in range(y) oder was auch immer mehr machen.
ausser ich arbeite mit chr()/ord().
Zumindest ist das nach meinem bisherigen Wissenstand so (und nachdem wie ich es ausprobiert habe).
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Code: Alles auswählen

>>> a = raw_input()
5
>>> a = int(a)
>>> type(a)
<type 'int'>
Ganz kurz: ``input()`` stellt eine mögliche Sicherheitslücke dar (bei Python 2.x).
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

@maaax: Ich würde dringend zu einer gründlichen Lektüre des/eines Tutorials raten, denn dir fehlen entscheidende Grundlagen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Defnull hat geschrieben:Das schreit nach dict()
Finde ich nicht!

Der OP will ja keine Kürzel abfragen, sondern nur den gewählten Index. Da würde ich eine Liste wählen. Anders sähe es eben bei Kürzeln aus :-)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

geht auch mit eval

Code: Alles auswählen

a1 = 'string1'
a2 = 'string2'
a3 = 'string3'
a4 = 'string4'

while True:
    n = raw_input('Menupunkt wählen: ')
    try:
        eval('a%s' % n)
        break
    except NameError:
        print 'Der gewaehlte Menuepunkt existiert nicht.'
print eval('a%s' % n)
is aber nicht besonders schön, ich persöhnlich würd n' Dictionary nehmen
the more they change the more they stay the same
BlackJack

@Dav1d: Warum zeigst Du den Mist dann überhaupt!?
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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
maaax
User
Beiträge: 4
Registriert: Freitag 6. November 2009, 14:25

ice2k3 hat geschrieben:

Code: Alles auswählen

>>> a = raw_input()
5
>>> a = int(a)
>>> type(a)
<type 'int'>
Ganz kurz: ``input()`` stellt eine mögliche Sicherheitslücke dar (bei Python 2.x).
ok... jetzt hab ich es verstanden :)
dann werde ich das wohl nochmal umbauen.

Vielen Dank für eure Hilfe.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dav1d hat geschrieben:weil man daraus auch etwas lernen kann und weil die Lösung in eine ganz andere Richtung geht
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.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Code: Alles auswählen

print ['a', 'b', 'c'][int(raw_input()) - 1]
Stefan
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

@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.
[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]
Antworten