2016-05-19 3 views
1

Ich habe Probleme, die Benutzereingabe in meine Liste zu schreiben. Was mache ich hier falsch? Dies ist ein Adressbuch-Programm, das ich schreibe, die Aufgabe besteht darin, parallele Listen zu erstellen, die Benutzereingabedaten in der entsprechenden Liste speichern, wobei eine For- oder While-Schleife verwendet wird. Das Programm muss auch eine Suchfunktion haben, die Sie am Ende des Codes sehen können. Mein Problem, das ich habe, ist, dass das Programm Daten in meinen Listen speichert. Leider sind Listen etwas, was mir viel Ärger bereitet, ich kann es einfach nicht fassen, egal wie viel Recherche ich gemacht habe. Das Problem, auf das ich stoße, ist die Funktion append.data, wenn ich versuche, Nachname und Vorname in meine Namensliste zu schreiben. Was mache ich falsch?Ich versuche, ein Adressbuch-Programm zu erstellen, das Benutzereingaben an die entsprechende Liste anfügt.

#NICHOLAS SHAFFER 
#5/11/2016 
#MYADDRESSBOOK 

def menu(): 

    index = 0 
    size = 100 
    count = 0 

    answer = raw_input("Are You Creating An Entry [Press 1] \nOr Are You Searching An Entry [Press 2] ") 
    if answer == "1" : 
     print ("This is where we create") 
     append_data(index, size, count) 

    elif answer == "2" : 
     print ("this is where we search") 
     search_database() 

    name[size] 
    phone[size] 
    addresss[size] 


# IF we are creating 
def append_data(index, size, count): 



    # collect information 
    for index in range(0, 100): 
     optOut = 'no' 
     while optOut == 'no': 
      lastname[count] = raw_input("What is the persons last name? ") 
      firstname[count] = raw_input("What is the persons first name? ") 
      phone[count] = raw_input("What id the persons phone number? ") 
      address[count] = raw_input("What is the persons address? ") 
      count = count + 1 
      print 'Would you like to create another entry?' 
      optOut = raw_input('Would you like to create another entry? [ENTER YES OR NO]:') 
     if optOut == 'yes': 
      menu() 


    #create string to print to file 
    #print temp1 
    #print (firstname + " " + lastname + ", " + phone + ", " + email + ", " + address) 

    print listName[index] 
    print listPhone[index] 
    print listAddress[index] 
    print 'file has been added to your addressbook sucessfuly' 
    menu() 

# SEARCHING FOR A RECORD 
def search_database(): 

    searchcriteria = raw_input("Enter your search Criteria, name? phone, or address etc ") 
    print searchcriteria 
    if searchcriteria == "name": 
     temp1 = open(listName[lastname, firstname],"r") 
     print temp1 
    if searchcriteria == "phone": 
     temp1 = open(listPhone[0], "r") 
     print temp1 
    if searchcriteria == "address": 
     temp1 = open(listAddress[0], "r") 
     print temp1 
    else: 
     print "sorry you must enter a valid responce, try again." 
     menu() 

    for line in temp1: 
     if searchcriteria in line: 
      print line 
      errorMessage() 

# USER DID NOT PICK CREATE OR SEARCH 
def errorMessage(): 
     print ("Incorrect Answer") 
     exit() 


menu() 
+0

Bitte expliziter über das Problem: was Sie zu tun versuchen, was tun Sie passieren erwarten, was stattdessen passiert? –

+0

Erstellen Sie einen Eintrag [Drücken Sie 1] Oder suchen Sie einen Eintrag [Drücken Sie 2] 1 Hier erstellen wir Wie lautet der Nachname der Person? sha Traceback (letzter Anruf zuletzt): Datei "C: \ Benutzer \ SChool LAB 4-1 \ addressbook.py", Zeile 84, in Menü() Datei „C: \ Benutzer \ SChool LAB 4 -1 \ addressbook.py ", Zeile 14, im Menü append_data (Index, Größe, Anzahl) Datei" C: \ Benutzer \ SChool LAB 4-1 \ addressbook.py ", Zeile 34, in append_data Nachname [Anzahl ] = raw_input ("Wie lautet der Nachname der Person?") NameError: Der globale Name 'Nachname' ist nicht definiert >>> –

+1

Es tut mir leid für die Grausamkeit einer Antwort Ich bin neu in dieser Community. –

Antwort

0

Ihre Fehlermeldung sagt alles:

line 34, in append_data lastname[count]... NameError: global name 'lastname' is not defined

Sie werden diese gleichen Fehler, wenn Sie Nachname Typ [4] in jedem Dolmetscher - Sie haben einfach nie eine Liste definiert genannt Nachname , damit Sie nicht auf Objekte zugreifen können. Kurzfristig können Sie dies mit einer Linie

beheben Sie werden am Ende mit mehr Schwierigkeiten obwohl; lastname ist nicht zugänglich außerhalb der Funktion, wo Sie es definieren, auch nicht listName. Ich würde das wahrscheinlich angehen, indem ich sie in eine Datendatei/Datenbank schreibe oder vielleicht eine schnelle Klasse erstelle, deren Mitglieder alle Zugriff auf self.lastname haben.

+0

Ich sehe, was ich jetzt falsch gemacht habe. Danke Noumenon. –

+0

Sie haben Recht das Problem, wo meine Listen sind nicht zugänglich außerhalb der Deklaration Funktion. Gibt es eine Möglichkeit, die listet andere Funktionen auf oder ist meine einzige Option das Erstellen einer Datendatei, die an das Programm angehängt ist und die entsprechenden Anhänge schreibt? –

+0

Eine Möglichkeit wäre, jeder Funktion ein "address_repository" -Objekt zu übergeben, das Sie 'repo.save_address (myAddress)' 'repo.get_all_addresses()' und so weiter. Das Schöne daran ist, dass die 'save_address'-Implementierung zu Beginn nur wie' repo.lastname.append (myAddress.lastname) 'aussehen könnte Stellen Sie eine echte Datenbank ein und ändern Sie nur das 'Repo'-Objekt. Anstatt alle Ihre Funktionen für den Datenbankzugriff zu ändern, ändern Sie einfach' save_address' in 'database.query (" INSERT INTO add " resses.last_name {} ". format (meinAddress.lastname)'. – Noumenon

0

Meine letzte append für Listen nochmals vielen Dank Noumenon

def append_data(index, size, count): 

    lastnames = list() 
    if count < size -1: 
     lastname = raw_input("What is the persons last name? ") 
     lastnames.append(lastname) 
     print lastnames 

    firstnames = list() 
    if count < size - 1: 
     firstname = raw_input("What is the persons first name? ") 
     firstnames.append(firstname) 
     print firstnames 

    phones = list() 
    if count < size - 1: 
     phone = raw_input("What id the persons phone number? ") 
     phones.append(phone) 
     print phones 

    addresss = list() 
    if count < size - 1: 
     address = raw_input("What is the persons address? ") 
     addresss.append(address) 
     print addresss 

    listName = (lastnames, firstnames)  
    addressbook =(listName, phones, addresss) 

    index = index + 1 
    count = count + 1 
    print addressbook 
    optOut = raw_input('Would you like to create another entry? [Enter YES or NO]: ') 
    if optOut == 'YES': 
     menu() 

    print 'file has been added to your addressbook sucessfuly' 
    menu() 
Verwandte Themen