2017-03-11 3 views
0
class Employee: 

def set_name(self, name): 
    self.name = name 

def set_IDnumber(self, IDnumber): 
    self.IDnumber = IDnumber 

def set_department(self, department): 
    self.department = department 

def set_jobTitle(self, jobTitle): 
    self.jobTitle = jobTitle 

def get_name(self): 
    # Returns name 
    return self.name 

def get_IDnumber(self): 
    # Returns IDnumber 
    return self.IDnumber 

def get_department(self): 
    # Returns department 
    return self.department 

def get_jobTitle(self): 
    # Returns job title 
    return self.jobTitle 

def make_list(): 
    # Declaring list for storing information 
    employee_list = [] 
    print("Enter data for 3 employees") 
    # Loop to loop through 3 employees info 
    for i in range(1, 4): 
     print('Employee ' + str(i)) 
     # Takes input for each object 
     name = input('Enter employee name: ') 
     idNumber = int(input('Enter employee ID number: ')) 
     department = input('Enter employee department: ') 
     jobTitle = input('Enter job title: ') 
     employee = Employee() 
     # Sets information for each object 
     employee.set_name(name) 
     employee.set_IDnumber(idNumber) 
     employee.set_department(department) 
     employee.set_jobTitle(jobTitle) 
     employee_list.append(employee) 
    #Returns list for display 
    return employee_list 

def displayEmployees(list): 
    # Declaring strings to be further manipulated for spacing purposes 
    shopString = "CHRISTY'S SHOP EMPLOYEE REPORT" 
    employeeString = "EMPLOYEE NAME" 
    identifierString = "IDENTIFIER" 
    departmentString = "DEPARTMENT" 
    titleString = "TITLE" 
    # String alignment 
    print(shopString.center(70)) 
    print(employeeString + identifierString.center(40) + departmentString +  titleString.rjust(10)) 
    print("------------------" + "----------".center(30) + "----------".rjust(15) + "-----".rjust(10)) 
    for item in list: 
     name = item.get_name() 
     idNumber = item.get_IDnumber() 
     department = item.get_department() 
     jobTitle = item.get_jobTitle() 
     print(name + idNumber.center(30) + department.rjust(15) + jobTitle.rjust(10)) 


def main(): 
    employees = make_list() 
    displayEmployees(employees) 

main() 

Hier ist mein Programm. Ich versuche, die Ausgabe aus der Liste wie folgt unten zu formatieren:Formatieren von Strings in Python aus der Liste

enter image description here

Wenn jemand könnte mir helfen, weil ich finde, dass aufgrund der unterschiedlichen Länge der einzelnen Strings in der Liste die Ausrichtung abwirft, so gibt es muss eine bessere Möglichkeit sein, die Informationen korrekt auszurichten. Danke im voraus.

+1

Sie werden von einem Java-Hintergrund kommen nicht wahr? – e4c5

+0

Ja, ich weiß nicht, wie Sie es bemerkt haben, aber danke, dass Sie es bemerkt haben. :) –

+0

Sie wollen String-Methoden. https://docs.python.org/3.6/tutorial/inputoutput.html#fancier-output-formatting. Besonders 'ljust',' center', 'rjust'. – Denziloe

Antwort

0

nur den relevanten Teil des Codes verwenden, und die Format Specification Mini-Language, hier ist ein Versuch:

# String alignment 
print('{:^62}'.format(shopString)) 
print('{:<22}{:^20}{:<19}{:<15}'.format(employeeString, identifierString, departmentString, titleString)) 
print('{:<22}{:^20}{:<19}{:<15}'.format("------------------", "----------", "--------------", "-----------")) 
for item in list: 
    name = item.get_name() 
    idNumber = item.get_IDnumber() 
    department = item.get_department() 
    jobTitle = item.get_jobTitle() 
    print('{:<22}{:^20}{:<19}{:<15}'.format(name, idNumber, department, jobTitle)) 

Ausgang:

   CHRISTY'S SHOP EMPLOYEE REPORT     
