Zufallsgenerator mit Python 2.6

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
Luap12
User
Beiträge: 19
Registriert: Donnerstag 24. Juni 2010, 21:38

Hi!

Ich möchte unter Python 2.6 einen Zufallsgenerator machen und diesen in ein Programm einbauen. Unter 3.0 funzt der folgende Code einwandfrei, aber was ist bitte zu 2.6 der Unterschied (bin eig 3.0 Programmieren)!?

Code: Alles auswählen

import random  #Habe auch schon from random import random versucht

random.seed()
a = random.randint(0.0,1.0)
b = random.randint(0.0,1.0)
c = random.randint(0.0,1.0)


Die Variablen werden nicht andersweitig genuzt.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Hast du doch, nur "randint" liefert halt nur integer, also entweder 0 oder 1 in deinem Fall.
Zudem ist "seed" Blödsinn, genauso wie das du bei "randint" floats übergibst.

Edit: Wenn ich einfach mal raten soll nehme ich an du suchst "random.random()" - dies würde dir eine float Zahl zwischen 0.0 und 1.0 geben
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Luap12
User
Beiträge: 19
Registriert: Donnerstag 24. Juni 2010, 21:38

ok, danke, aber warum ist denn seed() sinnfrei?? man muss doch den Zufallsgenerator initialisieren, sonst kann es passieren das er immer diesselbe Zahl liefert!? (Brauche ihn mehrmals im prog)
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ich glaube davon kann BlackJack mittlerweile ein Lied singen, sie mal in der Forensuche unter random.seed() nach :mrgreen:

Die Erklärung ist eigentlich schlicht, weil du als default-Parameter dort immer None übergibst und damit den Generator immer wieder mit dem selben Wert initialisiert.
Die Initialisierung erfolgt schon beim import.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Luap12
User
Beiträge: 19
Registriert: Donnerstag 24. Juni 2010, 21:38

Code: Alles auswählen

a = random.random()
Trptzdem erscheint diese Fehlermeldung:
AttributeError: 'builtin_function_or_method' object has no attribute 'random'
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Dann hast du nicht "import random", sondern "from random import random" gemacht.
Zumindest ist random, bei dir kein Modul sondern eine Funktion
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Luap12
User
Beiträge: 19
Registriert: Donnerstag 24. Juni 2010, 21:38

doch, ich habe import random gemacht. habe jetzt aber auch einen anderen weg gufunden:

Code: Alles auswählen

set_color(random(),random(),random())
statt wie ich es wollte:

Code: Alles auswählen


a = random.random()
...


set_color(a,b,c)

Aber trotzdem danke für die Hinweise!
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ich wiederhole mich nochmal random ist bei dir kein Modul, aber ich wüsste nicht warum nur bei dir "import random" eine Funktion liefern sollte.

Du hast die Funktion "random()" aus dem Modul "random" importiert, das geht aber auch.

Edit: Eventuell importierst du beides zB

Code: Alles auswählen

import random
from random import *
Oder so was in der Art, dann würde "random" also Modul überschrieben werden.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Luap12
User
Beiträge: 19
Registriert: Donnerstag 24. Juni 2010, 21:38

Da du in Python 2.6 bzw. in Python allgemein gut zu sein scheinst, wie kann man man 2 bzw. mehere Zeichenketten verküpfen??

Ich dachte da an folgendes, kenne es so aus Python 3^^:

Code: Alles auswählen


...

label1 = MTLabel(label=gesamtausgabe, pos=(200, 200), autosize=True, padding=10)

masseinheit = "Zentimeter"
a = 5

gesamtausgabe = a + " " + masseinheit


self.label1.label = str(gesamtausgabe)

...

habe es auch schon versucht die beiden Strings mit and zuverknüpfen, funzt auch net^^
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

%> python2.6
Python 2.6.6 (r266:84292, Dec 12 2010, 15:15:09) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 5 + " meter"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> 
%> python3  
Python 3.1.3 (r313:86834, Nov 28 2010, 10:01:07) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 5 + " meter"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Da musst du aber ein besonders Python3 kennen.
Das Zauberwort heisst Stringformatierung.

P.S. Fehlermeldung sind hilfreich.
Und da das die Grundlagen sind wäre es ratsam, wenn du das Tutorial durcharbeiten würdest.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

cofi hat geschrieben:Da musst du aber ein besonders Python3 kennen.
Das glaube ich langsam auch, bisher habe ich nicht einen Fehler auf Grund eines Versions unterschied gesehen.

Und wie cofi bereits im geposteten Traceback stehen hat, kommt der Fehler nur daher, das du eine Integer-Variable mit einem String addieren willst.
Du müsstest die Integer-Variable vorher in einen String umwandeln, es ist aber bei weitem besser die von cofi vorgeschlagene Stringformation zu nutzen.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten