2

私はPythonが初めてで、なぜこのエラーが発生するのかわかりません。

これはコードです:

import random
sorteio = []
urna = open("urna.txt")

y = 1
while y <= 50:
    sort = int(random.random() * 392)
    print sort
    while sort > 0:
        x = urna.readline()
        sort = sort - 1
    print x  
    sorteio = sorteio + [int(x)]
    y = y + 1
print sorteio

urna.txt は、次の形式のファイルです。

1156
459
277
166
638
885
482
879
33
559

このエラーが表示される理由と修正方法を誰かが知っていれば、感謝します。

4

2 に答える 2

2

ファイルの末尾を超えて読み取ろうとする''と、int に変換できない空の文字列が返されます。

>>> int('')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''

あなたの問題を正しく理解していれば、テキスト値からランダムに50行を選択するという要件を満たすために:

import random

with open("urna.txt") as urna:
    sorteio = [int(line) for line in urna] # all lines of the file as ints

selection = random.sample(sorteio, 50)

print selection
于 2013-07-17T18:37:52.610 に答える
1

.readline()ファイルの最後に到達すると空の文字列が返されますが、これは有効な数値ではありません。

それをテストします。

if x.strip():  # not empty apart from whitespace
    sorteio = sorteio + [int(x)]

あなたはリストに追加されているようです。リストにはそのためのメソッドがあります:

sorteio.append(int(x))

ファイルからランダムなサンプルを取得したい場合は、より良い方法があります。1 つは、すべての値を読み取ってから を使用するrandom.sample()方法です。または、次の行がサンプルの一部である可能性を調整しながら、ファイルを 1 行ずつ読み取るときに値を選択することもできます。その主題に関するより詳細な議論については、私の以前の回答を参照してください。

于 2013-07-17T16:00:24.270 に答える