EMPLOYEE NAME    IDENTIFIER  DEPARTMENT   TITLE   
------------------   ----------  --------------  -----------  
Lily Thomas     412   Administration  Manager   
John Doe      132   Accounting   Accountant  
LaQuanda Shaka    321   Sales    Associate 

Sicherlich ist es einfach genug, um zu ändern und es formatiert, wie Sie wollen .

0

CODE ON ENDE

änderte ich ein paar Dinge in Ihrem Code.

Erstens, da Sie keine Methoden haben, die keine accesors sind, benutzte ich anstelle Ihrer Employee-Klasse. Wenn Sie wirklich Getter und Setter (in der Klasse) müssen Sie dies laut lesen und es in machen sinken:

Wenn ich muss haben sie dann verstecke ich sie hinter einer Immobilie.

(umschriebenes Zitat von here). Mit Eigentum meine ich true pythonic properties. jedoch nicht versuchen, dies zu tun, finden Sie unter: this answer

Zweitens müssen Sie überprüfen, ob Benutzer Sie gute Art gab (daher try-except).

Drittens, Ich habe etwas namens Format Specification Mini-Language (a.k.a. formatspec). Es hilft wirklich, wenn es um die Formatierung von Strings geht.

from collections import namedtuple 

Employee = namedtuple('EmployeeRecord', 'name,idNumber,department,jobTitle') 


def make_list(): 
    employees = [] 
    print("Enter data for 3 employees") 
    i = 1 
    while i < 4: 
     print('Employee ' + str(i)) 

     name = input('Enter employee name: ') 
     idNumber = input('Enter employee ID number: ') 
     try: 
      idNumber = int(idNumber) 
     except ValueError: 
      print("ID number is supposted to be integer") 
      continue 
     idNumber = int(idNumber) 
     department = input('Enter employee department: ') 
     jobTitle = input('Enter job title: ') 
     employees.append(Employee(name,idNumber,department,jobTitle)) 
     i += 1 
    return employees 


def displayEmployees(list, titleFormat, recordFormat): 
    shopString = "CHRISTY'S SHOP EMPLOYEE REPORT" 
    print('{:^70}'.format(shopString)) 
    print(titleFormat.format("EMPLOYEE NAME", "IDENTIFIER", "DEPARTMENT", "TITLE")) 
    print(titleFormat.format("------------------", "----------", "----------", "-----")) 
    for item in list: 
     name = item.name 
     idNumber = item.idNumber 
     department = item.department 
     jobTitle = item.jobTitle 
     print(recordFormat.format(name, idNumber, department, jobTitle)) 


def main(): 
    employees = make_list() # you can uncomment this line 
    titleFormat = "{:<25}{:^15}{:<15}{:<10}" 
    recordFormat = "{:<23}{:^19}{:<13}{:<10}" 
    displayEmployees(employees, titleFormat, recordFormat) 



def main2(): 
    e1 = Employee("name1", 1, "dep1", "title1") 
    e2 = Employee("name2", 2, "dep2", "title2") 
    e3 = Employee("name3", 3, "dep3", "title3") 
    titleFormat = "{:<25}{:^15}{:<15}{:<10}" 
    recordFormat = "{:<23}{:^19}{:<13}{:<10}" 
    employees = [e1, e2, e3] 
    displayEmployees(employees, titleFormat, recordFormat) 

#main() 
main2() 

Das ist, was ich von main2 bekam():

    CHRISTY'S SHOP EMPLOYEE REPORT      
EMPLOYEE NAME    IDENTIFIER DEPARTMENT  TITLE  
------------------   ---------- ----------  -----  
name1       1   dep1   title1  
name2       2   dep2   title2  
name3       3   dep3   title3 

Wenn du mehr über Python Zeichenfolge wissen wollen here Formatierung Sie ein großes Tutorial finden.

Auch würde Ich mag eine meiner Lieblings-Artikel über Java empfehlen vs Python python is not java

Verwandte Themen