Как выбрать 11 лучших игроков из списка игроков в python? - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь создать программу, в которой я могу произвольно выбирать 11 игроков из 4 списков игроков. Вот что я попробовал.

import random
                                                                   # PLayers   Min   Max
                                                                   # ---------------------
wk = ['Rahul', 'Siefiet']                                          # wk         1     4
batsman = ['Rohit', 'Iyer', 'Munro', 'Pandey', 'Guptil', 'Taylor'] # batsman    3     6
bowler = ['Bumrah', 'Southee', 'Chahal', 'Sodhi', 'Dube']          # bowler     3     6
allRounder = ['jadeja', 'Santer', 'Dube']                          # allrounder 1     4
counter = 0

bat = random.randint(3, 6)
allr = random.randint(1, 4)
print(bat)

while counter != 11:
    for a in range(bat):
        print("Batsman:", set(random.choice(batsman)))
        counter += bat #adding random generated number to counter
    for a in range(bat):
        print("Bowler", set(random.choice(bowler)))
        counter += bat
    for a in range(allr):
        print("Allrounder:", set(random.choice(allRounder)))
        counter += allr
    for a in range(allr):
        print("Allrounder:", set(random.choice(wk)))
        counter += allr

Когда я пытаюсь запустить его. Это идет к бесконечному l oop, Вот скриншот.

enter image description here

Вот кое-что, что я хочу добавить к этому.

if the randomly generated value for the batsman is 6 then 3 bowlers 1 all-rounder 1 wk
if the randomly generated value for the (batsman is 5) then (3 or 4 bowlers), (1 or 2 all-rounder depending upon if 3 bowlers are opted then 2 all rounders if 4 bowlers are opted then 1 allrounder), (1 or 2 wk depending upon if 2 AR are opted then 1 wk if 1 AR is opted then 2 wk)
And Many more conditions Like This

Любая идея, как я могу это реализовать ???

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Помимо бесконечного l oop, while l oop не гарантирует, что вы будете получать ровно 11 игроков каждый раз. Вот еще один способ сделать это. Перемешайте каждый список и добавьте минимальное количество игроков из каждого списка в новый список chosen. Это начинает вас с 8 игроков. Затем объедините и перемешайте оставшихся игроков из всех 4 списков и добавьте еще 3. Теперь у вас есть 11 случайно выбранных игроков с заданными вами требованиями, и вы можете использовать словарь, чтобы распечатать их в соответствии с категорией.

wk = ['Rahul', 'Siefiet']
batsman = ['Rohit', 'Iyer', 'Munro', 'Pandey', 'Guptil', 'Taylor']
bowler = ['Bumrah', 'Southee', 'Chahal', 'Sodhi', 'Dube']
allRounder = ['jadeja', 'Santer']

random.shuffle(batsman)
random.shuffle(bowler)
random.shuffle(allRounder)
random.shuffle(wk)

chosen = batsman[:3] + bowler[:3] + allRounder[:1] + wk[:1]
remainder = batsman[3:] + bowler[3:] + allRounder[1:] + wk[1:]
random.shuffle(remainder)
chosen.extend(remainder[:3])

players = {'Batsman': [x for x in chosen if x in batsman],
           'Bowler': [x for x in chosen if x in bowler],
           'AllRounder': [x for x in chosen if x in allRounder],
           'Wk': [x for x in chosen if x in wk]}

for key in players:
    for name in players[key]:
        print(f'{key}: {name}')
0 голосов
/ 23 февраля 2020

Я пытаюсь создать программу, в которой я могу произвольно выбирать 11 игроков из 4 списков игроков

, которые вы можете использовать random.sample :

import random

final = []
min_to_extract = [1, 3, 4, 3]
for m , l in zip(min_to_extract, (wk, batsman, bowler, allRounder)):
    index_to_extract = random.sample(range(len(l)), m)
    final.extend([l[i] for i in index_to_extract])

    l[:] = [e for i, e in enumerate(l) if i not in index_to_extract]


final.extend(random.sample([*wk, *batsman, *bowler, *allRounder], 11 - len(final)))

random.shuffle(final)

выход:

['Rohit',
 'Dube',
 'Guptil',
 'Chahal',
 'Pandey',
 'Santer',
 'jadeja',
 'Southee',
 'Siefiet',
 'Bumrah',
 'Dube']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...