2013-10-07 5 views
0

Простите меня, если этот вопрос повторяется, но я придерживаюсь кода, над которым я работаю. Я создаю программу для себя, чтобы создавать случайные группы людей, и я пытался найти простой способ сделать вставленное количество команд. Области Я сосать здесь:Альтернатива использованию выражения как переменной?

print("How many teams would you like?") 
numberteam = input("Number: ") 

listnumber = 0 

teams = [] 
while numberteam + 1: 
    teams.append(Team(str(listnumber + 1)) = []) 

Я довольно новый кодировщик, поэтому я уверен, что, кроме очевидного, используя выражение для переменного есть, вероятно, другие ошибки, но любые предложения по легкому способ исправить это было бы здорово!

Также, если я что-то оставил, просто спросите! (Кстати, я использую Python)

+0

Что такое 'Team'? – SethMMorton

+2

Мне сложно понять ваш код, но это похоже на комбинацию «random.shuffle» и «slicing» в списке. Лучше всего ... – mgilson

+1

Также имейте в виду, что питон не является C.'while numberteam + 1:' не делает то, что вы ожидаете. Он добавляет 1 к 'numberteam', а затем отбрасывает значение. 'numberteam' не обновляется. – SethMMorton

ответ

3

Попробуйте это (я убирал вещи немного):

print("How many teams would you like?") 
numberteam = int(input("Number: ")) 
# Create a dictionary, where each team has an emtpy list 
teams = dict([('Team{}'.format(i), []) for i in range(numberteam)]) 
# The following also works 
# teams = {'Team{}'.format(i):[] for i in range(numberteam)} 

Вы можете получить доступ к командам, как это:

teams['Team3'] # returns an empty list 

Ручная работа для вышеуказанного

print("How many teams would you like?") 
numberteam = int(input("Number: ")) 
teams = {} 
for i in range(numberteam): 
    teams['Team{}'.format(i)] = [] 
+0

Да, это именно то, что я искал! Я новый кодер и не совсем понял, что делает словарь. Благодаря! – GafRiedS

+1

Или '{'Team {}'. Format (i): [] для i в диапазоне (numberteam)}' :) – TerryA

+0

Да, я не был уверен, что OP имеет python2 или python3, поэтому я пошел с решением что будет работать для обоих. Хотя, теперь, когда я думаю об этом, он выглядит как python3 на основе синтаксиса 'print' и' input'. – SethMMorton

1

Может быть, вы ищете что-то вроде этого:

import random 

persons = ['Adan', 'Boris', 'Carla', 'Dora', 'Ernesto', 'Floridalma', 'Gustavo', 'Hugo', 'Ines', 'Juan'] 
random.shuffle (persons) 

count = int(input('How many teams? ')) 
teams = [persons[i::count] for i in range(count)] 
for idx, team in enumerate(teams): 
    print ('Team {}: {}'.format(idx + 1, ', '.join(team))) 

Содержание person не нужно быть строками, он может содержать экземпляры пользовательского класса Person или все, что вы любите.


Объяснение:

  1. Заполняем список, из которого выбрал.

  2. Перемешать его на месте.

  3. Подскажите пользователю количество команд и преобразуйте их в целое число.

  4. Создайте команды. person[i::count] выбирает из каждого элемента count-th начиная с индекса i. Следовательно, если, например, счет равен 3, в первой команде - (перетасованные) индексы 0, 3, 6 и т. д., во второй команде 1, 4, 7 и т. д. и т. д.

  5. Распечатать.


Общее нарезка обозначение iterable[start:stop:step].


Или, если вы хотите использовать словари, вы можете использовать словарь понимание:

teams = {'Team{}'.format(i + 1): persons[i::count] for i in range(count)} 
for k, v in teams.items(): 
    print ('{}: {}'.format(k, ', '.join(v))) 
+0

Что такое 'i :: count'? – SethMMorton

+0

См. Мое редактирование. – Hyperboreus

+0

Я вижу ... сначала это было похоже на синтаксис пространства имен C++. Я должен был прочитать это на кусочке. – SethMMorton

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