2016-11-04 2 views
0
studentList=[] 

reading=True 

readList=open("test10.4.3.txt","r") 

for item in readList: 
    studentList.append(item) 
for item in studentList: 
    print(item) 
input("\nPress ENTER") 

menulist=print("1. Print the list", 
     "2. Add a name to the list", 
     "3. Remove a name from the list", 
     "4. Change an item in the list", 
     "9. Quit") 

def menu(): 
    aMenu=input("please select a number") 
    return aMenu 
t=True 
while t: 
    target=menu() 
    if target=="1": 
     print(studentList) 
    if target=="2": 
     Addname=input("Type in a name and major to add:") 
     list=list.append(Addname) 
     print(menulist) 
    if target=="3": 
     Removename=input("What name and major would you like to remove:") 
     list=list.remove(Removename) 
     print(menulist) 
    if target=="4": 
     Changename=input("What name and major would you like to change:") 
     changetoname=input("What is the new name and major:") 
     list=list.replace(Changename, changetoname) 
     print (menulist) 

    if target=="9": 
     t=False 
     print("good bye") 
    else: 
     print (menulist) 

So versuche ich Änderungen an einer Liste zu machen, die in einer TXT-Datei gespeichert wird. Innerhalb der txt-Datei gibt es drei Namen und diese drei Völker akademische majors.Iv ein Programm geschrieben, das mich um Änderungen vorzunehmen ermöglichen sollte (wie ich glaube, ich bin auf all dies sehr neu), aber ich kann es zum Beispiel laufen erhalten, wenn I-Eingang 2 einen Namen hinzufügen und Haupt es gibt mirWie kann ich Änderungen an einer Liste vornehmen, die in einer TXT-Datei gespeichert ist?

Traceback (most recent call last): 
    File "D:/py/Scripting/class.py", line 52, in <module> 
    list=list.append(Addname) 
TypeError: descriptor 'append' requires a 'list' object but received a 'str' 

Process finished with exit code 1 

oder wenn ich Eingang 3 auf einen Namen entfernen es gibt mir

Traceback (most recent call last): 
    File "D:/py/Scripting/class.py", line 56, in <module> 
    list=list.remove(Removename) 
TypeError: descriptor 'remove' requires a 'list' object but received a 'str' 

wenn ich Eingang 4 ich

Traceback (most recent call last): 
    File "D:/py/Scripting/class.py", line 56, in <module> 
    list=list.remove(Removename) 
TypeError: descriptor 'remove' requires a 'list' object but received a 'str' 

wie Sie die e Scheußlichkeiten sind weniger gleich. Ich kann nicht herausfinden, was ich falsch mache. Irgendwelche Ideen oder Beispiele würden geschätzt werden.

+2

nicht verwenden 'list' als Variable, und füge/Entfernen sind an Ort und Stelle. Ordnen Sie das Ergebnis nicht zu, Sie werden Ihre Liste zerstören. –

+0

'print' gibt' None' zurück –

+0

Sie müssen möglicherweise einige Dinge dort aufräumen. 'studentList' wird nur einmal gelesen, aber Sie verweisen nicht darauf, wenn Sie Elemente anfügen/entfernen. Und ja, benutze 'list' nicht als Variablennamen. – sal

Antwort

0

ich die meisten Ihrer Fehler behoben und einige Vorschläge und Erklärungen als Kommentare in dem Code hinzugefügt.

studentList=[] 
# This variable doesn't appear to be used anywhere 
reading=True 

readList=open("test10.4.3.txt","r") 

for item in readList: 
    # I added a call to the .strip() method for the item which removes 
    # whitespace in front of and at the end of the string. Effectively 
    # this removes the linebreak from the file 
    studentList.append(item.strip()) 
for item in studentList: 
    print(item) 
input("\nPress ENTER") 

