0

ループを繰り返さずにファイルを書き込むにはどうすればよいですか?ファイルへのループの書き込みを続行する方法と、各条件が満たされた後に初期値を0にリセットする方法は?

def main():
    infile=open("sales.txt","w")
    infilelist=[]
    #call function
    totalsale_each,salesperson=sales(infile,infilelist)

    for salesamount in infilelist:
        infile.write(salesamount)

    infile.close()


def sales(infile, infilelist):
    #set initial
    t_sales=0

    n_sales=int(input("Number of sales"))

    while t_sales<n_sales:

        #increasement
        t_sales+=1


        #for loop
        for s in range(1,n_sales+1):
            totalsale_each=0 #set the acc for total sales by each sales person


            sales_person=input("sales person name:")
            print("sales for sales no. "+str(s)+"by"+sales_person+":")
            infilelist.append(sales_person)               

            for count in range (1,5): #assuming one sales person can sell max and min of 5item per cust
                sales=float(input('sales#' +str(count)+ ':'))

                if sales<=300:
                    t_sales=t_sales+sales
                    totalsale_each=totalsale_each+sales

                if sales>300: #if sales>300, need to change the sales person
                              #that sales person needs to finish serving the rest of that cust's items
                    t_sales=t_sales+sales
                    sales_person=input("another sales pesron")
                    infilelist.append(sales_person)

                infilelist.append(str(totalsale_each)) #to write total sales for each person 
    return totalsale_each,sales_person

main()

これは私のPythonテストです:

Number of sales: 2
sales person name:A
sales for sales no.1 by A:
sales#1:100
sales#2:150
sales#3:350
another sales pesronB
sales#4:200
sales person name:C
sales for sales no.2 by C:
sales#1:200
sales#2:500
another sales pesronD
sales#3:500
another sales pesronE
sales#4:200

実行後に取得するファイルは

 A
100.0
250.0
B
250.0
450.0
C
200.0
D
200.0
E
200.0
400.0

しかし、私が取得したいのは以下のようなものです:

A
600
B
200
C
700
D
500
E
200

どうすれば修正できますか?

売上高が300を超えたときに次の営業担当者を尋ねた後、infilelist.append(sales_person)とinfilelist.append(totalsale_each)をどこに置くかがわかりません。

ありがとうございました

4

1 に答える 1

2

正しく理解できれば、売上高が300を超えたら、その人の総売上高を書いて、次の売上高を求めたいと思います。

したがって、あなたがする必要があるのは、総売上高を計算した後、つまり、のループの後、各人の総売上高を加算することですrange(5)

また、営業担当者が300を超えて販売したことがわかったら、売上の計算を停止する必要があります。そのためbreak、その時点でループを実行し、通常どおり続行する必要があります。

ここでの問題は、その後次の営業担当者に行くことです。ループを続行すると、他の名前の場合と同じようにプロンプ​​トが表示されるか、別の形式で要求して配列に挿入し、通常のように別の名前を要求しないようにする必要があります。コメントで2番目の言い方が必要な場合は、最初のオプションの方が簡単です。

結果として、私はsales関数にこれらの変更を提案します:

def sales(infile, infilelist):
    #set initial
    t_sales=0

    n_sales=int(input("Number of sales"))

    while t_sales<n_sales:

        #increasement
        t_sales+=1


        #for loop
        for s in range(1,n_sales+1):
            totalsale_each=0 #set the acc for total sales by each sales person

            # EDIT: this seems useless, so remove it
            #sales_no=s*1
            sales_person=input("sales person name:")
            print("sales for sales no."+str(s)+"by"+sales_person+":")
            infilelist.append(sales_person)               

            for count in range (5): #assuming one sales person can sell only 5item per cust
                sales=float(input('sales#' +str(count)+ ':'))

                if sales<=300:
                    t_sales=t_sales+sales
                    totalsale_each=totalsale_each+sales

                if sales>300: #if sales>300, need to change the sales person
                    t_sales=t_sales+sales
                    # write the last sales_person's total, and ask for another one
                    infilelist.append(str(totalsale_each))
                    sales_person=input("another sales pesron")
                    # add it to the list, after that, everything counts for him
                    infilelist.append(sales_person)
                    totalsale_each=sales
            # EDIT: decrease indentation so that the total is written once, after the loop
            infilelist.append(str(totalsale_each)) #to write total sales for each person 
    return totalsale_each,sales_person

編集:私はコードを編集しました:を削除しbreak、最後の合計を書き、別の営業担当者を求め、合計カウンターをリセットし、彼の名前ですべてを書きます。

また、returnステートメントに関するメモ(おそらくあなたはすでにそれを知っているかもしれません):それは最後の営業担当者の総売上高と名前を返します。

ただし、キー=営業担当者の名前またはインデックス(sales_no)を使用して合計を辞書に保存できるように、全体を書き直すことをお勧めします。その後、それらすべてをリストに書き込みます。

編集2:気づいたら、新しいsales_person(infilelist.append(sales_person))を追加した後、売上をに追加していtotalsales_eachます。あなたが望むのは反対のようですので、新しい営業担当者を追加する前にこれを行う必要があります。これにより、次のことが可能になります。

if sales>300:
    t_sales=t_sales+sales
    totalsale_each += sales # the last sale counts for the last person
    infilelist.append(str(totalsale_each))

    sales_person=input("another sales pesron")
    infilelist.append(sales_person)
    totalsale_each = 0 # reset the sales for the next person
于 2012-05-19T18:40:53.070 に答える