Seite 1 von 2

Strings mit einer Variablen abrufen - oder so ähnlich

Verfasst: Freitag 6. November 2009, 14:52
von maaax
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 :)

Verfasst: Freitag 6. November 2009, 14:57
von mkesper
Wenn du

Code: Alles auswählen

a[1] = 'string1'
nimmst, dann geht es, ja.
Siehe Tutorial.

Verfasst: Freitag 6. November 2009, 15:01
von Defnull
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]

Verfasst: Freitag 6. November 2009, 15:03
von jbs
Sollte nicht eher raw_input verwendet werden, da sonst der User '1' eingeben muss? :)

Verfasst: Freitag 6. November 2009, 15:22
von mkesper
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.

Verfasst: Freitag 6. November 2009, 15:28
von jbs
Da wäre print aber eine Funktion und das ist hier nicht der Fall.

Verfasst: Freitag 6. November 2009, 15:30
von maaax
@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

Verfasst: Freitag 6. November 2009, 15:49
von numerix
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 ...

Verfasst: Freitag 6. November 2009, 15:56
von jbs
@maaax
Gib doch mal ``exit()`` statt ``1`` ein.

Verfasst: Freitag 6. November 2009, 19:30
von maaax
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).

Verfasst: Freitag 6. November 2009, 19:39
von ms4py

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).

Verfasst: Freitag 6. November 2009, 19:50
von numerix
@maaax: Ich würde dringend zu einer gründlichen Lektüre des/eines Tutorials raten, denn dir fehlen entscheidende Grundlagen.

Verfasst: Freitag 6. November 2009, 21:53
von Hyperion
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 :-)

Verfasst: Freitag 6. November 2009, 23:02
von Dav1d
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

Verfasst: Freitag 6. November 2009, 23:21
von BlackJack
@Dav1d: Warum zeigst Du den Mist dann überhaupt!?

Verfasst: Freitag 6. November 2009, 23:23
von Dav1d
weil man daraus auch etwas lernen kann und weil die Lösung in eine ganz andere Richtung geht

Verfasst: Samstag 7. November 2009, 09:14
von maaax
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.

Verfasst: Samstag 7. November 2009, 09:24
von numerix
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.

Verfasst: Samstag 7. November 2009, 09:38
von sma

Code: Alles auswählen

print ['a', 'b', 'c'][int(raw_input()) - 1]
Stefan

Verfasst: Samstag 7. November 2009, 12:44
von jbs
@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.