1
def wordjumble(Wordlist, Hintlist, score):
    wordchoice = getword(Wordlist, Hintlist)
    high = len(wordchoice)
    low = -len(wordchoice)
    for i in range(10):
        position = random.randrange(high,low)
        print wordchoice[position]
    score = wordguess(wordchoice, score)
    return score

値エラーが表示されます。私のタスクは、高値と低値の間の乱数を取得することです。私の間違いはどこですか?

トレースバックは次のとおりです。

Traceback (most recent call last): 
File "E:\Programming\Python\Worksheet 15\test.py", line 54, in
wordjumble(Wordlist, Hintlist, score) 
File "E:\Programming\Python\Worksheet 15\test.py", line 49, in wordjumble
position = random.randrange(high,low) 
File "E:\Portable Python 2.7.2.1\App\lib\random.py", line 217, in
randrange raise ValueError, "empty range for randrange() (%d,%d, %d)"
% (istart, istop, width) ValueError: empty range for randrange() (7,-7, -14)
4

5 に答える 5

3

行を変更します

        position = random.randrange(high,low)

        position = random.randrange(low,high)

ETA:このコードには他にも問題があります。wordchoiceが単一の単語である場合(関数によって示されるように)、ループが実行しているのは、とgetwordの間の乱数を選択することです。単語からランダムな文字を取得しようとしている場合は、との間で乱数を実行する方が簡単であり、単に実行するだけでも簡単です。-len(wordchoice)len(wordchoice)-10len(wordchoice)-1random.choice(wordchoice)

ループが単語からランダムな10文字を選択し、それらを印刷しているようです(それぞれが別々の行にあります)。つまり、この単語を使用するtheと、次のような「ごちゃ混ぜ」になってしまうということです。

h
t
t
e
h 
e
t
e
t
e

これは常に10文字であり、単語の各文字を1回使用することを保証するものではありません(これはおそらくごちゃ混ぜに必要です)。置換して10文字を選択するのではなく、文字の順序を変更して単語を混乱させたい場合は(関数のタイトルで示されているように)、この質問wordjumbleをチェックして適切な解決策を見つけてください。

于 2012-05-29T14:40:54.287 に答える
2

次の行で引数を逆にしたため、エラーが発生します。

 position = random.randrange(high,low)

そのはず:

 position = random.randrange(low,high)

アドバイス:ほとんどのPythonリファレンスドキュメントには、コードの例が示されています。彼らはすぐにあなたを助けるかもしれないので、最初にそれらをチェックしてください:http:
//docs.python.org/library/random.html

よろしく、
ボー

于 2012-05-29T14:40:48.137 に答える
0

に置き換えhigh,lowますlow,high:

def wordjumble(Wordlist, Hintlist, score):
    wordchoice = getword(Wordlist, Hintlist)
    high = len(wordchoice)
    low = -len(wordchoice)
    for i in range(10):
        position = random.randrange(low,high)
        print wordchoice[position]
    score = wordguess(wordchoice, score)
    return score
于 2012-05-29T14:47:31.560 に答える
0
   random.randrange([start], stop[, step])
   Return a randomly selected element from range(start, stop, step). This is equivalent to          choice(range(start, stop, step)), but doesn’t actually build a range object.
于 2012-05-29T14:37:34.217 に答える
0

通常、範囲はlowtoで指定されます。randrange のドキュメントhighを確認してください。

Python Number randrange() Function で簡単な使用例を見つけることができます

于 2012-05-29T14:38:42.233 に答える