Seite 2 von 3
Verfasst: Samstag 20. Februar 2010, 13:21
von Dav1d
Weil zufall gleichbleibt
Code: Alles auswählen
import random
n = int(raw_input("Trompeterzahl: "))
kapelle=[]
liste=['<','>']
for n in range(n):
t=liste[random.randint(0,1)]
kapelle.append(t)
print kapelle
Verfasst: Samstag 20. Februar 2010, 13:30
von cofi
Es gibt `random.choice`
Verfasst: Samstag 20. Februar 2010, 13:35
von Stephan1993
danke @ Dac1d

wie kann ich denn replace auf die liste anwenden? weil soweit ich das verstanden habe, ändert replace die zeichenkette in eine andere.. nur habe ich ja keine wirklich zeichenkette in meiner liste...
@ cofi
random.choice?

kenn ich nicht... geb mal ein beispiel bitte^^
Verfasst: Samstag 20. Februar 2010, 13:41
von cofi
Code: Alles auswählen
import random
n = int(raw_input("Trompeterzahl: "))
trompeter = ['<','>']
kapelle = [random.choice(trompeter) for i in xrange(n)]
print kapelle
Verfasst: Samstag 20. Februar 2010, 13:50
von numerix
Stephan1993 hat geschrieben:wie kann ich denn replace auf die liste anwenden? weil soweit ich das verstanden habe, ändert replace die zeichenkette in eine andere.. nur habe ich ja keine wirklich zeichenkette in meiner liste...
random.choice?

kenn ich nicht... geb mal ein beispiel bitte^^
Du brauchst keine Liste. Darauf habe ich schon hingewiesen. Und das hatte einen guten Grund: Listen haben keine replace()-Methode und ohne eine replace()-Methode ist es erheblich schwieriger, den "Umdrehprozess" richtig zu implementieren.
Warum machst du es nicht so, wie ich es dir oben mit dem Pseudocode gezeigt habe: Kapelle als Zeichenkette, nicht als Liste. Dann lässt sich jeder Umkehrprozess mit einem einfachen replace() - Sonderbehandlung 1. Trompeter nicht vergessen - realisieren. Eine Zeile, fertig.
choice() brauchst du nicht. Wenn ihr in der Schule randint() verwendet habt, dann mach es damit.
Verfasst: Samstag 20. Februar 2010, 15:01
von Stephan1993
wie füge ich denn einer zeichenkette weitere zeichen hinzu???

Verfasst: Samstag 20. Februar 2010, 15:03
von Dav1d
Grundlagen lernen!
Aber ich bin ja nicht so
Verfasst: Samstag 20. Februar 2010, 15:36
von Stephan1993
danke
so habe mal das ein wenig erweitert und bin atm hier
Code: Alles auswählen
import random
n = int(raw_input("Trompeterzahl: "))
kapelle= '1ter T.'#soll den ersten Trompeter darstellen
n2=n-1 # damit die Raw_input-Eingabe für die folgende Schleife korrekt bleibt
liste=['<','>']
for n in range(n2):
t=liste[random.randint(0,1)]
kapelle=kapelle+t
print kapelle
for test in range (20):#nur zum Test ob es funktioniert
kapelle=kapelle.replace("><", "<>")
kapelle=kapelle.replace("1ter T.<","1ter T.>")
print kapelle
So muss das ganze jetzt nurnoch mit einer tastend-drück-funktion(:D) machen und den 1ten T. anders aussehen lassen

danke an alle

nächstes Problem wird wahrscheinlich die grafische Darstelung sein

