2017-09-20 14 views
0

このコードは読み込み機能にエラーがありますが、何が原因であるのかわかりません。私は別のファイルからクラス定義をインポートしていますが、プログラムはファイルをコンピュータのテキストとして保存し、プログラムはデータをロードすると通知しますが、データの表示を呼び出すときにエラーが発生しました。テキストファイルをロードする際の問題

from roster2 import rosterClass 

outFile = open("c:\roster.txt", "wt") 
outFile.write("The text and data will be save as a file on c:\roster.txt") 
outFile.close() 
inFile = open("c:\roster.txt", "rt") 
contents = inFile.read() 
print (contents) 
def saveData(roster): 
    filename = input("Enter file name:") 
    print("Saving file.....") 
    outFile = open(filename, "wt") 
    for x in roster.keys(): 
     name = roster[x].getname() 
     phone = roster[x].getphone() 
     jersey = str(roster[x].getjersey()) 
     outFile.write(name+","+phone+","+jersey+"\n") 
    print("File saved.") 
    outFile.close() 
def loadData(): 
    roster = {} 
    filename = input("Enter file to load: ") 
    inFile = open(filename, "rt") 
    print("Loading data......")  
    while True: 
     inLine = inFile.readline() 
     if not inLine: 
      break 
     inLine = inLine[:-1] 
     name, phone, jersey = inLine.split(",") 
     roster[name] = name, phone, jersey   
    print("Roster data loaded succesfully") 
    inFile.close() 
    return roster 

def displayMenu(): 
    print ("======Main Menu======") 
    print ("1. Display roster ") 
    print ("2. Add player:") 
    print ("3. Remove player: ") 
    print ("4. Edit player information.") 
    print ("5. Save data.") 
    print ("6. Load data.") 
    print ("9. Exit Program") 
    print ("") 
    return int(input("Select a number to continue: ")) 

def printRoster(roster): 
    if len(roster) == 0: 
     print ("no current players in roster")   
    else: 
     for x in roster.keys(): 
      roster [x].displayData() 

def addRoster (roster): 
    newName = input("Enter new player's name:") 
    newPhone = input("Player's phone number: ") 
    newJersey = int(input("Player's jersey number:")) 
    roster[newName] = rosterClass (newName, newPhone, newJersey) 
    return roster 

def removeRoster(roster): 
    removeName = input("enter player's name to be removed:") 
    if removeName in roster: 
     del roster[removeName] 
    else: 
     print("player not found in list.") 
    return roster 

def editroster(roster): 
    oldName = input("Enter the name of the player you want to edit:") 

    if oldName in roster: 
     newName = input ("Enter the new player's name:") 
     newPhone = input("Player's new phone number:") 
     newJersey = int(input("Player's new jersey number:")) 
     roster[oldName] = rosterClass (newName, newPhone, newJersey)      
    else: 
     print ("no player exist in roster") 
    return roster   

print ("Welcome to the Roster Manager") 

roster = {} 
menuSelection = displayMenu() 
while menuSelection !=9: 
    if menuSelection == 1: 
     printRoster(roster) 
    elif menuSelection == 2: 
     roster = addRoster(roster) 
    elif menuSelection == 3: 
     roster = removeRoster(roster) 
    elif menuSelection == 4: 
     roster = editRoster(roster) 
    elif menuSelection == 5: 
     roster = saveData(roster) 
    elif menuSelection == 6: 
     roster = loadData() 
    menuSelection = displayMenu() 
print ("Goodbye......") 
+0

コードの2行目に見積もりがありません。 Stack Overflowにコピーするときにこれが単なる転記エラーであると仮定しますが、将来このような単純なエラーがすべて修正されていることを確認してください。 – user3354059

+0

関数宣言でコードブロックをインデントする必要があることにも注意してください。 – HyperNeutrino

+0

どのエラーが表示されますか? – lapinkoira

答えて

0

私は、コンパイルするようにコードのインデントを修正しようとしました。もちろん、あなたのコードがインポートするコードがないので、私のコンピュータ上では動作しません。しかし、あなたが指定した診断メッセージは、62行目のprintRosterの[x] .displayData()のAttributeError: 'tuple'オブジェクトに属性 'displayData'がありません。

displayDataが表示されますが、このコード行であることを、あなたのコード内で唯一の場所:

roster [x].displayData() 

それはエラーメッセージと一致します!メッセージはroster[x]が私の好奇心を高めるタプルだと言います。 roster[x]はどのように定義されていますか?

異なる方法:

roster[name] = name, phone, jersey 
roster[newName] = rosterClass (newName, newPhone, newJersey) 

私は私が正しいとする道を推測することができ、ほぼ50年間、プログラミングをしてきました。どう思いますか?

関連する問題