簡體   English   中英

從列表中使用Python格式化字符串

[英]Formatting Strings in Python from list

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()

這是我的程序。 我正在嘗試格式化列表中的輸出,如下所示:

在此處輸入圖片說明

如果有人可以幫助我,因為我發現由於列表中每個字符串的長度不同而導致對齊問題,那么必須有一種更好的方法來正確對齊信息。 提前謝謝。

僅嘗試使用代碼的相關部分和Format Specification Mini-Language ,這是一種嘗試:

# 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))

輸出:

                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

當然,它很簡單就可以按照您的意願進行修改和格式化。

最終代碼

我在您的代碼中更改了一些內容。

首先,因為你沒有方法不在accesors我用namedtuple ,而不是你的Employee類。 如果您確實需要(課程中)的吸氣劑和吸氣劑,請大聲閱讀並使其沉入其中:

如果我必須擁有它們,那么我會將它們隱藏在財產后面。

此處的釋義)。 所謂屬性,是指真正的pythonic屬性 但是,請不要嘗試執行此操作,請參閱: 此答案

其次,您必須檢查用戶是否給了您良好的類型(因此,請使用try-except )。

第三,我使用了一種稱為格式規范迷你語言(又名formatspec)的東西 如果涉及到字符串格式化,這確實很有幫助。

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()

這是我從main2()得到的:

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

如果您想在此處了解有關python字符串格式的更多信息,則可以找到很棒的教程。

我也想推薦我最喜歡的關於Java vs Python的文章之一python不是Java

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM