Seite 1 von 1
Hangman Hilfe benötigt
Verfasst: Mittwoch 27. Juli 2011, 12:15
von seiby
Moinsen,
Ich hab gestern Nacht so aus Langeweile versucht Hangman zu programmieren.
Wie man merkt, hänge ich noch immer dran.
Erstmal der Code:
http://paste.pocoo.org/show/447384/
Und jetzt die Probleme:
- Nach der ersten Eingabe werden die _ und Buchstaben untereinander angezeigt (Ursache ist die for Schleife, Lösung fällt mir nicht ein)
- Der turns Zähler ist an der verkehrten Stelle, und zählt so zu oft.
- es fehlt ein Vergleich von geratenen Wort und tatsächlichen Wort
- Umlaute werden (wegen Windoof) nicht gescheit angezeigt, auch nicht mit "u" vor dem String.
Da bei mir die Konzentration allmählich nachlässt, frage ich hier mal kurz, vlt hat einer von euch ja grade nichts zu tun
MfG
seiby
Re: Hangman Hilfe benötigt
Verfasst: Mittwoch 27. Juli 2011, 12:18
von sparrow
Glaubst du errnsthaft jemand schaut sich deinen Code an der zu 90% aus Wörtern für das Spiel besteht?
Wohl eher nicht.
Wenn du dein Programm soweit kürzt, dass es überschaubar und trotzdem funktionstüchtig ist (zum Beispiel mit 2 statt 4.223.343 Wörtern in der Auwahl) würde das die Chance erheblich verbessern.
Re: Hangman Hilfe benötigt
Verfasst: Mittwoch 27. Juli 2011, 12:22
von Hyperion
Du solltest Deinen Code mal besser formatieren! Was sollen alle diese Leerzeilen?
Zudem musst Du in Code, welchen Du hier postest, nicht 100derte Daten drin stehen haben - ein / zwei Wörter hätten ja wohl gereicht
Sollte ein Code tatsächlich mal länger ausfallen (so größer ca. 25 Zeilen), dann lagere ihn in ein Paste-Bin aus (etwa das im Forum integrierte oder paste.pocoo.org).
@1) Erstelle erst den kompletten String (oder eine Liste aus Zeichen) und gib diesen erst dann aus. Bei einer Liste kannst Du das per
lösen
@Umlaute: s. meine Signatur

Re: Hangman Hilfe benötigt
Verfasst: Mittwoch 27. Juli 2011, 12:29
von seiby
So,
sry wegen der langen Wörterliste, war wohl noch etwas zu müde um zu denken

paste-bin probiere ich sofort nach diesem post aus.
umlaute lese ich gleich auch.
print "".join(liste) müsste dann gegen was getauscht werden?
EDIT:
Die Leerzeichen sind ne Angewohnheit von mir, ist so imho etwas übersichtlicher.
Re: Hangman Hilfe benötigt
Verfasst: Mittwoch 27. Juli 2011, 13:01
von Hyperion
Leerzeichen != Leerzeilen - und letztere dienen nur dann der Übersicht, wenn sie sinnvoll gesetzt sind (z.B. nach Funktionen 2 Stück usw.).
@Code:
Du solltest Dir dringend noch mal Funktionen angucken und insbesondere Rückgabewerte. Credo Nummer eins: `global` sollte man nie nutzen (außer, man weiß, wieso!) Du brauchst es jedenfalls besser nicht.
Die Wörter würde ich nicht als (mehrzeiligen) String angeben, sondern direkt als Liste. Später lagert man das ja eh in eine separate Datendatei aus, bei der man dann entsprechend ein Parsing benötigt; das muss man ja aber nicht "vorziehen".
Schau Dir doch mal die `join`-Methode von Strings an; entweder in der Doku oder Du probierst die einfach mal in einer Konsole aus
Es fehlt in der Logik noch der Abgleich, ob alle Buchstaben schon geraten wurden!
Als letztes: Wenn Du einfach mal spicken willst, dann gibt es hier im Board schon zig Threads, in denen sich div. Ansätze finden lassen

Aber ok, zu Beginn erst einmal selber ein funktionierendes Spiel basteln ist schon sinnvoll!
Re: Hangman Hilfe benötigt
Verfasst: Mittwoch 27. Juli 2011, 14:12
von seiby
Jo, ich habe absichtlich einen weiten Bogen um die bestehenden Hangman Threads gemacht, da würde ich zuviel abschreiben^^
Du meinst also anstatt Werte Global zu setzen, einfach so:
Code: Alles auswählen
def choose_word():
wahl = random.choice(liste)
print "_ " * len(wahl)
game(wahl)
def game(wahl):
...
join schau ich mir jetzt an,bei der Logik fehlt im Prinzip ne Variable in der die passenden Buchstaben drinnenstehen, die mit dem Wort abgeglichen wird.
Soweit richtig?
Re: Hangman Hilfe benötigt
Verfasst: Mittwoch 27. Juli 2011, 15:19
von CM
Nein, eher nicht so.
1. Beeinhaltet die Funktion "choose_word" auch eine Ausgabe, die der Name der Funktion nicht impliziert. Sie macht also etwas, was man so nicht erwartet.
2. Hat die Funktion keinen Rückgabewert und ruft ihrerseits eine im Ablauf weiter untenstehende Funktion auf.
Vielleicht besser so etwas ("selbstgemachter Pseudocode mit viel dran auszusetzen")?
Code: Alles auswählen
def foo([args]):
<logic in here>
return value
def bar(value, [further args]):
<logic in here>
[return another value]
if __name__ == "__main__":
<whatever>
value = foo(...)
bar(value, ...)
Also, das als Kurzfassung ohne viel Erklärung zum Thema Funktionen, die Dir das Tutorial besser geben kann.
HTH
Christian