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 :mrgreen:

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 :mrgreen:

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 :mrgreen: )

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. :oops: Wieder was gelernt. :D

Re: problem mit zufallsgenerator

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