Seite 1 von 1

Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 07:29
von mcdaniels
Guten Morgen!
Nun, nach meinem gestrigen "Einbruch", weil ich mich nicht mehr rausgesehen habe, wollte ich etwas Anderes versuchen.

Ziel:
Frage nach der Anzahl der gewünschten Eingaben (Wieviele Zahlen möchten Sie erfassen?)
Der Benutzer soll dann abfragen können, welche Werte eingegeben worden sind (zB. Welcher Wert wurde für die Variable 3 angegeben)

Meine Lösung wäre gewesen, dass ich, basierend auf dem Wert der gewünschten Anzahl der Eingaben eine Anzahl von Variablen gleicher Anzahl erstelle und diesen Variablen dann Werte zuweise.

Nur müsste ich bei meinem Vorhaben aber einen Variablennamen aus einem Variablennamen erstellen.

Code: Alles auswählen

# -*- coding: utf8 -*-
eingabemenge = int(raw_input('Wieviele Zahlen möchten Sie erfassen? 0=Ende: '))
if eingabemenge == 0:
    exit

counter = 0
while counter < eingabemenge:
    counter = counter+1
    #Aus counter wollte ich dann die Variablennamen erzeugen, die per raw_input abgefragt werden:
    wert+counter =  raw_input('Wert ' + counter)
Eine weitere Idee wäre das schreiben in ein Array gwesen:

Code: Alles auswählen

# -*- coding: utf8 -*-
eingabemenge = int(raw_input('Wieviele Zahlen möchten Sie erfassen? 0=Ende: '))
if eingabemenge==0:
    exit

counter = 0

while counter < eingabemenge:
    counter = counter+1
    wert = input('Wert: ')
    zahlenfolge=array.append(wert)
Ist diese Vorgangsweise -abgesehen davon, dass sie nicht funktioniert - grundsätzlich gut oder eher zu verwerfen?

Danke!
LG

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 07:37
von Pekh
Wenn du mit 'Array' eine Liste meinst, wäre es der richtige Ansatz. Die Exception, die du bekommst, dürfte ein NameError sein, oder?

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 07:56
von mcdaniels
Hallo!
Sorry - die Fehlermeldung hätte ich auch gleich posten können:

Wieviele Zahlen möchten Sie erfassen? 0=Ende: 10
Wert: 1

Traceback (most recent call last):
File "C:\Python27\test", line 11, in <module>
zahlenfolge=array.append(wert)
NameError: name 'array' is not defined


LG

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 08:04
von Pekh
Und was könnte "name 'array' is not defined" bedeuten?

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 08:34
von mcdaniels
Python meint damit dass die Variable namens Array nicht definiert ist. Ich denke aber ich meinte doch ein Array und keine Liste:

Code: Alles auswählen

array = 'wert','wert2','wert3'

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 08:40
von Pekh
Was du da definierst, ist ein Tupel. Das hat zwar gewisse Ähnlichkeiten mit einem Array, ist aber z.B. unveränderlich. Generell ist es so, daß Leute, die im Bezug auf Python von Array sprechen (weil sie in anderen Sprachen mit solchen gearbeitet haben), eigentlich die eingebauten Listen meinen. Es gibt zwar auch Arrays (in irgendeinem Modul), diese werden aber nur ausgesprochen selten eingesetzt. Weil sie sich z.B. nicht einfach beliebig vergrößern lassen. Listen sind einfach praktischer.

Zu deinem Problem: Richtig. Du versuchst, etwas an ein Objekt zu anzuhängen, das noch gar nicht existiert. Vielleicht mußt du deine Datenstruktur irgendwo vorher mit einem Startwert versehen, damit du sie dann einsetzen kannst?

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 09:20
von mcdaniels
So!

Code: Alles auswählen

# -*- coding: latin1 -*-
eingabemenge = int(raw_input('Wieviele Zahlen möchten Sie erfassen? 0=Ende: '))
if eingabemenge==0:
    exit

counter = 0
platzhalter = []

while counter < eingabemenge:
    counter = counter+1
    wert = input('Wert: ')
    platzhalter.append(wert)

print platzhalter
funktioniert soweit mal :-)

