1

.txtファイルに含まれている特定のリストからの年間総売上高を表示するプロジェクトを完了しようとしています。

リストは次のようにフォーマットされます。

-lastname, firstname (string)
-45.7 (float)
-456.4 (float)
-345.5 (float)
-lastname2, firstname2 (string)
-3354.7 (float)
-54.6 (float)
-56.2 (float)
-lastname3, firstname3 (string)
-76.6 (float)
-34.2 (float)
-48.2 (float)

などなど...実際には、7つの異なる「従業員」の後に12セットの「数字」(1年の月)が続きます...しかし、その例で、私が何をしようとしているのかを理解できます。

すべての「従業員」のこの特定の情報を出力する必要があります-従業員の名前-合計(リスト内の12個の数字の合計)

したがって、私の論理は私をこの結論に導きますが、どこから始めればよいのかわかりません。

各「従業員」データを格納するために7つの異なる配列を作成します。このロジックでは、メインリストを独立した配列に分割して、それらを操作できるようにする必要があります。

これはどのように達成できますか?また、事前定義された従業員数がない場合(ただし、定義された形式::「名前」の後に12か月の番号が続く)...どうすればこれを達成できますか?

リストをさまざまなセクションに「分割」する方法がわかれば、13行ごとに理解できると確信しています。

4

3 に答える 3

3

はい、13行ごとに従業員の情報があります。

ただし、12の異なるリストを使用する代わりに、リストの辞書を使用できるため、従業員の数を気にする必要はありません。

また、各従業員に向けられた行数のパラメーターを使用することもできます。

次のことができます。

infile = open("file.txt", "rt")

employee = dict()
name = infile.readline().strip()
while name:

    employee[name] = list()

    for i in xrange(1, 12):
        val = float(infile.readline().strip())
        employee[name].append(val)

    name = infile.readline().strip()

辞書エントリにアクセスするいくつかの方法:

for name, months in employee.items():
    print name
    print months

for name in employee.keys():
    print name
    print employee[name]

for months in employee.values():
    print months

for name, months in (employee.keys(), employee.values()):
    print name
    print months

プロセス全体は次のようになります。

infile = open("file.txt", "rt")

employee = dict()
name = infile.readline().strip()
while name:

    val = 0.0
    for i in xrange(1, 12):
        val += float(infile.readline().strip())
    employee[name] = val

    print ">>> Employee:", name, " -- salary:", str(employee[name])
    name = infile.readline().strip()

どういうわけか、茂みの周りにいることをお詫びします(:

于 2012-12-01T23:34:38.483 に答える
1

ここにオプションがあります。良くありませんが、それでも野蛮な選択肢です。

summed = 0
with open("file.txt", "rt") as f:
    print f.readline() # We print first line (first man) 
    for line in f:
        # then we suppose every line is float.
        try:                             
            # convert to float
            value = float(line.strip())  
            # add to sum
            summed += value              
        # If it does not convert, then it is next person
        except ValueError: 
            # print sum for previous person
            print summed
            # print new name
            print line
            # reset sum
            summed = 0
    # on end of file there is no errors, so we print lst result
    print summed

より柔軟性が必要なため、別のオプションがあります。

    data = {} # dict: list of all values for person by person name
    with open("file.txt", "rt") as f:
        data_key = f.readline() # We remember first line (first man)
        data[data_key] = [] # empty list of values
        for line in f:
            # then we suppose every line is float.
            try:                             
                # convert to float
                value = float(line.strip())  
                # add to data
                data[data_key].append(value)
            # If it does not convert, then it is next person
            except ValueError: 
                # next person's name
                data_key = line
                # new list
                data[data_key] = []

Q:総売上高(12か月)が7000を超える従業員に「2%のボーナス」を印刷したいとします。

for employee, stats in data.iteritems():
    if sum(stats) > 7000:
        print employee + " done 7000 in total sales! need 2% bonus"
于 2012-12-02T00:24:00.703 に答える
0

7つの異なるアレイは作成しません。1つのデータ型で1人の従業員に関連するすべての情報を保持するために、ある種のデータ構造を作成します(これはPythonですが、Pythonでもデータ構造を作成できます)。

次に、各従業員のデータを処理するときに、従業員データ要素の1つの配列を反復処理するだけです。そうすれば、データのインデックスを追跡するのがはるかに簡単になります(または、必要がなくなる可能性もあります)。

これは、データをなんらかの方法で並べ替える場合に特に役立ちます。そうすれば、7つではなく1つの配列を並べ替えるだけで済みます。

于 2012-12-01T23:29:43.613 に答える