![](/img/trans.png)
[英]Formatting strings with numeric sequences to generate a list of strings ordered by the numbers in 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.