2016-12-05 5 views
1

Ich versuche, ein Menü aus Informationen in einer Datei zu drucken, also nahm ich die Informationen und erstellte ein Wörterbuch. Ich versuche herauszufinden, ob es eine Möglichkeit gibt, den Abstand zwischen den Werten zu formatieren, damit ich die Werte mit den Headern abgleichen kann. Ich versuche auch herauszufinden, ob es überhaupt so ist, dass jeder Schlüssel und seine Werte ohne eine Leerzeile in der Mitte gedruckt werden. Mein Code sieht derzeit wie folgt aus:formart Abstand zwischen Drucken Wörterbuch

#import classes 
import inventory 


#define constant for file 
INVENTORY = "inventory.txt" 

#define main 
def main(): 
    #create empty dictionary to fill later 
    inventory_dict = {} 
    #call function to process inventory 
    process_inventory(inventory_dict) 
    #call function to print menu 
    menu(inventory_dict) 


#define process file inventory function 
def process_inventory(inventory_dict): 

    #open inventory file 
    inventory_file = open(INVENTORY, 'r') 

    #create inventory instances 
    for item in inventory_file: 

     #split line to reash 
     inventory_list = item.split(",") 

     #create variables to store each quality 
     item_id = inventory_list[0] 
     item_name = inventory_list[1] 
     item_qty = inventory_list[2] 
     item_price = inventory_list[3] 

     #create object 
     product = inventory.Inventory(item_id,item_name,item_qty,item_price) 

     #add qualities to inventory dictionary 
     inventory_dict[item_id] = product 

    #close file 
    inventory_file.close() 

#define function to print menu 
def menu(inventory_dict): 
    #print headers 
    print("ID Item Price Qty Avaliable") 

    #print object information 
    for object_id in inventory_dict: 
     print(inventory_dict[object_id]) 

    #print how to exit 
    print("Enter 0 when finished") 

    #print blank line 
    print(" ") 

Beim Drucken mit dem Wörterbuch die Ausgabe wie folgt aussieht:

Output

Warum es die ersten beiden Schlüssel mit Werten Zeile für Zeile ohne Leerzeichen gedruckt wurde, aber andere mit einer Linie dazwischen? Ich möchte jeden Wert mit seinem Header ausrichten. Ist das möglich? Wenn das so ist, wie? Die einzige Möglichkeit, dies zu tun, wäre mit der Druckfunktion und selbst zu formatieren.

+1

Zufallsraten: Ihre 'item_price'-Variable hat ein '' \ n''-Zeichen. – CoryKramer

+0

@Maddi, möchten Sie es als eine ausgerichtete Tabelle drucken? Wenn ja, könnten Sie auch '\ t' verwenden, um eine viel bessere Visualisierung zu erhalten. – lmiguelvargasf

+0

Versuchen Sie 'inventory_list = item.strip(). Split (", ")' –

Antwort

0

Der Grund, warum sie nicht übereinstimmen, ist, weil jedes Element eine andere Länge hat. Das erste Element in jeder Zeile verschiebt die nächsten Elemente weiter nach rechts, je länger es ist.

Dies ist eine modifizierte Version Ihrer menu Funktion, die dies behebt:

def menu(inventory_dict): 
    maxLength = 0 
    for row in inventory_dict.values(): 
     for item in row.values(): 
      maxLength = max(len(item), maxLength) # If the item is longer than our current longest, make it the longest 
    #print headers 
    for header in ("ID", "Item", "Price", "Qty", "Avaliable"): 
     print(header.ljust(maxLength)) # Fill spaces in until the header is as long as our longest item 
    print() 

    #print object information 
    for row in inventory_dict.values(): 
     for item in row.values(): 
      print(item.ljust(maxLength)) # Fill spaces in until the header is as long as our longest item 

    #print how to exit 
    print("Enter 0 when finished") 

    #print blank line 
    print() 

Ich kann nicht überprüfen, ob es, weil ich wenn Ihre inventory Modul hat nicht funktioniert.