[Point - counter / Plx Tipps Hints] - Guessgame

Code-Stücke können hier veröffentlicht werden.
Frozen
User
Beiträge: 18
Registriert: Dienstag 6. Februar 2007, 22:37

würde gerne dass programm noch abrunden :P (ja ja ich weit! ihr fragt euch schon und wat er gemacht? ihr habt ja recht aber es hilft mir enorm)

ein counter wäre cool, bzw bei jedem richtigen guess ein punkt mehr oder einfach der counter +1

dachte es mir mal so:

Counter/Points
Guess a Number from 1-10: :::
Wow you did it
Counter/Points 1
New round

oder so :roll: :?

MfG

Gabriel
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Frozen hat geschrieben:

Code: Alles auswählen

while 1: 
    ... 
    break # While Schleife verlassen 
    
    if i == number:
        ....
Du solltest deine Kommentare besser lesen - wenn wie dort angegeben die While Schleife verlassen wird, wie soll der Teil danach jemals erreicht werden?
ganz anders als mein anfänglicher code, ich muss mich mal in deins einarbeiten und gleich die erste n00b frage was ist def?
Damit definierst du eine Funktion - du solltest dir vllt. einmal das Tutorial anschauen: http://docs.python.org/tut/tut.html
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
BlackJack

Vielleicht sollte man das "vielleicht" in dem letzten Satz durch "ganz dringend" ersetzen. ;-)
Frozen
User
Beiträge: 18
Registriert: Dienstag 6. Februar 2007, 22:37

jo kp meine lieben freunde ich habe es ja schon gestern nachgeschaut usw, dokumentation heruntergeladen tutorial von Alan Guald bin ich am lesen so wie auch das tutorial von der python seite usw

ich danke trodzdem

MfG

Gabriel :D
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Frozen hat geschrieben:ganz anders als mein anfänglicher code, ich muss mich mal in deins einarbeiten und gleich die erste n00b frage was ist def?
Vielleichst solltest du dir doch mal ein Tutorial durchlasen? def definiert eine Funktion. Der Code hat einfach Funktionen gebraucht, dadurch wurde er gleich leserlicher.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Frozen
User
Beiträge: 18
Registriert: Dienstag 6. Februar 2007, 22:37

Ich habe mal versucht anhand der gegebene hilfe was zu machen: points_counter aber klararweiße ist wieder ein fehler drinn, ich habe zwar einen zähler der aber nachdem ersten guess wieder auf 0 ist , ich vermute wegen den return points

was sagt ihr? wie kann ich es ändern plx tipps, aber bitte keine fertige codes! war eh froh dass ich den counter "geschafft" habe bis 1 :P

Code: Alles auswählen

def points_counter(computer, player):
    	 points = 0
    	 points += 1 if computer == player else False
    	 return points
und im unteren bereich wo es ausgegeben wird:

Code: Alles auswählen

if check_range(user_entry):
                print "Error: Out of range (1-10)!"

            correct = check_correct(prog_entry, user_entry)
            display_message(correct)

            if correct:
                print "Your Score: "
                print  points_counter(prog_entry, user_entry)
                print 'New round'
                break
MfG

Gabriel

oder ganze code wenn dass euch die übersicht fehlt....

Code: Alles auswählen

#!/usr/bin/env python
# -+- coding: UTF-8 -*-

import random

def greet():
    print "Welcome to the Guessing Game"

def check_range(number):
    """Checks the range of the entrered number.
    Validity range: 1 <= number <= 10"""
    valid = True if number > 10 or number < 1 else False
    return valid

def check_correct(computer, player):
    """Checks whether the value entered by the user
    is the same as the computers"""
    correct = True if computer == player else False
    return correct

def display_message(won):
    """Opens the correct files and chooses random responses,
    which will be displayed"""
    filename = 'right.txt' if won else 'wrong.txt'
    f_obj = file(filename, 'r')
    answer = random.choice(f_obj.readlines())
    f_obj.close()
    print answer,

def points_counter(computer, player):
    	 points = 0
    	 points += 1 if computer == player else False
    	 return points
    	 
