3

このプログラムを実行すると: (python 3.3.1)

import random
import time
from random import randrange
print(' ')
print('I am thinking of a person...')
time.sleep(1)
print('He or she belongs to this group of people:')
people = 'Alice Elise Jack Jill Ricardo David Jane Sacha Thomas'.split()
loop = 0
while loop != 6:
    group = []
    person = randrange(0, len(people))
    personName = people[person]
    int(person)
    group.append(personName)
    del people[person]
    loop = loop + 1

次のエラー メッセージが表示されることがあります。

Traceback (most recent call last):
  File "C:\Users\user\Python\wsda.py", line 132, in <module>
    person = randrange(0, len(people))
  File "C:\Python33\lib\random.py", line 192, in randrange
    raise ValueError("empty range for randrange() (%d,%d, %d)" % (istart, istop,     width))
ValueError: empty range for randrange() (0,0, 0)

基本的に、変数「people」から6つのランダムな名前を取得し、変数「group」に追加したい...

また、これはゲームの推測に基づいたより大きなプログラムの一部です...誰かがこれを修正する方法を教えてもらえますか? どうも

4

1 に答える 1

5

peopleリストが空 (長さ 0)の場合にエラーが発生します。あなたはそれをテストしたいかもしれません:

>>> import random
>>> random.randrange(0, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mj/Development/Libraries/buildout.python/parts/opt/lib/python2.7/random.py", line 217, in randrange
    raise ValueError, "empty range for randrange() (%d,%d, %d)" % (istart, istop, width)
ValueError: empty range for randrange() (0,0, 0)

peopleリストから 6 つのランダムな選択肢を追加する必要がある場合は、リストをシャッフルしてから、そのリストpeopleの最初の 6 つを に追加することをお勧めしgroupます。

import random

people = 'Alice Elise Jack Jill Ricardo David Jane Sacha Thomas'.split()
random.shuffle(people)
group.extend(people[:6])
people = people[6:]  # remainder, so the 6 picks have been removed

しかし、もちろん、ある時点で再び空のリストになってしまう可能性があります。

別のアプローチは、単に使用することrandom.sample()です:

people = 'Alice Elise Jack Jill Ricardo David Jane Sacha Thomas'.split()
group.extend(random.sample(people, 6))

これは、リストから 6 つのランダムな名前を選択するだけですが、people影響を受けず、将来の 6 つの名前の選択で名前が繰り返される可能性があります。

于 2013-08-10T11:43:34.697 に答える