# I reformated the output of the menu a little bit, it is now a string 
# with a few linebreaks (\n) --> You might want to call this variable menu 
# now as it is no longer a list (although it wasn't a list before) 
menulist="1. Print the list\n2. Add a name to the list\n3. Remove a name from the list\n4. Change an item in the list\n9. Quit" 
# print should be a separate statement 
print(menulist) 

def menu(): 
    # I added a space after number, which looks better in the output 
    # (In my opinion) --> Gap between your text and the thing the user enters 
    aMenu=input("please select a number ") 
    return aMenu 

t=True 
while t: 
    target=menu() 
    if target=="1": 
     print(studentList) 
    if target=="2": 
     # Added a space again 
     Addname=input("Type in a name and major to add: ") 
     # You want to append it the the studentList 
     # --> you need to call append on that list 
     studentList.append(Addname) 
     # This print statement is redundant, since the menu will be 
     # printed by the else case of the if target=="9" conditions 
     # --> The menu will be printed twice 
     print(menulist) 
    if target=="3": 
     # Added a space again 
     Removename=input("What name and major would you like to remove: ") 
     # You want to remove the name from the studentList 
     # --> you need to call remove on that list 
     studentList.remove(Removename) 
     # This print statement is redundant, since the menu will be 
     # printed by the else case of the if target=="9" conditions 
     # --> The menu will be printed twice 
     print(menulist) 
    if target=="4": 
     # Added spaces again 
     Changename=input("What name and major would you like to change: ") 
     changetoname=input("What is the new name and major: ") 
     # You want to replace values inside of the studentList 
     # --> you would need to call some sort of replace function on that list 
     #  unfortunately lists don't actually have a replace function 
     # --> I don't want to cheat you out of the learning experience, you 
     #  already used functions which would allow you to achieve a replace-like 
     #  behaviour. 
     # studentList.replace(Changename, changetoname) 

     # This print statement is redundant, since the menu will be 
     # printed by the else case of the if target=="9" conditions 
     # --> The menu will be printed twice 
     print (menulist) 

    if target=="9": 
     t=False 
     print("good bye") 
    else: 
     print (menulist) 

Ich habe den Codierungsstil nicht kommentiert, da Sie eindeutig ein Anfänger sind. Allerdings würde ich vorschlagen, haben Sie einen Blick auf einige der folgenden Begriffe

  • if, elif, else - die Art, wie sie sich unterscheiden und können in Kombination verwendet werden, um den Fluss des Codes zu steuern (docs).

  • list s in Python - Sie scheinen Teile davon falsch verstanden zu haben, wie sie tatsächlich funktionieren, hoffentlich kann die docs dies aufklären.

  • Lesen und Schreiben von und nach Dateien im docs.

Hinweis: Wie ich in dem Code im Kommentar darauf hingewiesen, Listen haben keine replace Funktion. Ich habe nicht offengelegt, wie Sie das Verhalten einer solchen replace-Funktion erreichen können, da dies etwas ist, was Sie selbst herausfinden sollten - Sie haben bereits alle Funktionen verwendet, die Ihnen erlauben würden, so etwas zu tun.

+0

vielen dank !! Ich habe jedoch festgestellt, dass keine der Änderungen oder Ergänzungen, die ich mache, in der TXT-Datei vorgenommen werden, in der die Namen und Majors gespeichert sind. Idee, warum das passiert und wie ich es beheben könnte? –

+0

Ja ich weiß, Sie sind nur aus der Datei zu lesen und nicht immer die Änderungen zurück schreiben. Sehen Sie sich die letzte [link] (https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files) an, die ich zum Lesen und Schreiben von und aus Dateien - den Python-Dokumenten - bereitgestellt habe gebe ein paar Beispiele, wie das geht. – Maurice

+0

Also, wenn ich readList ändern = öffnen ("test10.4.3.txt", "r +") statt nur r würde das nicht funktionieren, da r + nach den Dokumenten, die Sie mich gerade verlinkt haben, lesen und schreiben? –

Verwandte Themen