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 ...
Problem mit einer Aufgabe
-
- User
- Beiträge: 16
- Registriert: Freitag 19. Februar 2010, 15:08
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..
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.. :-/
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.. :-/
-
- User
- Beiträge: 30
- Registriert: Freitag 1. Januar 2010, 11:38
Lass doch das mit dem ersten Trompeter markieren einfach weg, verwende ebenfalls ein einfaches '<' oder '>' für den und schreib dann
, damit der erste immer richtig steht...
Code: Alles auswählen
kapelle = kapelle.replace("> < ","< > ")
kapelle[0] = '>'
-
- User
- Beiträge: 16
- Registriert: Freitag 19. Februar 2010, 15:08
problem is ja, dass kapelle keine liste is..
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Code: Alles auswählen
kapelle = ">" + kapelle[1:].replace("> < ","< > ")
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
-
- User
- Beiträge: 30
- Registriert: Freitag 1. Januar 2010, 11:38
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...
Naja, dann halt Cofi's Lösung...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Was für Zuweisungen meinst du? Und nein, Strings verändern geht nicht und das ist auch mit gutem Grund so.Jack Daniels hat geschrieben:Ich hab gedacht, dass man bei Strings auch solche Zuweisungen machen kann, aber ich habs grade ausprobiert, es geht nicht .
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
http://paste.pocoo.org/show/180729/
Ist aber wohl ein bisschen, äh, nun ja, "javaesque" geworden.
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
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
-
- User
- Beiträge: 30
- Registriert: Freitag 1. Januar 2010, 11:38
Ich meine Zuweisungen der ArtLeonidas hat geschrieben:Was für Zuweisungen meinst du? Und nein, Strings verändern geht nicht und das ist auch mit gutem Grund so.
Code: Alles auswählen
kapelle[0] = ">"
@Jack Daniels: Dann könnte man Zeichenketten nicht mehr als Schlüssel in Dictionaries verwenden, und *das* wäre äusserst unpraktisch. Insbesondere weit CPython da intern ziemlich stark drauf setzt.
Wobei das aber der Problemstellung nicht gerecht wird und zu einer Endlosschleife führen kann ...cofi hat geschrieben:Hiermit aberCode: Alles auswählen
kapelle = ">" + kapelle[1:].replace("> < ","< > ")
Sollst du ja nicht. Guckst du und liest du:Stephan1993 hat geschrieben: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.. :-/
Auch wenn es so wie gezeigt dein Problem nicht löst, findest du einen wichtigen Hinweis in der von cofi geposteten Code-Zeile.numerix hat geschrieben: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.
Vielleicht wird es doch mal Zeit für eine Musterlösung. Ich hoffe mal, dass ich die Aufgabe einigermaßen getroffen habe:
Code: Alles auswählen
(lambda f,x:f(f,x))(lambda f,x:(print("".join(map("<>".__getitem__,x)),end=""),
len(set(x))>1and(input(),f(f,[1]+list(map(lambda y:y[1]!=(not y[0]<=y[1]<=y[2]),
zip(x,x[1:],x[2:]+[x[-1]])))))),[1]+[__import__("random").choice((0,1))for _ in
range(int(input("?"))-1)])
Das Leben ist wie ein Tennisball.
@EyDu: Ich dachte ja eigentlich immer dass es beim Code-Golf um eine möglichst kurze Lösung geht. Habe hier 122 Zeichen für Python 2.x zu bieten.
Mit Möglichkeit der Benutzereingabe und zeilenweiser Weiterschaltung per Tastendruck? - Damit käme ich runter bis auf 124 Bytes.BlackJack hat geschrieben:@EyDu: Ich dachte ja eigentlich immer dass es beim Code-Golf um eine möglichst kurze Lösung geht. Habe hier 122 Zeichen für Python 2.x zu bieten.
Ich war noch gar nicht auf Golf eingestellt. Mir ging es eigentlich um eine möglichste konfuse Umsetzung, die aber immer noch sinnvoll ist. Immerhin soll sie dem Fragesteller auch helfen ^^ Entpackt sieht es aus gar nicht mehr so schlimm aus:
Vielleicht spiele ich nachher noch eine Runde mit. 122 hören sich aber schon gar nicht schlecht an.
Sebastian
Code: Alles auswählen
(lambda f, x: f(f, x))(
lambda f, x: (
print("".join(map("<>".__getitem__, x)), end=""),
len(set(x))>1 and (
input(),
f(f, [1] + list(
map(lambda y: y[1] != (not y[0]<=y[1]<=y[2]),
zip(x, x[1:], x[2:]+[x[-1]])))))),
[1]+[__import__("random").choice((0,1)) for _ in range(int(input("?:"))-1)])
Sebastian
Das Leben ist wie ein Tennisball.
@Lunar: So in der Richtung hatte ich es dann auch schon mit Scala versucht und bin zu dem Schluss gekommen, dass ich die Sprache nicht mag. Man muss da dann dauernd den Typ von der Liste überall angeben, und das ist extrem nervig und hässlich.
@numerix: Nee, Mist. Dann hast Du mich geschlagen, mit Abfrage pro Zeile bin ich bei 130. Gibst Du auch ein '?' bei der "Frage" nach der Anzahl der Trompeter aus? Wenn nicht, könnte ich da noch einmal drei Zeichen sparen und käme fast an Dich ran. Wüsste aber nicht wo ich da noch mindestens ein Zeichen rausschlagen sollte.
@numerix: Nee, Mist. Dann hast Du mich geschlagen, mit Abfrage pro Zeile bin ich bei 130. Gibst Du auch ein '?' bei der "Frage" nach der Anzahl der Trompeter aus? Wenn nicht, könnte ich da noch einmal drei Zeichen sparen und käme fast an Dich ran. Wüsste aber nicht wo ich da noch mindestens ein Zeichen rausschlagen sollte.