Seite 1 von 2
problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 19:43
von BerryBlue
Hallo,
ich hab ein Problem:
Und zwa, wenn ich diesen Skript ausführe wird nichts ausgegeben wie ich eigentlich will, sondern kann nur mit eneter bestätigen, und das unenedlich lang!
Ich bin für Tipps offen und auch für verbesserungen, ich bitte aber vor allem um Problemlösung!!
Code: Alles auswählen
import random
a = random.randint(1, 15)
b1 = " "
x = 0
c = True
while c:
a = random.randint(1, 15)
if a >= 10:
b1 = b1 + "E"
x = x + 1
elif a <= 12:
b1 = b1 + "S"
x = x + 1
elif x == 79:
c = False
else:
b1 = b1 + "G"
x = x + 1
print b1
so sieht das in der Konsole aus:
>>>(enter)
>>>(enter)
...
enter steht für die Entertaste die ich drücke
danke schon mal an alle die versuchen mir zu helfenm, oder helfen können
Anhang: Bin nichtgerade ein Python Prof

Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 19:47
von Hyperion
Wie rufst Du denn das Script auf?
Und bitte benutze die Python-Code-Tags!
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 19:49
von BerryBlue
ne, irendwann hab ich auch aufgehöhrt, aber wieso muss ich überhaubt mit enter bestätigen??
sry, dass ich falsche Frum erwischt hab
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 19:51
von Hyperion
BerryBlue hat geschrieben:ne, irendwann hab ich auch aufgehöhrt, aber wieso muss ich überhaubt mit enter bestätigen??
Musst Du ja eben gar nicht. Aber wie startest Du denn das Script? Du scheinst Dich ja in einer Shell zu bewegen... da musst Du es ja irgend wie aufrufen.
Man könnte natürlich zum Script selber vieles sagen - aber vermutlich sind es Hausaufgaben?
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 19:52
von BerryBlue
zur ersten Frage:
ja ich benutze IDLE
zur zweiten Frage:
nein ich programmier als Hobby
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 19:55
von pillmuncher
BerryBlue hat geschrieben:wenn ich diesen Skript ausführe wird nichts ausgegeben wie ich eigentlich will, sondern kann nur mit eneter bestätigen, und das unenedlich lang!
Code: Alles auswählen
while c:
a = random.randint(1, 15)
if a >= 10:
b1 = b1 + "E"
x = x + 1
elif a <= 12:
b1 = b1 + "S"
x = x + 1
elif x == 79:
""" wenn genau beim 80. Durchlauf a _zugleich_ kleiner als 10 und größer als 12 ist,
beende die Schleife, ansonsten wiederhole unendlich weiter. """
c = False
else:
b1 = b1 + "G"
x = x + 1
print b1
Und das hier:
Ich weis erst was ich denke, wenn ich höre was ich sage!
Sollte das nicht heißen:
Ich weiß erst, was ich programmiere, wenn ich lese, was ich tippe!
?
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 19:57
von BerryBlue
sry weiss ned was du meinst
aber wieso muss ich bestätigen ich hab ja kein raw_input() in meinem Skript :K
Anhang: ich find mein slogen ganz Ok

Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:00
von Hyperion
Hehe... ich habs auch übersehen. Schau Dir mal pillmunchers Kommentar genau an. Dann kommst Du auch drauf.
Tipp: Wenn man eine Schleife irgend wann abbrechen will, sollte man die Bedingung bei jedem Durchlauf prüfen; zumindest wenn es nach jedem Durchgang erfüllt sein kann.
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:03
von BerryBlue
danke hab verstenden , hier mein neuer skript:
Code: Alles auswählen
import random
a = random.randint(1, 15)
b1 = " "
x = 0
c = True
while c:
if x == 79:
c = False
a = random.randint(1, 15)
if a >= 10:
b1 = b1 + "E"
x = x + 1
elif a <= 12:
b1 = b1 + "S"
x = x + 1
else:
b1 = b1 + "G"
x = x + 1
print b1
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:08
von pillmuncher
BerryBlue hat geschrieben:danke hab verstenden
Super! Jetzt musst du nur noch rauskriegen, warum in b1 nie ein 'G' steht. Tipp: lies meinen o.s. Kommentar nochmal, am besten dreimal und gaaaaaaanz laaaaangsaaaaam und LAUT!
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:10
von Hyperion
So, wobei wir nun noch mal den Rest bewerten können:
1.) Wieso das Flag `c` - Du kannst die Schleife doch auch direkt per `break` verlassen. Was uns dann zu der Frage bringt, wieso Du überhaupt `while` benutzt und nicht gleich eine `for`-Schleife, die 80 mal durchlaufen wird? Dann wäre auch das `x` überflüssig. Zudem erhöhst Du `x` bei der aktuellen Struktur einmal pro Durchlauf - das musst Du nicht dreimal formulieren, sondern kannst das einmal hinschreiben

Aber das Ändern in eine `for`-Schleife ist eh sinnvoller.
2.) Wieso speicherst Du die Ergebnisse nicht in einer adäquaten Struktur, wie einer Liste? Diese kannst Du dann am Schluss ja ganz einfach per `"".join()` zu einem String zusammenbauen.
3.) Der Aufruf von `randint` außerhalb der Schleife ist sinnlos
4.) Was sollen eigentlich "E", "S" und "G" bedeuten?
5.) Und wir haben hier immer noch PYTHON-CODE-TAGS

Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:11
von BerryBlue
hab jetzt ca 10 mal gelesen, verstehn tu ichs trotzdem ned
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:15
von Hyperion
Nenne uns doch mal eine Zahl aus Deinem Zufallsbereich, die eine der beiden oberen Bedingungen *nicht* erfüllt. Denn nur dann kommst Du ja in den `else`-Zweig.
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:16
von BerryBlue
hab de Code noch mal vereinfacht, haffe es passt jetzt;(er funktioniert sogar

)
Code: Alles auswählen
import random
b1 = " "
x = 0
c = True
while c:
if x == 79:
c = False
else:
x = x + 1
a = random.randint(1, 3)
if a == 1:
b1 = b1 + "E"
elif a == 2:
b1 = b1 + "S"
else:
b1 = b1 + "G"
print b1
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:25
von Hyperion
Hast Du Dir mal mein
Posting hier durchgelesen? Da bleibt noch viel Luft nach oben...
Edit: Nach dieser Umformulierung geht das alles sogar noch kompakter!
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:29
von BerryBlue
@hyperion:ne sry hab ich ueberlesen
ich galub ich hab die <> vertauscht oder??
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:34
von /me
BerryBlue hat geschrieben:hab de Code noch mal vereinfacht
Vereinfacht sieht es etwa so aus:
Code: Alles auswählen
data = ''.join(['ESG'[random.randint(0,2)] for _ in xrange(80)])
print(data)
Edit - oder so:
Code: Alles auswählen
data = ''.join([random.choice('ESG') for _ in xrange(80)])
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:38
von Hyperion
@/me: Man kann `join` einfach einen Generator-Ausdruck übergeben
Code: Alles auswählen
data = ''.join('ESG'[random.randint(0,2)] for _ in xrange(80))
print(data)
Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:43
von /me
Hyperion hat geschrieben:@/me: Man kann `join` einfach einen Generator-Ausdruck übergeben

Ich hatte daran gedacht, es dann aber nicht ausprobiert weil ich der Meinung war es ginge nicht.

Wieder was gelernt.

Re: problem mit zufallsgenerator
Verfasst: Mittwoch 30. November 2011, 20:47
von BerryBlue
kann mir das jetzt irgendjeman mal erklären??