def main():
    greet()
    while True:
        prog_entry = random.randrange(1, 11, 1)
        while True:
            user_entry = raw_input("Guess a Number from 1-10: ")
            try:
                # String eingabe in Zahl umwandeln
                user_entry = int(user_entry)
            except ValueError:
                # Fehler abfangen, wenn die Eingaben nicht
                # umgewandelt werden kann
                print "Error: Not a number!"

            if check_range(user_entry):
                print "Error: Out of range (1-10)!"

            correct = check_correct(prog_entry, user_entry)
            display_message(correct)

            if correct:
                print "Your Score: "
                print  points_counter(prog_entry, user_entry)
                print 'New round'
                break

if __name__ == '__main__':
    main()
Zuletzt geändert von Frozen am Samstag 10. Februar 2007, 10:39, insgesamt 1-mal geändert.
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Frozen hat geschrieben:Ich habe mal versucht anhand der gegebene hilfe was zu machen: points_counter aber 'klararweiße' ist wieder ein fehler drinn
Wenn du "klarerweise" schreiben würdest, ist es auch ein deutsches Wort und du bräuchtest keine Anführungszeichen...
ich habe zwar einen zähler der aber nachdem ersten guess wieder auf 0 ist , ich vermute wegen den return points
Ich vermute eher es liegt daran, dass points am Anfang der Funktion immer mit 0 initialisiert wird, d.h. die Funktion kann nur entweder "1" zurückgeben, oder... hmm... naja, was immer halt bei "0 + False" herauskommt, womit wir beim nächsten Problem wären:

Code: Alles auswählen

points += 1 if computer == player else False
Ist nur "syntaktischer Zucker" (der auch erst ab Python 2.5 funktioniert) für

Code: Alles auswählen

if computer == player:
    points += 1
else:
    points += False
Was in deinem Fall nicht wirklich Sinn ergibt

Code: Alles auswählen

            correct = check_correct(prog_entry, user_entry)
            display_message(correct)

            if correct:
                print "Your Score: "
                print  points_counter(prog_entry, user_entry)
                print 'New round'
                break
Und du brauchst hier eigentlich auch keine Funktion, bzw. sind die Parameter etwas eigenartig, weil es nochmals genau das gleiche macht, wie check_correct