Eine blöde Frage hätte ich zu obigem noch: Wie kann ich beim raw_input Befehl bewerkstelligen, dass nicht nur Wert: bei jeder Abfrage der Daten erscheint, sondern Wert 1:, Wert 2: ... Müsste also einen String mit einem Int verknüpfen, was ja nicht funktioniert...

Wobei ich hier die meiste Zeit nach einer guten Beschreibung betr. Python Listen gesucht und gefunden habe (http://diveintopython.org/native_data_types/lists.html)

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 09:31
von Rebecca

Code: Alles auswählen

>>> "Wert: " + str(42)
'Wert: 42'
>>> "Wert: %s" % 42
'Wert: 42'
Uebrigens solltest du input in Python 2.x nicht verwenden sondern lieber raw_input.

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 09:44
von mcdaniels
Hallo nochmals!
Ich hoffe, ich nerve nicht, vor allem da es simpelst ist (und für viele sicher lächerlich?) Fertig sieht es nun so aus und funktioniert:

Code: Alles auswählen

# -*- coding: latin1 -*-
eingabemenge = int(raw_input('Wieviele Zahlen möchten Sie erfassen? 0=Ende: '))
if eingabemenge==0:
    exit

counter = 0
platzhalter = []

print ('Sie wollen ' + str(eingabemenge) + ' Zahlen eingeben')


while counter < eingabemenge:
    counter = counter+1
    wert = input('Wert ' +str(counter)+':')
    platzhalter.append(wert)

print platzhalter
LG

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 09:51
von Defnull
Mein nicht ganz ernst gemeinter Beitrag dazu:

Code: Alles auswählen

ask = 'Wieviele Zahlen? ', 'Nummer %d: '
print [int(raw_input(ask[1]%(i+1)) or 0) for i in range(int(raw_input(ask[0]) or 0))]

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 10:24
von mcdaniels
@Defnull:
Danke, jetzt weiss ich wieder, wo ich stehe :D Man beachte den fast unmerklichen Mehranteil von Zeilen (Zeichen) in meiner Variante *lol*

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 12:42
von /me
mcdaniels hat geschrieben:@Defnull:
Danke, jetzt weiss ich wieder, wo ich stehe :D Man beachte den fast unmerklichen Mehranteil von Zeilen (Zeichen) in meiner Variante *lol*
Eine kürzere Zeilenanzahl bedeutet nicht, dass das Programm besser ist. Auch Defnull würde seine Variante im praktischen Einsatz sicher nicht verwenden.

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 13:15
von cofi
Trotzdem kann man es verbessern:

Code: Alles auswählen

import sys
anzahl = int(raw_input('Wieviele Zahlen möchten Sie erfassen? 0=Ende: '))
if anzahl == 0:
   sys.exit()

platzhalter = []
print 'Sie wollen %d Zahlen eingeben' % anzahl

for i in xrange(anzahl):
    wert = int(raw_input('Wert %d:' % i))
    platzhalter.append(wert)
Du solltest auch darauf achten, dass du die Unterschiede von Python 2 und 3 beachtest, z.b. hast du `print` einmal als Funktion und einmal als Statement benutzt und sowohl `raw_input` als auch `input` gleichzeitig, anstatt bei beiden die sichere Variante ueber `raw_input` zu nutzen.

Re: Variablennamen mit Variable erstellen

Verfasst: Freitag 20. August 2010, 15:15
von Defnull
/me hat geschrieben:
mcdaniels hat geschrieben:@Defnull:
Danke, jetzt weiss ich wieder, wo ich stehe :D Man beachte den fast unmerklichen Mehranteil von Zeilen (Zeichen) in meiner Variante *lol*
Eine kürzere Zeilenanzahl bedeutet nicht, dass das Programm besser ist. Auch Defnull würde seine Variante im praktischen Einsatz sicher nicht verwenden.
Richtig, meine Lösung ist alles andere als praktikabel :) Ich wollte nur mal angeben ;)

Du kannst ja trotzdem mal versuchen, den code zu verstehen. Soooo schwer ist es eigentlich gar nicht, wenn man List-Comprehensions erst einmal verstanden hat.