<p><strong>结尾的代码</strong></p>
<p>我修改了你代码中的一些内容。你知道吗</p>
<p>首先,由于没有非accesor的方法,所以我使用<a href="https://docs.python.org/3/library/collections.html#collections.namedtuple" rel="nofollow noreferrer">namedtuple</a>代替Employee类。如果你真的需要(在课堂上)获得者和设置者,请大声读这篇文章,并让它深入人心:</p>
<blockquote>
<p>If I <strong>must</strong> have them then I will hide them behind a property.</p>
</blockquote>
<p>(引用<a href="https://stackoverflow.com/questions/2627002/whats-the-pythonic-way-to-use-getters-and-setters">here</a>的话)。
我所说的属性是指<a href="https://docs.python.org/3/library/functions.html#property" rel="nofollow noreferrer">true pythonic properties</a>。
但是,请不要这样做,请参见:<a href="https://stackoverflow.com/a/1555169/3809977">this answer</a></p>
<p>其次,您必须检查用户是否提供了良好的类型(因此<a href="https://docs.python.org/3/tutorial/errors.html" rel="nofollow noreferrer">try-except</a>)。你知道吗</p>
<p>第三,
我用了一种叫做<a href="https://docs.python.org/3.1/library/string.html#formatspec" rel="nofollow noreferrer">Format Specification Mini-Language (a.k.a. formatspec) </a>的东西。如果涉及到字符串格式,它真的很有帮助。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>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()
</code></pre>
<p>这是我从main2()得到的:
你知道吗</p>
<pre><code> CHRISTY'S SHOP EMPLOYEE REPORT
EMPLOYEE NAME IDENTIFIER DEPARTMENT TITLE
-
name1 1 dep1 title1
name2 2 dep2 title2
name3 3 dep3 title3
</code></pre>
<p>如果您想更多地了解python字符串格式<a href="https://pyformat.info/" rel="nofollow noreferrer">here</a>,您可以找到一个很棒的教程。你知道吗</p>
<p>另外,我想推荐一篇我最喜欢的关于java与python的文章<a href="https://dirtsimple.org/2004/12/python-is-not-java.html" rel="nofollow noreferrer">python is not java</a></p>