Problem mit einer Aufgabe

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.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

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
the more they change the more they stay the same
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Es gibt `random.choice`
Stephan1993
User
Beiträge: 16
Registriert: Freitag 19. Februar 2010, 15:08

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? :D kenn ich nicht... geb mal ein beispiel bitte^^
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

import random
n = int(raw_input("Trompeterzahl: "))
trompeter = ['<','>']
kapelle = [random.choice(trompeter) for i in xrange(n)]
print kapelle
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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? :D 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.
Stephan1993
User
Beiträge: 16
Registriert: Freitag 19. Februar 2010, 15:08

wie füge ich denn einer zeichenkette weitere zeichen hinzu??? :-(
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Grundlagen lernen!

Aber ich bin ja nicht so

Code: Alles auswählen

>>> 'a' + 'b'
'ab'
the more they change the more they stay the same
Stephan1993
User
Beiträge: 16
Registriert: Freitag 19. Februar 2010, 15:08

danke :D


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 :D danke an alle :) nächstes Problem wird wahrscheinlich die grafische Darstelung sein :)
Zuletzt geändert von Stephan1993 am Samstag 20. Februar 2010, 18:39, insgesamt 1-mal geändert.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Code: Alles auswählen

for n in range(n/2):
Das muss ich jetzt nicht verstehen, oder?
MfG
HWK
Stephan1993
User
Beiträge: 16
Registriert: Freitag 19. Februar 2010, 15:08

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 .. :-/
Zuletzt geändert von Stephan1993 am Samstag 20. Februar 2010, 19:50, insgesamt 2-mal geändert.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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 ...
Stephan1993
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.. :D

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.. :-/
Jack Daniels
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

Code: Alles auswählen

kapelle = kapelle.replace("> < ","< > ")
kapelle[0] = '>'
, damit der erste immer richtig steht...
Stephan1993
User
Beiträge: 16
Registriert: Freitag 19. Februar 2010, 15:08

problem is ja, dass kapelle keine liste is.. :D
Benutzeravatar
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("> < ","< > ")
Hiermit aber ;)
Jack Daniels
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 :D. Fänd ich cool, wenn dieses Feature mal noch realisiert wird.

Naja, dann halt Cofi's Lösung... ;)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Jack Daniels hat geschrieben:Ich hab gedacht, dass man bei Strings auch solche Zuweisungen machen kann, aber ich habs grade ausprobiert, es geht nicht :D.
Was für Zuweisungen meinst du? Und nein, Strings verändern geht nicht und das ist auch mit gutem Grund so.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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. :-(
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Jack Daniels
User
Beiträge: 30
Registriert: Freitag 1. Januar 2010, 11:38

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

Code: Alles auswählen

kapelle[0] = ">"
,was ja einer Veränderung eines Strings entsprechen würde... Warum darf man keine Strings verändern? Ich fänd das praktisch...
Antworten