0

我将首先声明我是一个初学者,这是关于编程入门课程中的家庭作业......

我有两个平行的员工姓名和薪水列表,按薪水以千为单位递增排序。我不知道每次程序运行时列表中有多少元素......它取决于每次用户输入的数量。

我目前在一个模块中使用以下代码来打印我的列表(由工资和员工的参数“S”和“E”表示):

def printArrays(S, E):

    for i in S:
        idx = (S.index(i))
        print ("name:   " + E[idx] + "     salary:   $ %0.3f" % i)

上述代码的输出如下所示:

name: Joe Smith     salary: $ 25.500
name: Samantha Johnson     salary: $ 45.750
name: Dan Pak     salary: $ 75.000

我想要的是不交错的整齐列。更好的是,我希望输出看起来像这样......

Employee name:     Salary:

Joe Smith          $ 25.500
Samantha Johnson   $ 45.750
Dan Pak            $ 75.000

我很感激任何指示。我曾尝试搜索如何将列表打印为列,但没有找到简单的解决方案。我不能使用字典,因为我的结果必须按工资值排序。TIA。

4

4 回答 4

2
def printArrays(S, E):
    for i in S:
        idx = (S.index(i))
        print ("name: {0:>10} salary: ${1:>10}".format ( E[idx], i )
于 2015-03-19T21:26:58.443 回答
0

题外话,但由于您正在学习,这可以帮助您:

for i in S:
    idx = (S.index(i))

太可怕了。

使用以下方法之一:

for e, s in zip(E,S):

for idx, i in enumerate(S):

for idx in range(len(S)):

(第一个更好,因为它更防故障,如果它们的大小不同,它只会在最小的数组上迭代)。

还有,命名变量E也不S是很好。salaries并且employees会更好。

更进一步,您可以定义一个简单的结构,如下所示:

employees = [{'name': name, 'salary': salary} for name, salary in zip(E,S)]

然后您可以直接在该列表上进行迭代并获取您需要的值:

for employee in employees:
    print("name: {name:>10} salary: ${salary:>10}".format(**employee))
于 2015-03-19T22:14:51.953 回答
0

有一个名为prettytable的 python 模块在您的情况下可能很方便,请参见此处。你可以这样做:

from prettytable import PrettyTable

def printArrays(S, E):

   tbl = PrettyTable(["Employee name", "Salary"])

   for i in S:
      idx = (S.index(i))
      tbl.add_row([E[idx], i])

   print tbl
于 2015-03-19T21:34:13.777 回答
0
for i in S:
    idx = (S.index(i))
    print('%-20s $ %0.3f' % (E[idx], i))

'%20s'而不是'%-20s'会右对齐。

如果你想填充动态宽度,string.ljuststring.rjust是你的朋友:

max_width = max([len(x) for x in E])
for i in S:
    idx = (S.index(i))
    print('%s $ %0.3f' % (E[idx].ljust(max_width), i))

当然也可以使用 str.format 来完成。它甚至更强大。

于 2015-03-19T21:59:05.447 回答