0

一連の数字を入力し、その人から与えられたデータからランダムに生成されたペアのリストを作成する簡単なプログラムを作成しました。終了後にデータを (Windows ファイルとして) 保存するにはどうすればよいですか? これは私のコードです:

import random as ran
import easygui as eg
nList=vList=eg.multenterbox(msg="Enter the names of the people:"
                , title="Random Pair Generator"
                , fields=('Name:', 'Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:','Name:',)
                , values=['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20']
                )

index=0
x=''
y=''
pList=[]
pair=''

while not(index==len(nList)):
   x=nList[index]
   y=ran.choice(vList)
   pair=x+'; '+y
   pList.insert(index, pair)
   vList.remove(y)
   index= index+1

    eg.textbox(msg="These are the pairs generated."
                , title= "Random Pair Generator"
                , text= str(pList)
                , codebox=0
                )

pList をファイルとして、コンピューターの任意の場所 (できれば指定できる場所) に保存したいだけです。また、このループは問題を引き起こします。構文などでエラーは発生しませんが、出力は私が望むものではありません。

nList の各値を使用し、vList からランダムな値を選択して、それらを 1 つのオブジェクトとして pList に配置します。ただし、vListから「y」の出力を削除すると、nListからも削除されるという問題が発生します。

例: nList に [1, 2, 3, 4, 5] の 5 つのオブジェクトが含まれ、vList に同じオブジェクト [1, 2, 3, 4, 5] がある場合。nList のすべての値に対して、vList から乱数を選択します。ただし、vList から変数が選択されると、リストから削除されます。問題は、pList が [1; として始まると言うことにあります。2] どこで 1; 2 は 1 つのオブジェクトで、次のオブジェクトは 3 から始まります。2 は 'y' 値として既に使用されているため、2 をスキップします。

4

2 に答える 2

1

ペアのリストを に表示されたのと同じ形式で保存したいだけの場合はeg.textbox、プログラムの最後に次のようなものを追加します。

filename = eg.filesavebox(msg=None
                        , title='Save Pair List'
                        , default="pairs.txt"
                        , filetypes=['*.txt']
                        )

with open(filename, 'wt') as output:
    output.write(str(pList)+'\n')

次のように、リストの各ペアを出力ファイルの別の行に書き込むことができます。

with open(filename, 'wt') as output:
    for pair in pList:
        output.write(pair+'\n')

このwithステートメントを使用すると、制御するコード ブロックが終了した後、ファイルが自動的に閉じられます。

于 2012-10-16T03:06:35.727 に答える
1

pListプレーンテキストとして書きたいのか、後で簡単に再開できるリストとして書きたいのか、私にははっきりしません...

最初のケースは簡単です:

f = open("path/your_filename.txt", 'w') # opening file object for writing (creates one if not found)
f.write(str(pList))                     # writing list as a string into your file
f.close()                               # closing file object

文字列以外の Python オブジェクトをファイルに直接書き込むことはできません。オブジェクトタイプも保持したい場合 (後でロードできるようにするため)、最も簡単な方法の 1 つは次を使用することpickleです。

import pickle

f = open("/path/your_filename.pkl", 'w')
pickle.dump(f, pList)
f.close()

そして、次のようにロードします。

import pickle

f = open("/path/your_filename.pkl", 'r') # opening file object for reading
pList = pickle.load(f)
f.close()

お役に立てれば。

于 2012-10-16T02:32:36.263 に答える