Verfasst: Samstag 20. Februar 2010, 15:44
von HWK
Das muss ich jetzt nicht verstehen, oder?
MfG
HWK
Verfasst: Samstag 20. Februar 2010, 18:39
von Stephan1993
jo, habe vergessen das wieder zu ändern
Habe wieder ein Problem.. undzwar mit dem erstem Trompeter...
Ich wollte
Code: Alles auswählen
kapelle=kapelle.replace("><","<>")
kapelle=kapelle.replace("1ter T.<","1ter T.>")
print kapelle
in einer while schleife packen.. nur wusste ich die bedingung nich zu formulieren.. die bedingung is ja das 'kapelle' == '>'*n ist... also
Code: Alles auswählen
while (kapelle == '>'*n):
kapelle=kapelle.replace("><","<>")
kapelle=kapelle.replace("1ter T.<","1ter T.>")
print kapelle
nur habe ich da meinen lieben 1ten Trompeter der ja garnicht wie '>' aussieht.... also muss ich es irgendwie hinkriegen, dass er genauso wie '>' aussieht, aber das 'replace' nicht beachtet .. :-/
Verfasst: Samstag 20. Februar 2010, 18:50
von numerix
Also, ich finde, du hast dich bis jetzt tapfer geschlagen! - Ist doch gar nicht so schlecht gelaufen.
Zum 1. Trompeter: Auch dieser sieht ja so ">" oder so "<" aus. Genauer gesagt: Am Anfang so "<" und nach dem ersten Kommando immer ">".
Eine Lösung des Problems, dass einerseits sich der 2. Trompeter umdrehen muss, wenn er so "<" aussieht, andererseits sich der 1. Trompeter aber nicht umdrehen darf, könntest du wie folgt lösen:
Zunächst ignorierst du, dass sich der 1. Trompeter nicht umdrehen darf und wendest das replace() einfach auf die ganze Kapelle an.
Die neu ausgerichtete Kapelle setzt dann neu zusammen aus dem 1. Trompeter, der brav nach rechts schaut, und der restliche Kapelle ab dem 2. Trompeter.
Zu deiner while-Schleife: Die Schleife wird so lange wiederholt, wie die angegebene Bedingung WAHR ist. Denk mal drüber nach ...
Verfasst: Samstag 20. Februar 2010, 19:51
von Stephan1993
ja danke
also mit der while schleife habe ich es jetz, obwohl es ziemlich scheiße aussieht... vor allem mit "n2" war ne notlösung..
Code: Alles auswählen
import random
n = int(raw_input("Trompeterzahl: "))
kapelle= 'l '
n=n-1
n2=n
a='> '
takt=0
liste=['< ','> ']
for n in range(n):
t=liste[random.randint(0,1)]
kapelle=kapelle+t
print kapelle
while (kapelle != 'l '+a*n2):
kapelle=kapelle.replace("> < ","< > ")
kapelle=kapelle.replace("l < ","l > ")
print kapelle
takt=takt+1
print takt, "Takte wurden gebraucht"
also wenn ich das bei dir richtig verstanden habe ungefähr so, dass ich in der schleife ersmal alles auf replace laufen lasse, dann den ersten trompeter richtig stelle und dann alles über den 2ten trompeter laufen lasse??? blicke da nicht so wirklich durch, wie du das meinst... und wie schaffe ich es denn das replace nur überm 2ten trompeter laufen lasse.. :-/
Verfasst: Samstag 20. Februar 2010, 23:01
von Jack Daniels
Lass doch das mit dem ersten Trompeter markieren einfach weg, verwende ebenfalls ein einfaches '<' oder '>' für den und schreib dann
Code: Alles auswählen
kapelle = kapelle.replace("> < ","< > ")
kapelle[0] = '>'
, damit der erste immer richtig steht...
Verfasst: Samstag 20. Februar 2010, 23:30
von Stephan1993
problem is ja, dass kapelle keine liste is..

Verfasst: Samstag 20. Februar 2010, 23:42
von cofi
Hiermit aber

Verfasst: Sonntag 21. Februar 2010, 09:47
von Jack Daniels
Ich hab gedacht, dass man bei Strings auch solche Zuweisungen machen kann, aber ich habs grade ausprobiert, es geht nicht

. Fänd ich cool, wenn dieses Feature mal noch realisiert wird.
Naja, dann halt Cofi's Lösung...

Verfasst: Sonntag 21. Februar 2010, 10:08
von Leonidas
Jack Daniels hat geschrieben:Ich hab gedacht, dass man bei Strings auch solche Zuweisungen machen kann, aber ich habs grade ausprobiert, es geht nicht

.
Was für Zuweisungen meinst du? Und nein, Strings verändern geht nicht und das ist auch mit gutem Grund so.
Verfasst: Sonntag 21. Februar 2010, 11:37
von BlackJack
Ich hab's mal in Scala versucht -- ohne mit Zeichenketten und Ersetzen auf selbigen zu "schummeln":
http://paste.pocoo.org/show/180729/
Ist aber wohl ein bisschen, äh, nun ja, "javaesque" geworden.

Verfasst: Sonntag 21. Februar 2010, 16:04
von HWK
Ich hab's mal in Assembler versucht:
http://paste.pocoo.org/show/180770/.
TASM erzeugt daraus eine 314 Bytes große COM-Datei. Diese kann mit
diesem Python-Script auch ohne Assembler erstellt werden.
Den meisten Platz hat fast die Routine zur Erzeugung einer Random-Zahl benötigt.
MfG
HWK
Verfasst: Sonntag 21. Februar 2010, 16:35
von Jack Daniels
Leonidas hat geschrieben:Was für Zuweisungen meinst du? Und nein, Strings verändern geht nicht und das ist auch mit gutem Grund so.
Ich meine Zuweisungen der Art
,was ja einer Veränderung eines Strings entsprechen würde... Warum darf man keine Strings verändern? Ich fänd das praktisch...