2016-12-10 5 views
0

Ein Hotelverkäufer gibt Verkäufe in einer Textdatei ein. Jede Zeile enthält die folgenden, durch Semikolons getrennten Namen: den Namen des Kunden, den verkauften Dienst (wie Abendessen, Konferenz, Unterkunft usw.), den Betrag des Verkaufs und das Datum des Ereignisses. Schreiben Sie ein Programm, das eine solche Datei liest und den Gesamtbetrag für jede Dienstkategorie anzeigt. Zeigen Sie einen Fehler, wenn dieEine Textdatei in Python lesen und Kategorien daraus auswählen? Hotel

Meine Textdatei

enthält
Bob;Dinner;10.00;January 1, 2015 
Tom;Dinner;14.00;January 2, 2015 
Anne;Lodging;125.00;January 3, 2015 
Jerry;Lodging;125.00;January 4, 2015 

so hier ist mein Code so weit

def main(): 
    file_name = input("Input file name: ") 
    amount_by_category = process_file(file_name) 
    if amount_by_category: 
     print 'Totals:' 
     for key in amount_by_category: 
      print '{0}: $ {1}'.format(key, amount_by_category.get(key)) 

def process_file(file_name): 
    infile = open(file_name, 'r') 
    # a dictionary mapping category to total amount for that category 
    amount_by_category = {} 
    for line in infile: 
     fields = line.split(';') 
     if len(fields) != 4: 
      raise Exception('Expected 4 fields but found %s' % len(fields)) 
     value = float(fields[2]) 
     category = fields[1] 
     if not category in amount_by_category: 
      amount_by_category[category] = 0.0 
     amount_by_category[category] += value 
    return amount_by_category 

main() 

ich einen Syntaxfehler bekommen und nicht sicher, warum.

Und die Zurückverfolgungs:

Traceback (most recent call last): 
File "C:\Users\Brandon\Desktop\Assignment 7\girrrr.py", 
line 24, in <module> main() File "C:\Users\Brandon\Desktop\Assignment 7\girrrr.py", 
line 7, in main print ('{0}: $ {1}').format(key, amount_by_category.get(key)) 
AttributeError: 'NoneType' object has no attribute 'format' 
+1

Sie sollten den vollständigen Fehler buchen. Es wird eine Zeilennummer enthalten. –

+0

könnten Sie Traceback mit Ausnahme Ihrer Frage hinzufügen? –

+0

Es ist eine ungültige Syntax auf dem Druck 'Summen:' –

Antwort

0

Es sieht aus wie Sie eine alte Python verwenden, aber dieser Code funktioniert gut in 3.6:

def main(): 
    file_name = input("Input file name: ") 
    amount_by_category = process_file(file_name) 
    if amount_by_category: 
     print ("Totals:") 
     for key in amount_by_category: 
      print ("{}: $ {}".format(key, amount_by_category.get(key))) 

def process_file(file_name): 
    infile = open(file_name, 'r') 
    # a dictionary mapping category to total amount for that category 
    amount_by_category = {} 
    for line in infile: 
     fields = line.split(';') 
     if len(fields) != 4: 
      raise Exception('Expected 4 fields but found %s' % len(fields)) 
     value = float(fields[2]) 
     category = fields[1] 
     if not category in amount_by_category: 
      amount_by_category[category] = 0.0 
     amount_by_category[category] += value 
    return amount_by_category 

main() 
0

Die Zurückverfolgungs Sie sieht wie folgt geteilt haben :

print ('{0}: $ {1}').format(key, amount_by_category.get(key)) 

, während Sie Code wie folgt aussieht:

print '{0}: $ {1}'.format(key, amount_by_category.get(key)) 

Ich habe versucht, Ihren Code laufen, es läuft gut. Versuchen Sie den Code erneut auszuführen. Es sollte funktionieren.