2014-10-16 2 views
0

Я пишу код в Python 3.3.3, который составляет список из 32 команд, если вы введете слово 12 и убедитесь, что команда, которая повторяется больше всего, повторяется только один раз, повторяется наименее. Если это было сделано:Python случайный вне диапазона

import random 
if run == '1': 
    teams =[] 
    randoms = [] 
    team = 0 
    amount = 1 
    while team != "done": 
     team = input("Please enter team name " + str(amount) +" or enter 'done' if you have finished.\n") 
     if team != "done": 
      teams.append(team) 
      randoms.append(team) 
      amount = amount + 1 
    length = len(teams) 
    while len(teams) != 32: 
     if len(teams) < 32-length: 
      for x in range (0,length): 
       teams.append(teams[x]) 
     else: 
      number = random.randint(0,len(randoms)) 
      name = randoms[number] 
      teams.append(name) 
      randoms.remove(name) 
     teams.sort() 
    for x in range(0,len(teams)): 
     print (teams[x]) 

Я запустил программу и запустил 12 команд. Она поставляется со следующим сообщением:

line 29, in <module> 
    name = randoms[number] 
IndexError: list index out of range 

Я знаю, что это означает, что число не входит в диапазон длины массива, но как я могу это исправить? Спасибо за отзыв. Теперь у меня есть:

import random 
    teams =[] 
    randoms = [] 
    team = 0 
    amount = 1 
    while team != "done": 
     team = input("Please enter team name " + str(amount) +" or enter 'done' if you have finished.\n") 
     if team != "done": 
      teams.append(team) 
      randoms.append(team) 
      amount = amount + 1 
    length = len(teams) 
    times =0 
    while len(teams) != 32: 
     while len(teams) <= 32-length: 
      for x in range (0,length+1): 
       teamname = teams[x] 
       teams.append(teamname) 
     else: 
      choice = random.choice(randoms) 
      teams.append(choice) 
      randoms.remove(choice) 
     teams.sort() 
    for x in range(0,len(teams)): 
     print (teams[x]) 

Однако это возвращает ошибку:

Traceback (most recent call last): 
File "C:\Python33\lib\random.py", line 248, in choice 
i = self._randbelow(len(seq)) 
File "C:\Python33\lib\random.py", line 224, in _randbelow 
r = getrandbits(k)   # 0 <= r < 2**k 
ValueError: number of bits must be greater than zero 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
File "C:(File)", line 30, in <module> 
choice = random.choice(randoms) 
File "C:\Python33\lib\random.py", line 250, in choice 
raise IndexError('Cannot choose from an empty sequence') 
IndexError: Cannot choose from an empty sequence 
+0

Переключатель 'randint' в' randrange' - 'randint (a, b)' ** включает 'b' **. – jonrsharpe

ответ

0

Вы должны знать, что есть специальная функция для ramdonly выбора элемента из списка:

random.choice(randoms) 

... должен делать то, что вы намерены.

1

random.randint(a, b) возвращает случайные числа между и бвключительно. При этом randoms[len(randoms)] выдает сообщение об ошибке. Попробуйте вместо этого random.randrange или random.choice.

0

randint принимает в качестве аргументов инклюзивных границы диапазона. Поэтому, если ваша нижняя граница равна 0, вы, вероятно, хотите установить верхнюю границу на len(randoms)-1.

Смежные вопросы