2016-09-05 10 views
-2

これを呼び出したときにデータを表示するために取得するには、これはコードですPythonの3 - カントは

class Roster: 
    def __init__(self, name, phone, jersy): 
     self.name = name 
     self.phone = phone 
     self.jersy = jersy 
    def setName(self, name): 
     self.name = name 
    def setPhone(self, phone): 
     self.phone = phone 
    def setnumber(self, jersy): 
     self.number = jersy 
    def getName(self): 
     return self.name 
    def getPhone(self): 
     return self.phone 
    def getNumber(self): 
     return self.jersy 
    def displayMenu(self): 
     print ("==========Selection Menu==========") 
     print ("1. Display the Roster") 
     print ("2. Add a Player to the Roster") 
     print ("3. Remove a Player from the Roster") 
     print ("4. Change a Player Name displayed in the Roster") 
     print ("5. Load the Roster") 
     print ("6. Save the Roster") 
     print ("7. Quit") 
     print() 
     return int (input ("Selection>>> ")) 
    def displayRoster(self): 
     print ("****Team Roster****") 
     print ("Player's Name:", self.name) 
     print ("Player's Telephone number:", self.phone) 
     print ("Player's Jersey number:", self.jersy) 

「名簿」クラスで定義された関数である:(私はあなたが「インポート」クラスを持っていないことを理解し)は、インポートの呼び出しがないので、自分自身への

Players = {} 

def addPlayer(Players): 
    newName = input ("Add a player's Name: ") 
    newPhone = input ("Phone number: ") 
    newNumber = input ("Jersey number: ") 
    Players[newName] = newName, newPhone, newNumber 
    return Players 


def removePlayer(Players): 
    removeName = input ("What name would you like to remove? ") 
    if removeName in Players: 
     del Players[removeName] 
    else: 
     print ("Name was not found!") 
    return Players 


def editPlayer(Players): 
    oldName = input ("What name would you like to change? ") 
    if oldName in Players: 
     newName = input ("What is the new name? ") 
     newPhone = input ("Phone number: ") 
     newNumber = input ("Jersey number: ") 
     Players[newName] = newName, newPhone, newNumber 
     del Players[oldName] 
     print ("***", oldName, "has been changed to", newName) 
    else: 
     print ("Name was not found!") 
    return Players 

def saveRoster(Players): 
    print("Saving data...") 
    outFile = open("D:\Documents\Grantham\Python Projects\Python Week Six\Roster.txt", "wt") 
    for x in Players.keys(): 
     name = Roster.getName(Players) 
     phone = Roster.getPhone(Players) 
     jersy = Roster.getNumber(Players) 
    outFile.write("name+","+phone+","+jersy+","\n") 
    print("Data saved.") 
    outFile.close() 
    return Players 

def loadRoster(): 
    Players = {} 
    filename = input("Filename to load: ") 
    inFile = open(Filename(Players), "rt") 
    print("Loading data...") 
    while True: 
     inLine = inFile.readline() 
     if not inLine: 
      break 
    inLine = inLine[:-1] 
    name, phone, jersy = inLine.split(",") 
    Players[name] = RosterClass.Players(name, phone, jersy) 
    print("Data Loaded Successfully.") 
    inFile.close() 
    return Players 

print ("Welcome to the Team Manager") 
menuSelection = Roster.displayMenu ('Players') 
while menuSelection != 7: 
    if menuSelection == 1: 
     myRoster.displayRoster (Players) 
    elif menuSelection == 2: 
     Players = addPlayer (Players) 
    elif menuSelection == 3: 
     Players = removePlayer (Players) 
    elif menuSelection == 4: 
     Players = editPlayer (Players) 
    elif menuSelection==5: 
     loadRoster(Players) 
    elif menuSelection==6: 
     saveRoster(Players) 
    menuSelection = Roster.displayMenu (Players) 
print ("Exiting Program...") 

私はこのエラーを取得しておいてください。

Traceback (most recent call last): 
    File ".idea/Adv Team Roster.py", line 108, in <module> 
    Roster.displayRoster ('Players') 
    File ".idea/Adv Team Roster.py", line 39, in displayRoster 
    print ("Player's Name:", self.name) 
AttributeError: 'str' object has no attribute 'name' 

私もセーブ/ロード・ルーチンに問題を抱えていますそれは別の投稿です。

+3

完全な 'Roster'クラスの定義を表示してください。 – alecxe

+1

クラスをインスタンス化しましたか?コードを表示 –

答えて

3

あなたのコードには、それを実行しようとする前に解決しなければならない多くの概念的な問題があり、コンパイラエラーの助けを求めるようになります。ここには3つあります。

(1)Rosterクラスはインスタンス化されるように設計されていますが、インスタンスを作成することはありません。あなたがクラスを書くときはいつも、初期の質問の中で、 "このクラスのインスタンスを作成するコードはどんな状況ですか?インスタンスを作成するために必要なデータをどのように取得するのですか?インスタンスを作成した直後のインスタンス? "

(2)Rosterクラスの名前が間違っていると、混乱する可能性があります。名簿は選手のリストです。 Rosterは、1人のプレイヤーに関するデータです。 Rosterの名前をPlayerに変更し、rosterという名前のデータ構造(現在のPlayersなど)を作成し、その変更の結果に従うことをお勧めします。

(3)ロスターとプレイヤーが何であるかを明確にしたら、「ロスターとプレーヤーはどこに保管しますか?私のコードのさまざまな部分にどのように渡しますか?私のコードの最上位レベルのプレイヤーと、まだ考えていない他のエンティティと関連付けられているべきですか?」

は、すべてのことを考えたら、あなたはdisplayPlayerPlayerクラスの関数であるべきことを、あなたはそのためdisplayPlayerdisplayRosterの名前を変更する必要があるという結論に来るかもしれません。 Playerのインスタンス、つまりmyplayerというインスタンス(これは単なる例の名前)を作成したので、今度はmyplayer.displayPlayer()と言うことができ、displayPlayerコードを実行し、selfが自動的にmyplayerインスタンスに設定されます。その時点で、不平を言っているコンパイラのエラーは消えてしまいます。なぜなら、あなたはそれを "修正"しているわけではなく、一度あなたのシステムについて明確に考えてしまうと自然に消えるからです。

そして、それはコンパイラのエラーを考える方法です。それを直す方法がすぐにわからない場合は、おそらくシステムについて明確に考えていないというサインなので、特定のエラーよりも高いレベルの問題について考えてください。

+0

NameError:名前 'myRoster'が定義されていません –

+0

私は 'myroster'を例の名前として使用していました。私は、あなたが望むものであれば、「myroster」と呼ばれる「Roster」のインスタンスをdisplayRoster()を呼び出す必要があることを意味しました。これですべてのコードが表示されたので、投稿を編集しました。 –