Variable erhöhen

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.
Antworten
CodeMaster
User
Beiträge: 22
Registriert: Mittwoch 15. September 2010, 21:37

Guten Tag.

Ich bastel schon die ganze Zeit an ein paar sachen, bei denen man seinen Score erhöhen kann.
so

Code: Alles auswählen

#-*- coding:utf8 -*-
from random import*

Score = 0
unter random import erstell ich ja die variable Score mit dem wert 0
und in einer function ( def ...(): ) will ich diese erhöhen, klappt aber nicht

also so hier:

Code: Alles auswählen

Score = Score + (15 + 15/Versuche)
aber es wird immer ein Error ausgeschossen, woran kann das liegen?

MfG CodeMaster
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

CodeMaster hat geschrieben:Guten Tag.

Ich bastel schon die ganze Zeit an ein paar sachen, bei denen man seinen Score erhöhen kann.
so

Code: Alles auswählen

#-*- coding:utf8 -*-
from random import*

Score = 0
[…]
also so hier:

Code: Alles auswählen

Score = Score + (15 + 15/Versuche)
aber es wird immer ein Error ausgeschossen, woran kann das liegen?
:twisted: Das können wir doch nicht wissen, musst schon schreiben welcher Error!
Edit: Quellcode wird dazu ebenfalls benötigt (bzw. ist er sehr hilfreich)


Ansonsten:

Code: Alles auswählen

Score += 15*2/Versuche
Ist schöner, IMHO.
Edit #2:
Oder gleich das hier:

Code: Alles auswählen

Score += 30/Versuche
;)[/i]
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ich würde mal vermuten das er Score nicht erhöhen kann da diese in der Funktion gar nicht bekannt ist.

Du solltest diese als Parameter übergeben und mit einem return wieder zurück schreiben.
Zudem variablen namen sollten klein sein.

So etwa zum Beispiel:

Code: Alles auswählen

score = 0

def score_up(score):
    trys = 3
    return score + 30 / trys

score = score_up(score)
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
CodeMaster
User
Beiträge: 22
Registriert: Mittwoch 15. September 2010, 21:37

Ok danke, es lag an den parametern und dem return :)
Danke !
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wenn man etwas wie einen global veränderbaren Namen möchte, kann man das recht elegant über ein Klassenattribut lösen:

Code: Alles auswählen

class Score(object):
    def __init__(self, startval=0):
        self.score = startval
    def score_up(self, tries=3):
        self.score += 30 / tries
Natürlich lässt sich an den Benennungen noch feilen. Außerdem sollte die 30, wenn das ein fester Wert ist, auch als Konstante gebunden werden und nicht einfach so als Zahl im Quelltext stehen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

snafu hat geschrieben:Wenn man etwas wie einen global veränderbaren Namen möchte, kann man das recht elegant über ein Klassenattribut lösen:
Du zeigst aber eher ein "Instanzattribut", oder nicht? Unter Klassenattribut würde ich das verstehen, in Kombi mit einer "globalen" Hochzählmethode:

Code: Alles auswählen

class Score(object):
    score = 0

    @classmethod
    def score_up(self):
        self.score += 1
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
achilles_69
User
Beiträge: 21
Registriert: Dienstag 31. März 2009, 14:05
Wohnort: Bielefeld

Edit #2:
Oder gleich das hier:

Code: Alles auswählen

Score += 30/Versuche
;)[/i]
Sorry, aber es gilt "Punkt- vor Strichrechnung":

a + a/b != 2a/b

So ist's richtig:

a + a / b == a(1 + 1/b)
funkheld
User
Beiträge: 258
Registriert: Sonntag 31. Oktober 2010, 09:26

Ihr pytho/pyromanen-techniker.
Was ist es den nun "klasse" oder "instanz"... :D

Gruss
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Klasse a:

Code: Alles auswählen

class a(object):
    pass
Instanz b:

Code: Alles auswählen

b = a()
@achilles_69
Danke für den Hinweis :D - vergisst man leicht, deswegen sollte man auch Klammern, auch wenn es nicht nötig ist.
also aus 15 + 15/tries, sollte man besser 15 + (15 / tries) machen.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

funkheld hat geschrieben:Ihr pytho/pyromanen-techniker.
Was ist es den nun "klasse" oder "instanz"... :D
Das erinnert mich an einen älteren Programmierer, welcher mir, vor etwa drei Jahren, total begeistert von diesem "neuen" OOP-Konzept erzählt hat, in das er sich unbedingt mal einarbeiten will :D
Xynon1 hat geschrieben:Danke für den Hinweis :D - vergisst man leicht, deswegen sollte man auch Klammern, auch wenn es nicht nötig ist.
Wenn du es so leicht vergisst, dann solltest du besser daran arbeiten, dass du es behältst und nicht Klammern setzen ;-)
Das Leben ist wie ein Tennisball.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

naja, bei dem geht es vieleicht noch ohne, aber habe mal sowas 3 * 3 + 2**4 ** 3 * 12 + 2**4*3
(leicht übertrieben :mrgreen: )
Da noch ohne Klammer alles zu behalten finde ich Blödsinn, was wird von python in den PEPs vorgegeben ?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Xynon1 hat geschrieben:Da noch ohne Klammer alles zu behalten finde ich Blödsinn, was wird von python in den PEPs vorgegeben ?
"readability counts"
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ok, ich spezifizier die Frage vieleicht etwas.

Wann sollten bei Mathemathischen Berechnung Klammern gesetzt werden ?
Gibt es dort direkt ein PEP dafür, oder gilt tatsächlich nur die allgemeine Regel ?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Xynon1 hat geschrieben:Ok, ich spezifizier die Frage vieleicht etwas.

Wann sollten bei Mathemathischen Berechnung Klammern gesetzt werden ?
Gibt es dort direkt ein PEP dafür, oder gilt tatsächlich nur die allgemeine Regel ?
Müssen musst du nur, wenn die Berechnung das erfordert.

Für mich gilt allerdings gesunder Menschenverstand. Ich stelle mir vor, dass ein anderer Softwareentwickler (oder ich selber nach 6 Monaten) auf den Code schaut. Wenn man dann nicht sofort sehen kann was da wie zusammengerechnet wird, dann sollten passende Klammern verwendet werden.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

/me hat geschrieben:Müssen musst du nur, wenn die Berechnung das erfordert.
Deswegen schrieb ich ja "sollten" und nicht "müssen" - hach, deutsch ist schön. :mrgreen:

Ok, ich entnehme dem mal das es bei mehr als drei Zahlen angebracht ist :D
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hyperion hat geschrieben:Du zeigst aber eher ein "Instanzattribut", oder nicht?
Ja, das meinte ich auch. Hab mich im Ausdruck vertan.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Xynon1 hat geschrieben:Ok, ich entnehme dem mal das es bei mehr als drei Zahlen angebracht ist :D
Es ist dann angebracht, wenn es die Lesbarkeit verbessert. In den meisten Fällen reichen bereits einfache Leerzeichen:

Code: Alles auswählen

(x*cos(alpha) - y*sin(alpha), x*sin(alpha) + y*cos(alpha)
Etwas unüberischtlich wird es mit exponenten, dort helfen Klammern ein wenig. Oftmal ist es aber eh günstig, wenn meine eine Berechnung in mehrere Teile trennt.
Das Leben ist wie ein Tennisball.
Antworten