2017-07-25 22 views
-1

私はcountries.txtと呼ばれるいくつかの国のテキストファイルを持っています。これらの国をテキストファイルから取り出し、配列に入れてランダム化し、ランダム化されたリストを印刷します。私はいくつかの方法でコードを編集しようとしましたが、どれも結果が得られません。配列のテキストファイルから文字列リストをランダム化するPython?

以下は私が試した最初の方法です。

results = [] 

def load(): 
    with open('countries.txt') as inputfile: 
     for line in inputfile: 
      results.append(line) 
      random.shuffle(results) 
      print(str(results)) 

、次のような結果だった:私は、実際の配列を印刷していますが、私は何かをしようとしていた知っている

results = [] 

def load(): 
    with open('countries.txt') as inputfile: 
     for line in inputfile: 
      results.append(line) 
      random.shuffle(results) 
      print(str(line)) 
:第二の試みは、以下の次のコードを使用
['Armenia\n'] 
['Bangladesh\n', 'Armenia\n'] 
['China\n', 'Armenia\n', 'Bangladesh\n'] 
['Denmark\n', 'Bangladesh\n', 'Armenia\n', 'China\n'] 
['Armenia\n', 'Bangladesh\n', 'Denmark\n', 'China\n', 'Estonia\n'] 
['Armenia\n', 'Estonia\n', 'Bangladesh\n', 'China\n', 'France\n', 'Denmark\n'] 
['France\n', 'China\n', 'Bangladesh\n', 'Armenia\n', 'Estonia\n', 'Denmark\n', 'Ghana'] 

結果は、国が私が望むようにリストされているという意味では正しいですが、無作為化していません。結果はでした:

Armenia 
Bangladesh 
China 
Denmark 
Estonia 
France 
Ghana 

私が作った最後の試みは、次のコードを使用していた:

結果= []

def load(): 
    with open('countries.txt') as inputfile: 
     for line in inputfile: 
      results.append(line) 
      random.shuffle(line) 
      print(str(line)) 

しかし、この関数は次のエラー生成:

File "C:\Users\redcode\AppData\Local\Programs\Python\Python36-32\lib\random.py", line 274, in shuffle 
    x[i], x[j] = x[j], x[i] 
TypeError: 'str' object does not support item assignment 

エラーを生成する特定の行はrandom.shuffle(line)です。

は、私が何かをしないのですか、私は私がしようとしてきたものとは異なる何かを見つけることができませんので、これを行うためのさまざまな方法があります。

テキストファイルからリストを取得し、そのリストをランダム化して結果を印刷するには([]または"\n"と2番目の例のような通常のリスト形式で)どうすればよいですか?

答えて

1

最初の動作 - 各行を追加した後、リストを何度もシャッフルします。一度終了すれば十分です。

同じことですが、リストを印刷しない場合を除き、追加したばかりの行が印刷されます。それらはファイル内にある順序にあります。

文字列をシャッフルできないため、3番目の文字列は失敗します(不変なので)。それはとにかく意味がありません。

'\n'文字がファイルから改行されています。文字列メソッド.strip()を使用して削除します。

ファイルは一度にリストにすべての行を読み取るための便利なヘルパーメソッドreadlines()を持っています。

しかし、あなたはまた、stripを使用する場合、それはリストの内包表記を使用するように簡単です:

with open('countries.txt') as inputfile: 
    results = [line.strip() for line in inputfile] 
results.shuffle() 
for result in results: 
    print(result) 
+0

は完璧に動作している、ありがとう:D – RedCode

1

2回目の試行では、ライン変数を直接印刷しています。結果リストから項目を印刷する必要があります。このような何か作業をする必要があります:

results = [] 

def load(): 
    with open('countries.txt') as inputfile: 
     for line in inputfile: 
      results.append(line) 
      random.shuffle(results) 
      for result in results: 
       print(str(result)) 

あなたは私はあなたがあなたの結果を表示する方法に応じて追加のループのための内部を取ることもできます。

関連する問題