Variablennamen zusammensetzen

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.
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main
Kontaktdaten:

Variablennamen zusammensetzen

Beitragvon Markus12 » Sonntag 25. März 2007, 13:37

Hi,
ich hab da ein kleines Problem:
Ich möchte variablennamen zusammensetzen, ungefähr so hatte ich mir das vorgestellt:

Code: Alles auswählen

zufall=randint(1,9)
variable+str(zufall)='hallo'


Klappt leider nicht
Weiß jemand eine andere variante (möglichst einfach)? :D
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Sonntag 25. März 2007, 13:44

meinst du zufällt so etwas?

Code: Alles auswählen

In [1]: from random import randint

In [2]: zufall = randint(1, 9)

In [3]: variable = 'hallo %d' % zufall

In [4]: print variable
hallo 5


Oder habe ich dich falsch verstanden?

MfG EnTeQuAk
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Sonntag 25. März 2007, 13:45

Er hätte gerne eine Variable names:
variable(ergebnis von rand). Beispiel:
variable3
variable4 etc....

MfG apollo13
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitragvon Markus12 » Sonntag 25. März 2007, 13:49

Ne, :D
ich meinte es so:

1. Die Zufallszahl wird bestimmt.
2. Eine Variable, die von der Zufallszahl abhängt, wird definiert.

In etwa so:
Die zufallszahl ist jetzt mal 4, dann wird eine variable die "varible4" heißt auf "hallo" gesetzt.

Wenn beim nächsten Mal die zufallszahl 8 ist, dann heißt die variable "variable8" und ihr Wert ist "hallo"

Frag mich nicht für was ich das brauche *haha* :wink:
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitragvon Markus12 » Sonntag 25. März 2007, 13:50

Ja genau apollo13! :D
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Sonntag 25. März 2007, 14:05

geht direkt nicht. (nicht, das ich wüsste ;) )

Aber du kanst Dictionarys benutzen:

Code: Alles auswählen

In [1]: from random import randint

In [2]: dictionary = {}

In [3]: zufall = randint(1, 9)

In [4]: dictionary['variable%d' %zufall] = 'hallo'

In [5]: dictionary
Out[5]: {'variable6': 'hallo'}


Das währe das gleiche, was du hättest ;)
oder anders:

Code: Alles auswählen

In [1]: from random import randint

In [2]: dictionary = {}

In [4]: dictionary['variable%d' % randint(1, 9)] = 'hallo'

In [5]: dictionary['variable%d' % randint(1, 9)] = 'hallo nummer 2'

In [6]: print dictionary
{'variable2': 'hallo nummer 2', 'variable6': 'hallo'}

In [7]: print dictionary['variable2']
hallo nummer 2


Je nachdem, was du machen möchtest...

Was möchtest du denn machen? ;)

MfG EnTeQuAk
BlackJack

Beitragvon BlackJack » Sonntag 25. März 2007, 14:16

Wobei man sich das mit den Zeichenketten sparen kann, der Namensteil vor der Zahl steht ja schon im Quelltext. Also:

Code: Alles auswählen

In [5]: variable = dict()

In [6]: variable[random.randint(0, 9)] = 'hallo'

In [7]: variable
Out[7]: {3: 'hallo'}

In [8]: variable[3]
Out[8]: 'hallo'
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitragvon Markus12 » Sonntag 25. März 2007, 14:28

Ja danke! :D
Ich mache gerade etwas einfaches: Tic Tac Toe
Ich brauchte das variablen zusammensetzen für die Berechnung, wo der gegner sich platziert.
Ich habe variablen definiert, die zeigen sollten, ob das Feld, in das er sich setzen will, schon besetzt ist.

Ich wollte das nicht so machen, da es zu unprofessionell ist:

Code: Alles auswählen

if zufall==1:
      variable1='belegt'
elif zufall==2:
      variable2='belegt'
...


so wollte ich das nicht machen :wink:
EyDu
User
Beiträge: 4866
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Sonntag 25. März 2007, 14:42

Wenn du schon ein TicTacToe machst, bieten sich für dich vielleicht Tupel als Schlüssel des Dictionarys an, da du ja eh' ein n*m-Fed hast. Dann kannst du dir auch gleich das durchnummerieren der Felder sparen:

Code: Alles auswählen

def set(var, x, y, value):
    var[(x,y)] = value

def is_set(var, x, y, value):
    return (x,y) in var.keys() and var[(x,y)] == value

variable = {}
set(variable, 1, 1, "spam")
is_set(variable, 1, 1, "spam") # => True
is_set(variable, 2, 3, "eggs") # => False
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Sonntag 25. März 2007, 15:18

ich würde mit True und False arbeiten und einem Dict wie oben beschreiben.

PS aber man kann 'Variable'-Variablen bauen ^^ aber etwas doof:

Code: Alles auswählen

>>> from random import randint
>>> string = "variable%d = 'hallo'"%randint(1,9)
>>> exec(string)
#
#  So jetzt müssen wir aber die Vairable suchen und deshalb ist ein dict besser:
#
>>> variable1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'variable1' is not defined
>>> variable2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'variable2' is not defined
>>> variable2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'variable2' is not defined
>>> variable3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'variable3' is not defined
>>> variable4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'variable4' is not defined
>>> variable5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'variable5' is not defined
>>> variable6
'hallo'
>>>
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitragvon Markus12 » Sonntag 25. März 2007, 19:28

@Sr4l:

WAs bedeutet oder macht das "exec" genau?
Macht es das Variablenbauen möglich?
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Beitragvon apollo13 » Sonntag 25. März 2007, 19:35

Das macht exec: http://docs.python.org/ref/exec.html

Erlaubt sozusagen "Variablenbau"
Markus12
User
Beiträge: 195
Registriert: Dienstag 6. März 2007, 19:32
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitragvon Markus12 » Sonntag 25. März 2007, 19:41

Ok danke :D
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Beitragvon nkoehring » Sonntag 25. März 2007, 23:47

Wobei in dem Fall auch eval reicht... Das tolle an Eval und Exec ist ja, dass man sie in einem eigenen Namespace ausfuehren kann... zB so:

Code: Alles auswählen

from random import randint

myNamespace = dict()
eval("var%d=False" %randint(1,9)) in myNamespace


Aber wie schon erwaehnt... fuer deine Idee ist es nicht sinnvoll ;)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Montag 26. März 2007, 19:19

Reingefallen: `in` gibts nur bei `exec`. Für `eval` sind die Namespaces ganz normale Argumente :)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/

Wer ist online?

Mitglieder in diesem Forum: mollyman