2016-04-27 4 views
2

Ich versuche, diese beiden Codes zusammenzuführen, so dass das letzte Stück das Textdokument "Zahlungen" in eine Liste anhängen kann. Für jede Zeile von „Zahlungen“, ich will es in einer Liste in myList, so würde es in etwa so aussehen:Zusammenfassen von zwei for-Schleifen unter einer if-Anweisung

myList = [['E1234','12/09/14','440','A','0']['E3431','10/01/12','320','N','120']['E0987','04/12/16','342','A','137']] 

Ich mag den endgültige Code erstellen können, um den Benutzer aufzufordern, einen Kunden zu betreten Wählen Sie dann myList für die Kundennummer und zeigen Sie alle Informationen für den Kunden auf dem Bildschirm an.

Dies ist das erste der beiden Programme. Es ist das "Rückgrat" des endgültigen Codes. Nennen wir das A:

print("Option A: Show a record\nOption Q: Quit") 
decision = input("Enter A or Q: ") 

if decision == "A" or decision == "a": 
    myFile = open("Payments.txt") 
    customer_number = input("Enter a customer number to view their details: ") 
    record = myFile.readlines() 
    for line in record: 
     if customer_number in line: 
      print(line) 
    myFile.close() 

elif decision == "Q" or "q": 
    exit 

Dies ist das zweite Stück Code. Lassen Sie uns dieses B nennen: if decision == "A" or decision == "a"::

myFile = open("Payments.txt") 
myList = [] 
for item in myFile: 
    print(item.strip()) 
    myList.append(item.strip().split(',')) 
myFile.close() 
print(myList) 

I B in die if-Anweisung eingefügt werden soll.

Ich bin verwirrt über die for-Schleifen, wie es in einer for-Schleife A und B ist, sowohl die für den Endcode lebenswichtig sind. Ich bin nicht in der Lage, B in A zu platzieren, ohne eine der for-Schleifen zu unterbrechen.

print("Option A: Show a record\nOption Q: Quit") 
decision = input("Enter A or Q: ") 
myList = [] 

if decision == "A" or decision == "a": 
    myFile = open("Payments.txt") 
    customer_number = input("Enter a customer number to view their details: ") 
    record = myFile.readlines() 
    for line in record: 
     for item in myFile: 
      print(item.strip()) 
      myList.append(item.strip().split(',')) 
      print(myList) 
     if customer_number in line: 
      print(line) 
    myFile.close() 

elif decision == "Q" or "q": 
    exit 

Es zeigt die Linie, aus der die Kundennummer aus, aber es die Liste nicht gedruckt wird.

aktualisieren

Ich möchte die einzelnen Daten aus jeder Zeile separat drucken können:

Customer number: E1234 
Date of payment: 12/09/14 
Payment amount: £440 
Paid amount: £0 
+0

Wenn ich richtig A nur zu verstehen, Details über die jeweiligen Kunden ausdruckt, aber was macht B?Einfach den Inhalt von Payments.txt ausdrucken? – Bijan

+0

B fügt jede Zeile von Payments.txt zu einer einzelnen Liste in myList hinzu. Ich möchte B innerhalb der if-Anweisung in A, so dass es Zahlungen an myList anhängen, die customer_number in der Liste finden und diese bestimmte Zeile anzeigen wird – User0123456789

+0

Also ist der ganze Zweck dieser die Zeile anzuzeigen, die customer_number enthält? Warum sollte man sich überhaupt mit 'myList' beschäftigen? – Bijan

Antwort

1

In Ihrem Kommentar, Sie erwähnten Notwendigkeit zu einer Liste anzuhängen, so habe ich Ich habe mein Skript so geändert, dass es das enthält, aber Ihre aktuelle Antwort war die Trennung von A- und B-Teil, aber Sie mussten sie kombinieren.

Die Logik ist, wenn customer_number in einer Linie vorhanden ist, dann anhängen Sie auflisten und eine Schleife verwenden, um durch die Liste zu durchlaufen zu drucken, was Sie wollen. Ihre Lösung bestand darin, die gesamte Zeile der Kundendetails zu drucken und jede zweite Zeile zu drucken. Hier

print("Option A: Show a record\nOption Q: Quit") 
decision = input("Enter A or Q: ").lower() 
myList = [] 

if decision == "a": 
    myFile = open("Payments.txt") 
    customer_number = input("Enter a customer number to view their details: ") 
    record = myFile.readlines() 
    for line in record: 
     if customer_number in line: 
      myList.append(line.strip().replace("'","").split(',')) 
      for info in myList: 
       print("Customer number: ", info[0]) 
       print("Date of payment: ", info[1]) 
       print("Payment Amount: ", info[2]) 
       print("Paid Amount: ", info[4]) 
    myFile.close() 

elif decision == "q": 
    exit() 

ist die Ausgabe:

enter image description here

+0

Warum schleifen Sie den Inhalt der Datei zweimal? –

+0

Es hat nicht funktioniert. Es druckte jede einzelne Zeile und zeigte dann, dass es an "myList" angehängt wurde. – User0123456789

+0

Danke, das hat funktioniert! – User0123456789

0

Ich möchte den endgültigen Code erstellen können, um den Benutzer aufzufordern eine Kundennummer eingeben, dann suchen Sie durch myList für die Kundennummer und Display alle Informationen für den Kunden auf dem Bildschirm.

Ich habe ein paar Änderungen an Ihrem Code vorgenommen und PEP-8-konforme Boilerplate eingefügt.

def customer_payment(customer_number): 
    """Edited Code. Purpose is to accept User Input for a customer number 
    Search for Customer Number, and if Found, Display Information about Customer. 
    """ 
    myList = [] 
    with open("Payments.txt") as myFile: 
     for line in myFile: 
      if customer_number in line: 
       print(line) 
      for item in line: 
       print(item.strip()) 
       myList.append(line.strip().split(',')) 


def main(): 
    decision = input("Option A: Show a record\nOption Q: Quit\nEnter A or Q: ") 
    if decision.lower() == "a": 
     customer_number = input("Enter a customer number to view their details: ") 
     customer_payment(customer_number) 

if __name__=="__main__": 
    main() 

Dies muss möglicherweise auf das Format basierend modifiziert werden, dass Payments.txt in ist.

+0

Es hat jedes Zeichen von Payments.txt in einer eigenen Zeile gedruckt ... – User0123456789

Verwandte Themen