0

私は初心者であり、これはプログラミング入門クラスの宿題に関するものです...

従業員名と給与の 2 つの並列リストがあり、給与の昇順で数千単位で並べ替えられています。プログラムが実行されるたびにリストに含まれる要素の数はわかりません...ユーザーが毎回入力する数によって決まります。

現在、モジュールで次のコードを使用してリストを印刷しています(給与と従業員のパラメーター「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

ポインタをいただければ幸いです。リストを列として印刷する方法を探してみましたが、簡単な解決策を見つけることができませんでした。結果を給与値でソートしたままにする必要があるため、辞書を使用できません。ティア。

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
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 に答える