Deine Einrückung bei points_counter ist auch nicht konsistent zum Rest des Codes, was zwar grundsätzlich noch kein Problem ist, aber du solltest 4 Spaces als Einrückung verwenden und deinen Editor so konfigurieren, dass er auch Tabs so umwandelt
[url=http://www.leckse.net/artikel/meta/profilieren]Profilieren im Netz leicht gemacht[/url]
BlackJack

Frozen hat geschrieben:was sagt ihr? wie kann ich es ändern plx tipps, aber bitte keine fertige codes! war eh froh dass ich den counter "geschafft" habe bis 1 :P

Code: Alles auswählen

def points_counter(computer, player):
    	 points = 0
    	 points += 1 if computer == player else False
    	 return points
Du bindest eine 0 an `points` addierst dann entweder 1 oder False zu der 0 und gibst das Ergebnis zurück. Und ich bin verwirrt. :shock:

Wie Luzandro schon schrieb, ist diese Form des "inline" ``if`` erst ab Python 2.5 möglich. Du solltest davon ausgehen, dass das noch nicht so weit verbreitet ist. Ich benutze zum Beispiel 2.4 bis ich auf eine Ubuntu-Version aktualisiere bei der 2.5 als Paket installiert wird. Bin jetzt auch noch bei 6.06 weil mir die 6.10 nicht wirklich etwas bringt, was ich unbedingt brauche.

Ausserdem wird empfohlen um das ``if``-Konstrukt eine Klammer zu setzen. Das ist syntaktisch nicht erforderlich, macht es aber weniger verwirrend.

Mit den `check_*` Funktionen übertreibst Du es ein wenig. Du schreibst sie komplizierter als nötig und wenn man sie vereinfacht, dann sind die wirklich einfachen Ausdrücke keine Funktionen wert.

Code: Alles auswählen

def check_range(number):
    """Checks the range of the entrered number.
    Validity range: 1 <= number <= 10"""
    return 1 <= number <= 10

def check_correct(computer, player):
    """Checks whether the value entered by the user
    is the same as the computers"""
    return computer == player
Diese beiden einfachen Ausdrücke kann man auch direkt anstelle des Funktionsaufrufs schreiben.
Frozen
User
Beiträge: 18
Registriert: Dienstag 6. Februar 2007, 22:37

Luzandro hat geschrieben: Wenn du "klarerweise" schreiben würdest, ist es auch ein deutsches Wort und du bräuchtest keine Anführungszeichen...
Ok, werde ich mal machen, ist logisch

BlackJack hat geschrieben: Du bindest eine 0 an `points` addierst dann entweder 1 oder False zu der 0 und gibst das Ergebnis zurück. Und ich bin verwirrt.
Es ist schwierig dein eigegenen code auf deutsch korrekt wiederzugeben, ich habe es falsch verstanden und bin einen falschen gedankenweg gegangen.

Schon dieser Sazt hilft mir und werde veruschen wat auf die reihe zu bringen.

(Wie ist eigentlihc Ubuntu? möchte es mir auch zulegen)

MfG

Gabriel

Immer hir reinschauen es werden noch tipps gefrat :P
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Frozen hat geschrieben:(Wie ist eigentlihc Ubuntu? möchte es mir auch zulegen)
Ubuntu - nutze ich auch auf einem meiner Computer, wie BlackJack Version 6.06 (aber aus anderen Gründen). Aber auf meinem Debian habe ich hingegen Python 2.5 kompiliert, eben weil ich dann mit den neuen Features rumspielen kann.

Edit: Und den Counter müsstest du in meinem Code innerhalb der ersten while-Schleife implementieren, außerhabl der zweiten. Innerhalb der zweiten müsstest du dann einfach die Werte setzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Frozen
User
Beiträge: 18
Registriert: Dienstag 6. Februar 2007, 22:37

Hmmmm :?:
noch verstehe ich es nicht aber es ist auch schon spät :P , ne ich werde es mir dann wieder in ruhe anschauen und versuchen es hinzubekommen wenn nicht dann wende ich mich, wie immer, an euch....

Ich weiß es gehört nich hierher aber weil es schon angefange worden ist eine kurze frage über ubuntu...

Habe racks(also die ausziebahren HDs) und 2 masterplatten, ich change immer zwischen denen hängt davon ab ob ich spielen möchte oder einfach nur cs2 (photoshop cs2) use.

habe eine dritte platte bekommen 50GB habe noch mal ein rack(halt case für die HD die ich dann in meinen case reinschieben kann und damit booten kann) gefunden eingebaut und auf master gesetzt (also nicht auf slave) und möchtes darauf ubuntu installieren.

ich habe ja mehere festplatten zusammengeschaltet halt raid-controller, gibts es dann probleme mit ubuntu? musste unter xp dann noch extra treiber install damit es funktioniert.... gibt oder geht dann der treiber auch unter ubuntu? sonst noch tipps für einen der gerade ubuntu install möchte


MfG

Frozen
Zuletzt geändert von Frozen am Sonntag 11. Februar 2007, 18:56, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Könntest du deine Fragestellung nochmal klar und deutlich wiederholen? Also verständlicher als beim letzten Versuch.

Racks? CS? Mater?

Und nein, den Post kannst du nicht mehr löschen wenn jemand drauf geantwortet hat - mit gutem Grund.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Frozen
User
Beiträge: 18
Registriert: Dienstag 6. Februar 2007, 22:37

sry dass ich so schlampig geschrieben habe :shock:
habe versucht es zu verbessern... #
wenn du noch lust hast kannste es noch eimal durchlesen

MfG

Frozen
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

@Frozen: Wieso postest Du unter Code Snippest, wenn Du nur ein paar Fragen hast? Dafür gibt es hier ein eigenes Forum. Außerdem: Wieso wird der Thread laufend umbenannt?

Gruß,
Christian
Antworten