2016-06-05 13 views
-1

Was ich brauche, zu lösen ist:eine Klasse und den Zugang es von einer anderen Klasse

Create class "Scores" and "Player". 
Class score should have attributes level, score, time. 
Class player should have as information a name and a list of Scores, 
In class player implement the method maxLevel(), 
    which returns the max level achieved by the player. 

ich so das Gefühl, etwas wirklich einfach, aber ich kann immer noch nicht herausfinden.

  1. Wie kann ich eine Liste von Punkten genau machen?
  2. Sobald das obige getan ist, wie kann ich auf die Liste der Ergebnisse für jeden Spieler zugreifen?

Vielen Dank!

Ich habe das versucht, aber ich weiß nur, dass ich Dinge falsch mache.

class Score(): 
    level = 0 
    score = 0 
    time = 0 

    def __init__(self,level,score,time): 
     Score.level = level 
     score.score = score 
     Score.time = time 

class Player(): 
    def __init__(self, name, scores): 
     self.name = name 
     self.scores = scores 
    def maxLevel(): 
     ##Do stuff to calculate the max 


John = Player("John", [Score(100,1456,50), Score(210,1490,100)]) 


John.maxLevel() 
+0

Bitte zeigen Sie, was Sie recherchiert haben und was Sie versucht haben. –

+0

Bearbeitet, es muss schrecklich sein, ich bin ein echter Anfänger, danke! – Alejo

Antwort

0

Ich empfehle das Erstellen von Klassen, die für ein Objekt und nicht eine Liste von ihnen stehen. Ich würde den Namen der Klasse "Scores" in "Score" ändern und dann würde ich so viele Score-Objekte machen, wie ich möchte. Dann könnte ich eine Liste namens Scores erstellen. Fügen Sie nun jedes Punktobjekt in die Punkteliste ein. Um nun auf die Spielstände jedes Spielertyps Player.scores zuzugreifen, die die gesamte Liste anzeigen, wählen Players.scores [1] das zweite Element in der Liste aus.

class Score(object): 
    level = 0 
    score = 0 
    time = 0 

    def __init__(self,level,score,time): 
     self.level = level 
     self.score = score 
     self.time = time 

class Player(object): 
    def __init__(self, name, scores): 
     self.name = name 
     self.scores = scores 

    def maxLevel(self): 
     max_level = 0 
     for score in self.scores: 
      if score.level > max_level: 
       max_level = score.level 

     return max_level 

if __name__ == "__main__": 
    jon = Player("John", [Score(100,1456,50), Score(210,1490,100)]) 
    # Player Name 
    print "Name:", jon.name 
    # Score Objects 
    print "Score Objects:", jon.scores 
    # Score Level of 1st score 
    print "Score Level 1st Score:", jon.scores[0].level 
    # Score Level of 2nd score 
    print "Score level 2nd Score:", jon.scores[1].level 

    # Max Level info 
    max_level = jon.maxLevel() 
    print "Max-Level:", max_level 
+0

Hmm, danke für die Antwort. Wäre es zu viel verlangt zu fragen, ob Sie das mit etwas Code erklären könnten? Vielen Dank – Alejo

0

Ich denke, das Hauptproblem ist, dass Sie die level, score, time als statische Klassenvariablen definiert haben.

class Score(): 
    #level = 0 "these should not be here" 
    #score = 0 
    #time = 0 

    def __init__(self,level,score,time): 
     #you are not defining them for a class, but for a class instance, so each individual instance of the object score 
     self.level = level 
     self.score = score 
     self.time = time 

class Player(): 
    def __init__(self, name, scores): 
     self.name = name 
     self.scores = scores 
    def maxLevel(): 
     ##Do stuff to calculate the max 


John = Player("John", [Score(100,1456,50), Score(210,1490,100)]) 


John.maxLevel() 

Auch, wenn die Partitur Klasse wird alle anderen Attribute oder spezielle Methoden nicht mit, sollten Sie die namedtuple Klasse. Es dient einem einfachen Zweck besser.

from collections import namedtuple 

Score = namedtuple('Score', ['level', 'score', 'time'])  
Verwandte Themen